MASTER192.168.1.154
BACKUP192.168.1.142
Vip 192.168.1.77
一:準(zhǔn)備工作
1. 修改hosts (MASTER & BACKUP)
Vim /etc/hosts 添加: 192.168.1.154 MASTER 192.168.1.142 BACKUP |
2. 修改homename
永久性修改 vim /etc/hosts
MASTER主機(jī)修改為 MASTER
BACKUP主機(jī)修改為 BACKUP
3. 安裝SSH服務(wù) 客服端及服務(wù)端都需要安裝
4. 修改SSH配置文件
1): Vim /etc/ssh/ssh_config
StrictHostKeyChecking ask 改成StrictHostKeyCheckingno
2): vim /etc/ssh/sshd_config
PermitRootLogin no 改為PermitRootLogin yes
這里兩臺主機(jī)都需要修改后面會講到具體作用(ssh root@BACKUP -p 58081 service tomcat7 stop)
二:解決依賴
1. apt-getupdate
2. apt-getupgrade 如果服務(wù)器以更新可以不做
3. apt-getinstall libpop-dev
我這里是沒找到這個安裝包安裝的是libpoppler-dev
4. apt-getinstall daemon
三:
1.安裝keepalived
# tar zxvf keepalived-1.2.18.tar.gz # cd keepalived-1.2.18 # ./configure --PRefix=/usr/local/keepalived # make # make install |
2. 將keepalived作為系統(tǒng)服務(wù)啟動:
# 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/ |
3. 把keepalived 的配置文件放到/etc/keepalived 下,keepalived默認(rèn)會讀取這個文件。
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ |
4.編輯配置文件,修改以下的內(nèi)容即可:
# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived
global_defs { notification_email { sai@localhost # 報警郵件接收人的地址 } notification_email_from root@localhost # 發(fā)送報警郵件發(fā)件人地址 smtp_server 127.0.0.1# 發(fā)送郵件的服務(wù)器地址 smtp_connect_timeout 30# 郵件超時時間(可以根據(jù)自己的需求進(jìn)行設(shè)定) router_id MASTERL # 一個實(shí)例的標(biāo)識地址(可以有多個實(shí)例但不能相同) BACKUP主機(jī)修改為BACKUP } vrrp_script monitor_tomcat { script “/root/scripts/monitor_tomcat.sh”#根據(jù)自己的實(shí)際路徑放置健康檢查腳本文件,這里寫的是tomcat的檢測腳本 interval 1# 腳本執(zhí)行間隔 Weight -5#腳本結(jié)果導(dǎo)致的優(yōu)先級變更:5表示優(yōu)先級加5;-5表示優(yōu)先級減5 } vrrp_instance VI_1 {# 虛擬路由器自己的名字 state MASTER# 設(shè)置服務(wù)器模式,當(dāng)前為主節(jié)點(diǎn),master端 interface eth0# 實(shí)例網(wǎng)卡,也就是提供服務(wù)的網(wǎng)卡,來發(fā)送vrrp通告 virtual_router_id 51# 設(shè)置vrid,這里非常重要,相同的vrid為一個組,他決定,它將決定多播的MAC地址.(建議不要使用默認(rèn)地址,以免發(fā)生沖突) priority 100# 設(shè)置本節(jié)點(diǎn)的優(yōu)先級,優(yōu)先級高的為master BACKUP主機(jī)設(shè)置為95 nopreempt #搶占方式實(shí)現(xiàn)當(dāng)優(yōu)先級高的調(diào)度節(jié)點(diǎn)故障恢復(fù)后,不再搶占為主調(diào)度服務(wù)器,從而也就避免了因調(diào)度節(jié)點(diǎn)的故障及故障恢復(fù)后來回切換的問題。 advert_int 1# 檢查間隔,默認(rèn)為1秒 authentication { auth_type PASS# 認(rèn)證方式,可以是pass或者AH兩種認(rèn)證方式 auth_pass 1111# 認(rèn)證密碼 } virtual_ipaddress {# 設(shè)置vip,虛擬ip地址(實(shí)現(xiàn)高可用,轉(zhuǎn)移的vip地址) 192.168.1.77# 此地址并不存在,當(dāng)成為主節(jié)點(diǎn)時,此ip地址將會自動生成 } script_track { monitor_tomcat #跟蹤這個monitor_nginx腳本;就是不斷去檢查這個腳本 } }
virtual_server localhost 8080 { delay_loop 2 #每個2秒檢查一次real_server狀態(tài) lb_algo wrr #LVS算法 lb_kind DR #LVS模式 persistence_timeout 60 #會話保持時間 protocol TCP real_server localhost 8080 { weight 3 notify_down /root/scripts/monitor_tomcat.sh #檢測到服務(wù)down后執(zhí)行的腳本 TCP_CHECK { connect_timeout 2 #連接超時時間 nb_get_retry 2 #重連次數(shù) delay_before_retry 2 #重連間隔時間 connect_port 8080 #健康檢查端口 } } } |
5. 使用expect進(jìn)行ssh遠(yuǎn)程主機(jī)之間的交互 (MASTER & BACKUP)
1). apt-get install expect 2).編輯ssh交互腳本 vim /root/scripts/.vpn #!/usr/bin/expect -f
set port 58081 set user root set host BACKUP #BACKUP主機(jī)中這里需要更改為MASTER set passWord 4753beeba235268793abe399debb07fd set timeout -1 set RES ""
spawn ssh $user@$host -p $port service keepalived stop expect "*assword:*"
send "$password/r" expect eof |
6. tomcat健康檢查腳本 腳本內(nèi)容如下:(MASTER & BACKUP)
思路為 keepalived 偵測到tomcat down掉以后執(zhí)行該腳本:
Curl 連接本地8080服務(wù)檢查是否真的down掉,如果是,則繼續(xù)使用cur連接BACKUP主機(jī) 8080服務(wù),如果服務(wù)沒有down掉, 即執(zhí)行epect交互腳本登錄BACKUP主機(jī) 并啟動keepalived服務(wù) 休眠1秒 ,然后再殺掉本地keepalived服務(wù),然后重啟本地8080服務(wù);否則嘗試重啟tomcat服務(wù), 然后休眠60s然后再嘗試使用curl連接本地8080服務(wù),如果成功,則不管;否則殺死keepalived服務(wù)
MASTER: monitor_tomcat.sh
!/bin/sh $(wget --spider http://localhost:8080/ 2> conn.txt ) RC=$(cat conn.txt | grep 'Connection refused') #本地主機(jī)8080服務(wù)down掉 if [[ $RC != "" ]];then rm conn.txt $(wget --spider http://BACKUP:8080/ 2> conn.txt ) BACKUPRC=$(cat conn.txt | grep 'Connection refused') if [[ $BACKUPRC == "" ]];then #如果BACKUP主機(jī)8080服務(wù)正常 執(zhí)行expect腳本ssh遠(yuǎn)程登錄BACKUP主機(jī)>并啟動keepalived rm conn.txt /root/scripts/.vpn #等待1s再殺掉本地的keepalived服務(wù) sleep 1 service keepalived stop #嘗試啟動本地8080服務(wù) service tomcat7 restart else #BACKUP主機(jī)8080服務(wù)down掉 嘗試重啟本地8080服務(wù) 失敗則殺掉keepalived服務(wù) 說明兩臺主機(jī)都down掉了 rm conn.txt service tomcat7 restart else #BACKUP主機(jī)8080服務(wù)down掉 嘗試重啟本地8080服務(wù) 失敗則殺掉keepalived服務(wù) 說明兩臺主機(jī)都down掉了 rm conn.txt service tomcat7 restart $(wget --spider http://localhost:8080/ 2> conn.txt ) LOCALRC=$(cat conn.txt | grep 'Connection refused') if [[ $LOCALRC != "" ]];then #重啟失敗 殺掉keepalived service keepalived stop fi fi else rm conn.txt echo "no Warning" fi |
BACKUP:monitor_tomcat.sh
#!/bin/sh $(wget --spider http://BACKUP:8080/ 2> conn.txt )
RC=$(cat conn.txt | grep 'Connection refused') #本地主機(jī)8080服務(wù)down掉 if [[ $RC != "" ]];then rm conn.txt $(wget --spider http://MASTER:8080/ 2> conn.txt ) MASTERRC=$(cat conn.txt | grep 'Connection refused') if [[ $MASTERRC == "" ]];then #如果MASTER主機(jī)8080服務(wù)正常 執(zhí)行expect腳本ssh遠(yuǎn)程登錄MASTER主機(jī)>并啟動keepalived rm conn.txt /root/scripts/.vpn #等待1s再殺掉本地的keepalived服務(wù) sleep 1 service keepalived stop #嘗試啟動本地8080服務(wù) service tomcat7 restart else #MASTER主機(jī)8080服務(wù)down掉 嘗試重啟本地8080服務(wù) 失敗則殺掉keepalived服務(wù) 說明兩臺主機(jī)都down掉了 rm conn.txt service tomcat7 restart $(wget --spider http://localhost:8080/ 2> conn.txt ) LOCALRC=$(cat conn.txt | grep 'Connection refused') if [[ $LOCALRC != "" ]];then #重啟失敗 殺掉keepalived service keepalived stop fi rm conn.txt fi else rm conn.txt echo "no Warning" fi |
7. BACKUP主機(jī)添加crontab定時任務(wù) (BACKUP)
MASTER主機(jī)keepalived服務(wù)會進(jìn)行健康檢查,如果本機(jī)8080服務(wù)down掉,會自動執(zhí)行健康腳本monitor_tomcat.sh;但是在BACKUP主機(jī)上嘗試多次,依然不能自己執(zhí)行健康腳本;所以添加定時任務(wù)每一秒執(zhí)行一次
Crontab –e
追加: */2 * * * */root/scripts/monitor_tomcat.sh
8. 修改keepclived 啟動腳本 (MASTER & BACKUP)
vim /etc/init.d/keepalived start() #daemon keepalived ${KEEPALIVED_OPTIONS} /usr/local/keepalived/sbin/keepalived
stop() #killproc keepalived killall keepalived
reload() #killproc keepalived -1 killall keepalived -1
|
9. 重啟服務(wù)器 測試:
輸入ip a ,VIP 77 綁定在MASTER主機(jī)eth0端口;嘗試關(guān)閉MASTER tomcat7服務(wù), VIP成功過度到BACKUP主機(jī);反之關(guān)閉BACKUP主機(jī)8080服務(wù),VIP成功過渡到MASTER主機(jī);中間因?yàn)槟_本原因, 會有幾秒鐘過度時間
新聞熱點(diǎn)
疑難解答
圖片精選