Keepalived:html
Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。nginx
一.VRRP協議(引用參考: http://bbs.nanjimao.com/thread-790-1-1.html )web
vrrp: 虛擬路由協議(virtual redundant routing protocol)算法
VRRP協議是爲消除在靜態缺省路由環境下的缺省路由器單點故障引發的網絡失效而設計的主備模式的協議,使得在發生故障而進行設備功能切換時能夠不影響內外數據通訊,不須要再修改內部網絡的網絡參數。VRRP協議須要具備IP地址備份,優先路由選擇,減小沒必要要的路由器間通訊等功能。vim
VRRP協議將兩臺或多臺路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個),而在路由器組內部,若是實際擁有這個對外IP的路由器若是工做正常的話就是MASTER,或者是經過算法選舉產生,MASTER實現針對虛擬路由器IP的各類網絡功能,如ARP請求,ICMP,以及數據的轉發等;其餘設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能。
配置VRRP協議時須要配置每一個路由器的虛擬路由器ID(VRID)和優先權值,使用VRID將路由器進行分組,具備相同VRID值的路由器爲同一個組,VRID是一個0~255的正整數;同一組中的路由器經過使用優先權值來選舉MASTER,優先權大者爲MASTER,優先權也是一個0~255的正整數。
VRRP協議使用多播數據來傳輸VRRP數據,VRRP數據使用特殊的虛擬源MAC地址發送數據而不是自身網卡的MAC地址,VRRP運行時只有MASTER路由器定時發送VRRP通告信息,表示MASTER工做正常以及虛擬路由器IP(組),BACKUP只接收VRRP數據,不發送數據,若是必定時間內沒有接收到MASTER的通告信息,各BACKUP將宣告本身成爲MASTER,發送通告信息,從新進行MASTER選舉狀態。bash
相關術語:服務器
virtual router: 虛擬路由(一個是基本,2個是理想;再多就意義不大了)又稱爲vrrp備份組,由一個master設備和一個或多個backup設備組成,被看成一個共享局域網內主機的默認網關。網絡
Vrid: 虛擬路由標識0--255;擁有相同vrid的一組路由器構成的一個虛擬路由器;spa
Master路由器: 主路由器只有一個(虛擬路由器中承擔報文轉發任務的路由器)。.net
Backup路由器:備節點能夠有多個(最少一個),master路由器出現故障時,可以經過競選等方式成爲代替master路由器工做的路由器。
Vip(虛擬路由器的IP地址): 一個虛擬路由器能夠擁有多個ip地址,由用戶進行設置;
Vmc(虛擬MAC地址):標準格式爲:00-00-5E-00-01-[vrid] 虛擬MAC地址由虛擬路由器根據虛擬路由器ID生成的MAC地址;擋虛擬路由器迴應ARP請求時,使用虛擬MAC地址,而不是使用真實接口的MAC地址。
Priority:取值範圍爲0--255,值越高優先級越大;vrrp根據優先級來肯定虛擬路由器中每臺路由器的地位。
搶佔方式:若是backup路由器工做在搶佔方式下,當它收到vrrp報文後,會將本身的優先級與通告報文中的優先級進行比較,若是本身的優先級比當前的master路由器的優先級高,就會搶佔成爲master路由器;不然將保持backup狀態。
非搶佔方式:若是backup路由器工做在非搶佔方式下,則只要master路由器沒有出現故障,backup路由器即便隨後被配置了更高的優先級也不會成爲master路由器。
Ubuntu 安裝keepalived (熱備份):
下載keepalived:
# wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
master服務器端:
解決依賴關係:
# apt-get update && apt-get upgrade
# apt-get install libpop-dev
# apt-get install daemon
安裝keepalived:
# tar zxvf keepalived-1.2.18.tar.gz
# cd keepalived-1.2.18
# ./configure --prefix=/usr/local/keepalived
# make
# make install
將keepalived做爲系統服務啓動:
# mkdir /etc/sysconfig
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/sbin/keepalived /sbin/
把keepalived 的配置文件放到/etc/keepalived 下,keepalived默認會讀取這個文件。
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
編輯配置文件,修改如下的內容便可:
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
sai@localhost # 報警郵件接收人的地址
}
notification_email_from root@localhost # 發送報警郵件發件人地址
smtp_server 127.0.0.1# 發送郵件的服務器地址
smtp_connect_timeout 30# 郵件超時時間(能夠根據本身的需求進行設定)
router_id LVS_DEVEL# 一個實例的標識地址(能夠有多個實例但不能相同)
}
vrrp_script monitor_nginx {
script 「/root/scripts/monitor_nginx.sh」#根據本身的實際路徑放置腳本文件
interval 1# 腳本執行間隔
Weight -5#腳本結果致使的優先級變動:5表示優先級加5;-5表示優先級減5
}
vrrp_instance VI_1 {# 虛擬路由器本身的名字
state MASTER# 設置服務器模式,當前爲主節點,master端
interface eth0# 實例網卡,也就是提供服務的網卡,來發送vrrp通告
virtual_router_id 51# 設置vrid,這裏很是重要,相同的vrid爲一個組,他決定,它將決定多播的MAC地址.(建議不要使用默認地址,以避免發生衝突)
priority 100# 設置本節點的優先級,優先級高的爲master
advert_int 1# 檢查間隔,默認爲1秒
authentication {
auth_type PASS# 認證方式,能夠是pass或者AH兩種認證方式
auth_pass 1111# 認證密碼
}
virtual_ipaddress {# 設置vip,虛擬ip地址(實現高可用,轉移的vip地址)
10.0.1.230# 此地址並不存在,當成爲主節點時,此ip地址將會自動生成
}
script_track {
monitor_nginx #跟蹤這個monitor_nginx腳本;就是不斷去檢查這個腳本
}
}
##################################################
以後的內容不用修改,保持默認便可;
--------------------------------------
備份節點服務器步驟與上面相同: 只須要將/etc/keepalived/keepalived.conf中的 MASTER 修改成 BACKUP , 把優先級改成:priority 99 便可!
###################################################
腳本內容以下:
# vim/root/scripts/monitor_nginx.sh
#!/bin/bash
if [ 「$(ps -ef | grep 「nginx: master process」 | grep -v grep)」== 「」 ]
then
/usr/local/nginx/sbin/nginx
sleep 5
if [ 「$(ps -ef | grep 「nginx: master process」 | grep -v grep)」== 「」 ]
then
killall keepalived
fi
fi
======================================
將keepalived做爲系統啓動服務:
# mkdir -p /etc/rc.d/init.d
# cp /usr/share/initramfs-tools/scripts/functions /etc/rc.d/init.d/
# vim /etc/init.d/keepalived +23
修改成:(以下所示)
#daemon keepalived ${KEEPALIVED_OPTIONS}#註釋當前行,添加以下內容
daemon keepalived start
建立目錄:
#mkdir /var/lock/subsys
(注意: 此目錄在服務器重啓後會消失,須要將其寫到開機啓動項中;如寫到/etc/rc.local裏)
開機自啓動:
# vim /etc/rc.local
修改成如下內容便可:
mkdir /var/lock/subsys
service keepalived start
按Esc鍵退出編輯模式
:wq (保存並退出)
啓動keepalived:
# service keepalived start
驗證:
# ip addr show # 此時eth0中就會顯示以前定義的虛擬IP 地址:10.0.1.230
注意:backup服務器ip addr show 是不會有 10.0.1.230 這個ip地址的;除非等master服務器宕機後,成爲主節點後就會自動生成這個虛擬IP地址的;當master服務器正常後就會自動消失