Nginx相關環境基於上篇Nginx安裝博客的配置;前端
經過yum安裝:linux
yum install -y keepalived
耐心等待安裝完畢。nginx
安裝完畢後 會生成 /etc/keepalived 目錄web
相關命令:算法
service keepalived start #啓動服務 service keepalived stop #中止服務 service keepalived restart #重啓服務
防火牆添加arrp組播規則,或關閉防火牆 bash
iptables:服務器
vi /etc/sysconfig/iptables -A INPUT -p vrrp -d 224.0.0.18/32 -j ACCEPT
firewall:網絡
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp4s0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --reload
關閉selinux:(此處包含一個無敵天坑:若是不關閉此項,配置成功後關掉keepalived服務vip會正常切換,但若關閉服務器vip則不會切換,媽的坑了很久。。。)性能
vi /etc/sysconfig/selinux #修改: SELINUX=disabled #setenforce 0
keepalived 的全部功能都是經過配置 keepalived.conf文件來實現的。測試
建議備份一下keepalived.conf文件從新添加一個新文件填寫或者清空keepalived.conf文件從新填寫。
紅色字體爲不一樣配置
Master節點:
global_defs { router_id nginx_01 #標識本節點的名稱,一般爲hostname } ## keepalived會定時執行腳本並對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。 ##若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長。若是腳本執行結果非0, ##而且weight配置的值小於 0,則優先級相應的減小。其餘狀況,維持本來配置的優先級,即配置文件中priority對應的值。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 #每2秒檢測一次nginx的運行狀態 weight -20 #失敗一次,將本身的優先級-20 } vrrp_instance VI_1 { state MASTER # 狀態,主節點爲MASTER,備份節點爲BACKUP interface eno16777736 # 綁定VIP的網絡接口,經過ip add查看本身的網絡接口 virtual_router_id 51 # 虛擬路由的ID號,兩個節點設置必須同樣,可選IP最後一段使用,相同的VRID爲一個組,他將決定多播的MAC地址 mcast_src_ip 192.168.60.131 # 本機IP地址(80端口已配置好nginx) priority 100 # 節點優先級,值範圍0~254,MASTER要比BACKUP高 advert_int 1 # 組播信息發送時間間隔,兩個節點必須設置同樣,默認爲1秒 # 設置驗證信息,兩個節點必須一致 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP,兩個節點設置必須同樣。能夠設置多個,一行寫一個 virtual_ipaddress { 192.168.60.200 } track_script { chk_nginx # nginx存活狀態檢測腳本 } }
BackUp 節點:
global_defs { router_id nginx_02 #標識本節點的名稱,一般爲hostname } ## keepalived會定時執行腳本並對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。 ##若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長。若是腳本執行結果非0, ##而且weight配置的值小於 0,則優先級相應的減小。其餘狀況,維持本來配置的優先級,即配置文件中priority對應的值。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 #每2秒檢測一次nginx的運行狀態 weight -20 #失敗一次,將本身的優先級-20 } vrrp_instance VI_1 { state BACKUP # 狀態,主節點爲MASTER,備份節點爲BACKUP interface eno16777736 # 綁定VIP的網絡接口,經過ip add查看本身的網絡接口 virtual_router_id 51 # 虛擬路由的ID號,兩個節點設置必須同樣,可選IP最後一段使用,相同的VRID爲一個組,他將決定多播的MAC地址 mcast_src_ip 192.168.60.133 # 本機IP地址(80端口已配置nginx) priority 90 # 節點優先級,值範圍0~254,MASTER要比BACKUP高 advert_int 1 # 組播信息發送時間間隔,兩個節點必須設置同樣,默認爲1秒 # 設置驗證信息,兩個節點必須一致 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP,兩個節點設置必須同樣。能夠設置多個,一行寫一個 virtual_ipaddress { 192.168.60.200 } track_script { chk_nginx # nginx存活狀態檢測腳本 } }
分別在主備服務器/etc/keepalived
目錄下建立nginx_check.sh
腳本,併爲其添加執行權限chmod +x /etc/keepalived/nginx_check.sh
。
用於keepalived定時檢測nginx的服務狀態,若是nginx中止了,會嘗試從新啓動nginx,若是啓動失敗,會將keepalived進程殺死,將vip漂移到備份機器上。
#!/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #嘗試從新啓動nginx sleep 2 #睡眠2秒 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived #啓動失敗,將keepalived服務殺死。將vip漂移到其它備份節點 fi fi
配置完畢,分別啓動主從服務器keepalived服務
service keepalived start ps aux | grep keepalived
兩節點的啓動狀況
查看vip綁定狀況
ip add
主節點:
BackUp節點:
測試vip漂移
中止Master上的keepalived服務
BackUp節點:
從新開啓Master的keepalived服務再次看下vip綁定狀況:
BackUp:
實現搶佔式配置。
Master 節點修改配置文件:
global_defs { router_id nginx_01 #標識本節點的名稱,一般爲hostname } ## keepalived會定時執行腳本並對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。 ##若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長。若是腳本執行結果非0, ##而且weight配置的值小於 0,則優先級相應的減小。其餘狀況,維持本來配置的優先級,即配置文件中priority對應的值。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 #每2秒檢測一次nginx的運行狀態 weight -20 #失敗一次,將本身的優先級-20 } vrrp_instance VI_1 { state MASTER # 狀態,主節點爲MASTER,備份節點爲BACKUP interface eno16777736 # 綁定VIP的網絡接口,經過ifconfig查看本身的網絡接口 virtual_router_id 51 # 虛擬路由的ID號,兩個節點設置必須同樣,可選IP最後一段使用,相同的VRID爲一個組,他將決定多播的MAC地址 mcast_src_ip 192.168.60.131 # 本機IP地址 priority 100 # 節點優先級,值範圍0~254,MASTER要比BACKUP高 advert_int 1 # 組播信息發送時間間隔,兩個節點必須設置同樣,默認爲1秒 #非搶佔式 nopreempt # 設置驗證信息,兩個節點必須一致 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP,兩個節點設置必須同樣。能夠設置多個,一行寫一個 virtual_ipaddress { 192.168.60.200 } track_script { chk_nginx # nginx存活狀態檢測腳本 } }
BackUp節點修改配置文件:
global_defs { router_id nginx_02 #標識本節點的名稱,一般爲hostname } ## keepalived會定時執行腳本並對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。 ##若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長。若是腳本執行結果非0, ##而且weight配置的值小於 0,則優先級相應的減小。其餘狀況,維持本來配置的優先級,即配置文件中priority對應的值。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 #每2秒檢測一次nginx的運行狀態 weight -20 #失敗一次,將本身的優先級-20 } vrrp_instance VI_1 { state BACKUP # 狀態,主節點爲MASTER,備份節點爲BACKUP interface eno16777736 # 綁定VIP的網絡接口,經過ifconfig查看本身的網絡接口 virtual_router_id 51 # 虛擬路由的ID號,兩個節點設置必須同樣,可選IP最後一段使用,相同的VRID爲一個組,他將決定多播的MAC地址 mcast_src_ip 192.168.60.133 # 本機IP地址 priority 100 # 節點優先級,值範圍0~254,MASTER要比BACKUP高 advert_int 1 # 組播信息發送時間間隔,兩個節點必須設置同樣,默認爲1秒 #非搶佔式 nopreempt # 設置驗證信息,兩個節點必須一致 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP,兩個節點設置必須同樣。能夠設置多個,一行寫一個 virtual_ipaddress { 192.168.60.200 } track_script { chk_nginx # nginx存活狀態檢測腳本 } }
紅色爲修改部分,從中可看出backup節點須要把優先級設置與master節點同樣。
重啓兩個節點的keepalived服務,再次斷開Master節點keepalived服務,vip漂移到BackUp節點,而後再開啓Master節點keepalived服務:
Master:
BackUp:
Master沒有搶佔過去,非搶佔式配置成功。
最後看下keepalived與nginx的配置成果: