Keepalived介紹html
keepalived是一個相似於layer3, 4, 5 交換機制的軟件,也就是咱們平時說的第3層、第4層和第5層交換。Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或 工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器 加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。linux
官網地址:http://www.keepalived.orgnginx
keepalved官方體系結構圖:web
環境準備bash
操做系統:CentOS6.6 64位 2臺 Nginx-Master 10.0.0.60 Nginx-Backup 10.0.0.61 VIP 10.0.0.62
注:未作特別說明,兩臺服務器(兩個節點)都同樣操做服務器
安裝Nginx網絡
使用《OneinStack》Nginx選擇y,其他n架構
安裝Keepalived負載均衡
在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 { admin@linuxeye.com #設置報警郵件地址,能夠設置多個,每行一個。 需開啓本機的sendmail服務 } notification_email_from no-reply@linuxeye.com #設置郵件的發送地址 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 { admin@linuxeye.com #設置報警郵件地址,能夠設置多個,每行一個。 需開啓本機的sendmail服務 } notification_email_from no-reply@linuxeye.com #設置郵件的發送地址 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