keepalived是一個類似於layer3, 4, 5 交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或 工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器 加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器
官網地址:http://www.keepalived.org
keepalved官方體系結構圖:
操作系統:CentOS6.6 64位 2台 Nginx-Master 10.0.0.60 Nginx-Backup 10.0.0.61 VIP 10.0.0.62注:未做特別說明,兩台服務器(兩個節點)都一樣操作
使用《OneinStack》Nginx選擇y,其余n
在Nginx-Master、Nginx-Backup:
cd ~/oneinstack/src wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz tar xzf keepalived-1.2.22.tar.gz cd keepalived-1.2.22 ./configure --prefix=/usr/local/keepalived make && make install配置Keepalived
在Nginx-Master、Nginx-Backup:
ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived chkconfig keepalived on在Nginx-Master修改配置文件,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務 } notification_email_from [email protected] #設置郵件的發送地址 smtp_server 127.0.0.1 #設置smtp server地址 smtp_connect_timeout 30 #設置連接smtp server的超時時間 router_id LVS_DEVEL #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息 } vrrp_script chk_nginx { script "/usr /local/keepalived/sbin/check_nginx.sh" #該腳本檢測ngnix的運行狀態,並在nginx進程不存在時嘗 試重新啟動ngnix,如果啟動失敗則停止keepalived,准備讓其它機器接管。 interval 2 #每2s檢測一次 weight 2 #檢測失敗(腳本返回非0)則優先級2 } vrrp_instance VI_1 { state MASTER #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器 interface eth0 #指定HA監測網絡的接口 virtual_router_id 55 #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的 priority 100 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級 advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒 authentication { #設置驗證類型和密碼 auth_type PASS #設置驗證類型,主要有PASS和AH兩種 auth_pass linuxeye #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信 } virtual_ipaddress { #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個 10.0.0.62 } track_script { chk_nginx #引用VRRP腳本,即在 vrrp_script 部分指定的名字。定期運行它們來改變優先級,並最終引發主備切換。 } }
在Nginx-Backup修改配置文件,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務 } notification_email_from [email protected] #設置郵件的發送地址 smtp_server 127.0.0.1 #設置smtp server地址 smtp_connect_timeout 30 #設置連接smtp server的超時時間 router_id LVS_DEVEL #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息 } vrrp_script chk_nginx { script "/usr /local/keepalived/sbin/check_nginx.sh" #該腳本檢測ngnix的運行狀態,並在nginx進程不存在時嘗 試重新啟動ngnix,如果啟動失敗則停止keepalived,准備讓其它機器接管。 interval 2 #每2s檢測一次 weight 2 #檢測失敗(腳本返回非0)則優先級2 } vrrp_instance VI_1 { state BACKUP #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器 interface eth0 #指定HA監測網絡的接口 virtual_router_id 55 #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的 priority 50 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級 advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒 nopreempt #設置nopreempt防止搶占資源,只生效BACKUP節點 authentication { #設置驗證類型和密碼 auth_type PASS #設置驗證類型,主要有PASS和AH兩種 auth_pass linuxeye #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信 } virtual_ipaddress { #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個 10.0.0.62 } track_script { chk_nginx #引用VRRP腳本,即在 vrrp_script 部分指定的名字。定期運行它們來改變優先級,並最終引發主備切換。 } }檢測腳本,vi /usr/local/keepalived/sbin/check_nginx.sh
#!/bin/bash if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then #echo 1 /etc/init.d/nginx start sleep 5 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then /etc/init.d/keepalived stop #echo 2 fi fi
腳本加上可執行權限
chmod +x /usr/local/keepalived/sbin/check_nginx.sh
service keepalived start #啟動Nginx-Master service keepalived start #啟動Nginx-Backup ip addr #2台服務器分別執行,綁定虛擬IP在Nginx-Master service keepalived stop #停止Nginx-Backup ip addr #2台服務器分別執行,綁定虛擬IP在Nginx-Backup service keepalived start #再啟動Nginx-Backup ip addr #2台服務器分別執行,綁定虛擬IP在Nginx-Master
上述切換默認測試會導致的master和backup之間來回切換
通 常如果master服務死掉後backup會變成master,但是當master服務又好了的時候master此時會搶占VIP,這樣就會發生兩次切換 對業務繁忙的網站來說是不好的。我們可以在配置文件加入nopreempt非搶占,但是這個參數只能用於state為BACKUP,故我們在用HA的時候 最好MASTER和backup的state都設置成BACKUP讓其通過priority來競爭。
假設我要重裝這2台服務器,但是過程不容許丟一個包,通常情況下先替換backup,把master停止,讓vip漂移只backup,替換master,但是在vip漂移過程可能會有丟2個包,如果避免丟包?
方法:我們可以在master替換之前,利用iptables將數據包轉發到backup,再停止master keepalived
iptables -F iptables -t nat -I PREROUTING -i eth0 -j DNAT --to-destination 10.0.0.61 iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE原文:https://blog.linuxeye.com/447.html