一、keepalived
成都創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕10余年,專業(yè)且經(jīng)驗(yàn)豐富。10余年網(wǎng)站優(yōu)化營(yíng)銷經(jīng)驗(yàn),我們已為上千余家中小企業(yè)提供了網(wǎng)站制作、成都網(wǎng)站建設(shè)解決方案,按需策劃設(shè)計(jì),設(shè)計(jì)滿意,售后服務(wù)無(wú)憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!
Keepalived的作用是檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器宕機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到,并將有故障的服務(wù)器從系統(tǒng)中剔除,同時(shí)使用其他服務(wù)器代替該服務(wù)器的工作,當(dāng)服務(wù)器工作正常后Keepalived自動(dòng)將服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器。
安裝keepalived
yum方式直接安裝即可,該方式會(huì)自動(dòng)安裝依賴:
Copy
yum -y install keepalived
修改主機(jī)(192.168.30.21)keepalived配置文件
yum方式安裝的會(huì)生產(chǎn)配置文件在/etc/keepalived下:
Copy
vi keepalived.conf
keepalived.conf:
Copy
#檢測(cè)腳本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳執(zhí)行的腳本,檢測(cè)nginx是否啟動(dòng)
interval 2 #(檢測(cè)腳本執(zhí)行的間隔,單位是秒)
weight 2 #權(quán)重
}
#vrrp 實(shí)例定義部分
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER為主,BACKUP為備
interface eth0 # 當(dāng)前進(jìn)行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡) 用ifconfig查看你具體的網(wǎng)卡
virtual_router_id 66 # 虛擬路由編號(hào),主從要一致
priority 100 # 優(yōu)先級(jí),數(shù)值越大,獲取處理請(qǐng)求的優(yōu)先級(jí)越高
advert_int 1 # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))
#授權(quán)訪問(wèn)
authentication {
auth_type PASS #設(shè)置驗(yàn)證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(調(diào)用檢測(cè)腳本)
}
virtual_ipaddress {
192.168.30.20 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)
}
}
virtual_ipaddress 里面可以配置vip,在線上通過(guò)vip來(lái)訪問(wèn)服務(wù)。
interface需要根據(jù)服務(wù)器網(wǎng)卡進(jìn)行設(shè)置通常查看方式ip addr
authentication配置授權(quán)訪問(wèn)后備機(jī)也需要相同配置
修改備機(jī)(192.168.30.22)keepalived配置文件
keepalived.conf:
Copy
#檢測(cè)腳本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳執(zhí)行的腳本,檢測(cè)nginx是否啟動(dòng)
interval 2 #(檢測(cè)腳本執(zhí)行的間隔)
weight 2 #權(quán)重
}
#vrrp 實(shí)例定義部分
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER為主,BACKUP為備
interface eth0 # 當(dāng)前進(jìn)行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡) 用ifconfig查看你具體的網(wǎng)卡
virtual_router_id 66 # 虛擬路由編號(hào),主從要一直
priority 99 # 優(yōu)先級(jí),數(shù)值越大,獲取處理請(qǐng)求的優(yōu)先級(jí)越高
advert_int 1 # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))
#授權(quán)訪問(wèn)
authentication {
auth_type PASS #設(shè)置驗(yàn)證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(調(diào)用檢測(cè)腳本)
}
virtual_ipaddress {
192.168.30.20 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)
}
}
檢測(cè)腳本:
Copy
#!/bin/bash
#檢測(cè)nginx是否啟動(dòng)了
A=ps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then #如果nginx沒(méi)有啟動(dòng)就啟動(dòng)nginx
service nginx start #啟動(dòng)nginx
if [ ps -C nginx --no-header |wc -l
-eq 0 ];then #nginx重啟失敗,則停掉keepalived服務(wù),進(jìn)行VIP轉(zhuǎn)移
killall keepalived
fi
fi
腳本授權(quán):chmod 775 check_nginx_pid.sh
說(shuō)明:腳本必須通過(guò)授權(quán),不然沒(méi)權(quán)限訪問(wèn)啊,在這里我們兩條服務(wù)器執(zhí)行、VIP(virtual_ipaddress:192.168.30.20),我們?cè)谏a(chǎn)環(huán)境是直接通過(guò)vip來(lái)訪問(wèn)服務(wù)。
模擬nginx故障:
修改兩個(gè)服務(wù)器默認(rèn)訪問(wèn)的Nginx的html頁(yè)面作為區(qū)別。
首先訪問(wèn)192.168.30.20,通過(guò)vip進(jìn)行訪問(wèn),頁(yè)面顯示192.168.30.21;說(shuō)明當(dāng)前是主服務(wù)器提供的服務(wù)。
這個(gè)時(shí)候192.168.30.21主服務(wù)器執(zhí)行命令:
Copy
systemctl stop nginx; #停止nginx
再次訪問(wèn)vip(192.168.30.20)發(fā)現(xiàn)這個(gè)時(shí)候頁(yè)面顯示的還是:192.168.30.21,這是腳本里面自動(dòng)重啟。
現(xiàn)在直接將192.168.30.21服務(wù)器關(guān)閉,在此訪問(wèn)vip(192.168.30.20)現(xiàn)在發(fā)現(xiàn)頁(yè)面顯示192.168.30.22這個(gè)時(shí)候keepalived就自動(dòng)故障轉(zhuǎn)移了,一套企業(yè)級(jí)生產(chǎn)環(huán)境的高可用方案就搭建好了。