keepalived

環境

centos 64位

http://www.osyunwei.com/archives/7566.html


Keepalived 是一種高性能的服務器高可用或熱備解決方案,Keepalived可以用來防止服務器單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,通過配合Nginx可以實現web前端服務的高可用。


Keepalived實現的基礎是VRRP協議,Keepalived就是巧用VRRP協議來實現高可用性(HA)的.

VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,VRRP協議將兩臺或多臺路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個),而在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER,或者是通過算法選舉產生,MASTER實現針對虛擬路由器IP的各種網絡功能,如ARP請求,ICMP,以及數據的轉發等;其他設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能。

VRRP協議使用多播數據來傳輸VRRP數據,VRRP數據使用特殊的虛擬源MAC地址發送數據而不是自身網卡的MAC地址,VRRP運行時只有MASTER路由器定時發送VRRP通告信息,表示MASTER工作正常以及虛擬路由器IP(組),BACKUP只接收VRRP數據,不發送數據,如果一定時間內沒有接收到MASTER的通告信息,各BACKUP將宣告自己成爲MASTER,發送通告信息,重新進行MASTER選舉狀態。


192.168.8.100 :   VIP(虛擬ip地址)

keepalived安裝在兩臺物理服務器上,並相互監控對方是否在正常運行。
當節點A正常的時候:節點A上的keepalived會將下面的信息廣播出去:
192.168.8.100 這個IP對應的MAC地址爲節點A網卡的MAC地址
圖中的其它電腦如客戶端和NodeB會更新自己的ARP表,對應192.168.8.100的MAC地址=節點A網卡的MAC地址。
當節點A發生故障的時候,節點B上的keepalived會檢測到,並且將下面的信息廣播出去:
192.168.8.100 這個IP對應的MAC地址爲節點B網卡的MAC地址
圖中的其它電腦如客戶端會更新自己的ARP表,對應192.168.8.100的MAC地址=節點B網卡的MAC地址。


四、安裝keepalived


下載keeplived:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz


上傳keepalived-1.2.12.tar.gz到/usr/local/src目錄


cd /usr/local/src


tar zxvf keepalived-1.2.12.tar.gz


cd keepalived-1.2.12


./configure  --prefix=/usr/local/keepalived  #配置,必須看到以下提示,說明配置正確,才能繼續安裝


Use IPVS Framework : Yes


IPVS sync daemon support : Yes


Use VRRP Framework       : Yes


make #編輯


make install  #安裝


cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived


mkdir /etc/keepalived


ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/


cp /usr/local/keepalived/sbin/keepalived /usr/sbin/


cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/


chmod +x /etc/rc.d/init.d/keepalived  #添加執行權限


chkconfig keepalived on  #設置開機啓動


service keepalived start #啓動


service keepalived stop  #關閉


service keepalived restart  #重啓


五、配置keepalived


cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /usr/local/keepalived/etc/keepalived/keepalived.conf-bak


vi /usr/local/keepalived/etc/keepalived/keepalived.conf  #編輯,修改爲以下代碼


#########################################################


#以下爲192.168.21.129服務器


! Configuration File for keepalived


global_defs {


notification_email {


[email protected]


[email protected]


[email protected]


}


notification_email_from [email protected]


smtp_server 192.168.200.1


smtp_connect_timeout 30


router_id LVS_DEVEL


}


vrrp_script chk_nginx {


script "/etc/keepalived/check_nginx.sh"  #Nginx服務監控腳本


interval 2


weight 2


}


vrrp_instance VI_1 {


state MASTER


interface eth0


virtual_router_id 51


priority 100


advert_int 1


authentication {


auth_type PASS


auth_pass 1111


}


track_script {


chk_nginx #監測nginx進程狀態


}


virtual_ipaddress {


192.168.21.253


}


notify_master "/etc/keepalived/clean_arp.sh  192.168.21.253"  #更新虛擬服務器(VIP)地址的arp記錄到網關


}


vrrp_instance VI_2 {


state BACKUP


interface eth0


virtual_router_id 52


priority 99


advert_int 1


authentication {


auth_type PASS


auth_pass 1111


}


virtual_ipaddress {


192.168.21.252


}


notify_master "/etc/keepalived/clean_arp.sh  192.168.21.252"  #更新虛擬服務器(VIP)地址的arp記錄到網關


}


#########################################################


:wq! #保存退出


#########################################################


#以下爲192.168.21.130服務器


! Configuration File for keepalived


global_defs {


notification_email {


[email protected]


[email protected]


[email protected]


}


notification_email_from [email protected]


smtp_server 192.168.200.1


smtp_connect_timeout 30


router_id LVS_DEVEL


}


vrrp_script chk_nginx {


script "/etc/keepalived/check_nginx.sh"  #Nginx服務監控腳本


interval 2


weight 2


}


vrrp_instance VI_1 {


state BACKUP


interface eth0


virtual_router_id 51


priority 99


advert_int 1


authentication {


auth_type PASS


auth_pass 1111


}


track_script {


chk_nginx #監測nginx進程狀態


}


virtual_ipaddress {


192.168.21.253


}


notify_master "/etc/keepalived/clean_arp.sh  192.168.21.253"  #更新虛擬服務器(VIP)地址的arp記錄到網關


}


vrrp_instance VI_2 {


state MASTER


interface eth0


virtual_router_id 52


priority 100


advert_int 1


authentication {


auth_type PASS


auth_pass 1111


}


virtual_ipaddress {


192.168.21.252


}


notify_master "/etc/keepalived/clean_arp.sh  192.168.21.252"  #更新虛擬服務器(VIP)地址的arp記錄到網關


}


#########################################################


:wq! #保存退出


六、設置nginx服務監控腳本


touch /usr/local/keepalived/check_nginx.sh


ln -s /usr/local/keepalived/check_nginx.sh  /etc/keepalived/check_nginx.sh


vi  /etc/keepalived/check_nginx.sh #編輯,添加以下代碼


#########################################################


#!/bin/sh


if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then


/etc/rc.d/init.d/nginx  start


fi


sleep 2


if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then


/etc/rc.d/init.d/keepalived  stop


fi


#########################################################


:wq! #保存退出


chmod +x /usr/local/keepalived/check_nginx.sh   #添加執行權限


七、設置更新虛擬服務器(VIP)地址的arp記錄到網關腳本


touch  /usr/local/keepalived/clean_arp.sh


ln -s  /usr/local/keepalived/clean_arp.sh  /etc/keepalived/clean_arp.sh


vi  /etc/keepalived/clean_arp.sh  #編輯,添加以下代碼


#!/bin/sh


VIP=$1


GATEWAY=192.168.21.2 #網關地址


/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null


:wq!  #保存退出


chmod +x /usr/local/keepalived/clean_arp.sh  #添加腳本執行權限


service nginx restart #重啓nginx


service keepalived restart  #重啓keepalived













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章