MASTER192.168.1.154
BACKUP192.168.1.142
Vip 192.168.1.77
一:準備工作
1. 修改hosts (MASTER & BACKUP)
Vim /etc/hosts 添加: 192.168.1.154 MASTER 192.168.1.142 BACKUP |
2. 修改homename
永久性修改 vim /etc/hosts
MASTER主機修改為 MASTER
BACKUP主機修改為 BACKUP
3. 安裝SSH服務 客服端及服務端都需要安裝
4. 修改SSH配置文件
1): Vim /etc/ssh/ssh_config
StrictHostKeyChecking ask 改成StrictHostKeyCheckingno
2): vim /etc/ssh/sshd_config
PermitRootLogin no 改為PermitRootLogin yes
這里兩臺主機都需要修改后面會講到具體作用(ssh root@BACKUP -p 58081 service tomcat7 stop)
二:解決依賴
1. apt-getupdate
2. apt-getupgrade 如果服務器以更新可以不做
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作為系統服務啟動:
# 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默認會讀取這個文件。
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ |
4.編輯配置文件,修改以下的內容即可:
# 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 MASTERL # 一個實例的標識地址(可以有多個實例但不能相同) BACKUP主機修改為BACKUP } vrrp_script monitor_tomcat { script “/root/scripts/monitor_tomcat.sh”#根據自己的實際路徑放置健康檢查腳本文件,這里寫的是tomcat的檢測腳本 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 BACKUP主機設置為95 nopreempt #搶占方式實現當優先級高的調度節點故障恢復后,不再搶占為主調度服務器,從而也就避免了因調度節點的故障及故障恢復后來回切換的問題。 advert_int 1# 檢查間隔,默認為1秒 authentication { auth_type PASS# 認證方式,可以是pass或者AH兩種認證方式 auth_pass 1111# 認證密碼 } virtual_ipaddress {# 設置vip,虛擬ip地址(實現高可用,轉移的vip地址) 192.168.1.77# 此地址并不存在,當成為主節點時,此ip地址將會自動生成 } script_track { monitor_tomcat #跟蹤這個monitor_nginx腳本;就是不斷去檢查這個腳本 } }
virtual_server localhost 8080 { delay_loop 2 #每個2秒檢查一次real_server狀態 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 #檢測到服務down后執行的腳本 TCP_CHECK { connect_timeout 2 #連接超時時間 nb_get_retry 2 #重連次數 delay_before_retry 2 #重連間隔時間 connect_port 8080 #健康檢查端口 } } } |
5. 使用expect進行ssh遠程主機之間的交互 (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主機中這里需要更改為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健康檢查腳本 腳本內容如下:(MASTER & BACKUP)
思路為 keepalived 偵測到tomcat down掉以后執行該腳本:
Curl 連接本地8080服務檢查是否真的down掉,如果是,則繼續使用cur連接BACKUP主機 8080服務,如果服務沒有down掉, 即執行epect交互腳本登錄BACKUP主機 并啟動keepalived服務 休眠1秒 ,然后再殺掉本地keepalived服務,然后重啟本地8080服務;否則嘗試重啟tomcat服務, 然后休眠60s然后再嘗試使用curl連接本地8080服務,如果成功,則不管;否則殺死keepalived服務
MASTER: monitor_tomcat.sh
!/bin/sh $(wget --spider http://localhost:8080/ 2> conn.txt ) RC=$(cat conn.txt | grep 'Connection refused') #本地主機8080服務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主機8080服務正常 執行expect腳本ssh遠程登錄BACKUP主機>并啟動keepalived rm conn.txt /root/scripts/.vpn #等待1s再殺掉本地的keepalived服務 sleep 1 service keepalived stop #嘗試啟動本地8080服務 service tomcat7 restart else #BACKUP主機8080服務down掉 嘗試重啟本地8080服務 失敗則殺掉keepalived服務 說明兩臺主機都down掉了 rm conn.txt service tomcat7 restart else #BACKUP主機8080服務down掉 嘗試重啟本地8080服務 失敗則殺掉keepalived服務 說明兩臺主機都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') #本地主機8080服務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主機8080服務正常 執行expect腳本ssh遠程登錄MASTER主機>并啟動keepalived rm conn.txt /root/scripts/.vpn #等待1s再殺掉本地的keepalived服務 sleep 1 service keepalived stop #嘗試啟動本地8080服務 service tomcat7 restart else #MASTER主機8080服務down掉 嘗試重啟本地8080服務 失敗則殺掉keepalived服務 說明兩臺主機都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主機添加crontab定時任務 (BACKUP)
MASTER主機keepalived服務會進行健康檢查,如果本機8080服務down掉,會自動執行健康腳本monitor_tomcat.sh;但是在BACKUP主機上嘗試多次,依然不能自己執行健康腳本;所以添加定時任務每一秒執行一次
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. 重啟服務器 測試:
輸入ip a ,VIP 77 綁定在MASTER主機eth0端口;嘗試關閉MASTER tomcat7服務, VIP成功過度到BACKUP主機;反之關閉BACKUP主機8080服務,VIP成功過渡到MASTER主機;中間因為腳本原因, 會有幾秒鐘過度時間
新聞熱點
疑難解答
圖片精選