溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用keepalived和nginx實(shí)現(xiàn)高可用

發(fā)布時(shí)間:2020-06-18 17:08:53 來(lái)源:億速云 閱讀:392 作者:元一 欄目:系統(tǒng)運(yùn)維

一、keepalived

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)境的高可用方案就搭建好了。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI