1.關於高可用
配置負載均衡時,請求通過nginx分發到多個tomcat;
如果其中一個tomcat宕機,將不會被分發請求;
這樣保證了穩定性;
但是,nginx也有宕機的可能,會導致請求無法到達tomcat;
配置高可用集群就是為了解決這一問題,也就是nginx宕機了還能正常完成請求;
簡單的高可用:
兩台nginx,nginx1作為主服務器,nginx2作為從服務器;
當請求時,首先到達主服務器,然后主服務器分發到多個tomcat中;
當主服務器宕機時,會自動切換到從服務器;從服務器也可以把請求轉發到多個tomcat中;
這樣就達到了高可用效果;
高可用需求:多個nginx、keepalived、虛擬ip;
關於keepalived:
作用是通過腳本來檢測當前的nginx是否宕機;如果還活着就繼續訪問,否則切換到另備份nginx服務器;
關於虛擬ip:
高可用的多個nginx服務器ip不同,因此需要對外提供一個虛擬ip;
通過虛擬ip來綁定服務器的ip來進行訪問;
虛擬ip首先與主服務器綁定,當主服務器掛掉時,會被keepalived檢測到,keepalived會將虛擬ip綁定到備份服務器;
nginx接收真實請求時相對更容易掛掉,而keepalive沒那么容易掛掉;
總之高可用就是我的服務器掛掉,我的系統依然可以完成請求過程;
2.配置高可用的准備工作
1)准備兩個服務器(比如兩個虛擬機 ps:因為電腦太差帶不動兩個虛擬機就不演示了)
2)在兩個服務器中都裝上nginx
3)在兩台服務器中安裝keepalived
yum安裝命令:
yum install keepalived –y
4)主從配置
安裝完成后,在/etc/keepalived目錄下可以找到 keepalived.conf
1】配置keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(檢測腳本執行的間隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 備份服務器上將 MASTER 改為 BACKUP
interface ens33 //網卡
virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同
priority 90 # 主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1
authentication { #權限校驗的方式,這里用的是密碼,密碼為1111
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虛擬地址
}
}
global_def ->全局定義;主要的是router_id;
router_id的值為服務器的名字;
服務器的名字可在etc/host文件中查看;
vrrp_script chk_http_port ->檢測腳本及其權重參數;
script的值為腳本路徑;
interval位腳本檢測間隔,如果值為2表示每隔2秒檢測一次;
weight表示權重設置的值;例如:如果weigth的值為-10,當服務器掛掉腳本條件成立時,將服務器的權重降低10;
vrrp_instance VI_1 ->虛擬ip的配置;
state為狀態,如果是主服務器為MASTER,如果是從服務器用BACKUP;
interface網卡,在哪個網卡上綁定虛擬ip;網卡的名字可用ifconfig命令查看;
advert_int 1,表示每隔1秒發送一個心跳,檢測服務器是否還活着;
2】在/usr/local/src添加檢測腳本nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
在keepalived.conf中的vrrp_script中引用了該腳本;
大概意思是:啟動nginx,如果nginx掛掉,關閉keepalived所有進程;
3】啟動兩台服務器上的nginx和keepalived
nginx啟動:
./nginx
keepalived啟動:
systemctl start keeplived.service
5)測試效果
從遠程瀏覽器中輸入虛擬ip的地址:
關掉主服務器上的nginx和keepalived,再次訪問虛擬ip,依然可以看到頁面
