nginx不支持主從,因此咱們須要使用keepalive支持高可用。nginx
keepalived重要知識點shell
在局域網內,每一個主機上各安裝一個keepalived,注意關閉防火牆firewalld,而後設定一個VIP(虛擬IP),主keepalived會得到受權在本身的主機上設置一個虛擬IP提供給應用層使用。ui
一旦此keepalived用shell腳本監測到此機器上的nginx掛掉以後,馬上kill掉本身,同時也註銷VIP。spa
局域網內另外一個keepalived感知(需關閉防火牆才能互相感知)到主keepalived掛掉,會把虛擬IP在本身所在機器上虛擬一個,此操做叫IP漂移。從而達到應用層對某個nginx掛掉無感知。3d
安裝keepalivedcode
yum -y updaterouter
yum -y remove keepalivedserver
yum install keepalived –y
使用yum安裝的會有一個默認配置文件模板
路徑爲/etc/keepalived/keepalived.conf
啓動keepalived服務
systemctl start keepalived 對象
若是是這樣就是啓動成功了:blog
若是是這樣就是啓動失敗,要檢查是不是conf文件沒改正確:
keepalived配置——發送郵件設置
global_defs { notification_email { 收件郵箱列表 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 發件郵箱設置 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 }
keepalived 配置——獲取網卡名稱
查看本機網卡: IP a
keepalived.conf 配置——VIP配置 (virtual IP)
! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/chk_nginx.sh" 監測nginx是否存活腳本,若是否,keepalived將kill掉本身 interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER 字符串標識,能夠隨便寫,好比backup interface eno16777736 virtual_router_id 51 priority 100 指定keepalived的優先級,最高優先級爲主,能夠設置所在機器的虛擬IP,其它從keepalived則不能。 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.200 指定一個虛擬IP : VIP,後續作IP漂移。這個IP也是應用訪問的IP
#192.168.10.210 能夠設置多個虛擬IP
}
track_script {
chk_nginx 此虛擬IP檢測存活對象的腳本,這裏檢測nginx
}
}
chk_nginx.sh腳本
A=`ps -C nginx --no-header |wc -l` 檢測nginx存活數,若是是0,則是nginx已經掛掉了 if [ $A -eq 0 ] ; then echo 'nginx server is died' killall keepalived kill掉本身 fi
keepalived啓動、中止、查看存活狀態命令
systemctl start keepalived.service 啓動
systemctl stop keepalived.service 中止
systemctl status keepalived.service 查看狀態
nginx啓動、中止、查看運行狀態
cd nginx目錄
./sbin/nginx -t 檢查nginx.conf腳本語法是否正常
./sbin/nginx 啓動
./sbin/nginx -s stop 中止 Stop 是快速關閉,無論有沒有正在處理的請求。
./sbin/nginx -s quit 退出 Quit 是一個優雅的關閉方式,Nginx在退出前完成已經接受的鏈接請求。
./sbin/nginx -s reload 重啓
ps -ef|grep nginx 查看運行狀態
ps -C nginx --no-header |wc -l 查看存活數。通常狀況下,2是正常數,由於一個nginx啓動會有兩個nginx進程?