Keepalived+重啟腳本+雙機(jī)熱備搭建
①首先創(chuàng)建一個(gè)對(duì)應(yīng)的目錄并下載keepalived
安裝包(提取碼:s6aq)到Linux
中并解壓:
[root@localhost]# mkdir /soft/keepalived && cd /soft/keepalived
[root@localhost]# wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz
[root@localhost]# tar -zxvf keepalived-2.2.4.tar.gz
②進(jìn)入解壓后的keepalived
目錄并構(gòu)建安裝環(huán)境,然后編譯并安裝:
[root@localhost]# cd keepalived-2.2.4
[root@localhost]# ./configure --prefix=/soft/keepalived/
[root@localhost]# make && make install
③進(jìn)入安裝目錄的/soft/keepalived/etc/keepalived/
并編輯配置文件:
[root@localhost]# cd /soft/keepalived/etc/keepalived/
[root@localhost]# vi keepalived.conf
④編輯主機(jī)的keepalived.conf
核心配置文件,如下:
global_defs {
# 自帶的郵件提醒服務(wù),建議用獨(dú)立的監(jiān)控或第三方SMTP,也可選擇配置郵件發(fā)送。
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
# 高可用集群主機(jī)身份標(biāo)識(shí)(集群中主機(jī)身份標(biāo)識(shí)名稱(chēng)不能重復(fù),建議配置成本機(jī)IP)
router_id 192.168.12.129
}
# 定時(shí)運(yùn)行的腳本文件配置
vrrp_script check_nginx_pid_restart {
# 之前編寫(xiě)的nginx重啟腳本的所在位置
script "/soft/scripts/keepalived/check_nginx_pid_restart.sh"
# 每間隔3秒執(zhí)行一次
interval 3
# 如果腳本中的條件成立,重啟一次則權(quán)重-20
weight -20
}
# 定義虛擬路由,VI_1為虛擬路由的標(biāo)示符(可自定義名稱(chēng))
vrrp_instance VI_1 {
# 當(dāng)前節(jié)點(diǎn)的身份標(biāo)識(shí):用來(lái)決定主從(MASTER為主機(jī),BACKUP為從機(jī))
state MASTER
# 綁定虛擬IP的網(wǎng)絡(luò)接口,根據(jù)自己的機(jī)器的網(wǎng)卡配置
interface ens33
# 虛擬路由的ID號(hào),主從兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
virtual_router_id 121
# 填寫(xiě)本機(jī)IP
mcast_src_ip 192.168.12.129
# 節(jié)點(diǎn)權(quán)重優(yōu)先級(jí),主節(jié)點(diǎn)要比從節(jié)點(diǎn)優(yōu)先級(jí)高
priority 100
# 優(yōu)先級(jí)高的設(shè)置nopreempt,解決異?;謴?fù)后再次搶占造成的腦裂問(wèn)題
nopreempt
# 組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣,默認(rèn)1s(類(lèi)似于心跳檢測(cè))
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 將track_script塊加入instance配置塊
track_script {
# 執(zhí)行Nginx監(jiān)控的腳本
check_nginx_pid_restart
}
virtual_ipaddress {
# 虛擬IP(VIP),也可擴(kuò)展,可配置多個(gè)。
192.168.12.111
}
}
⑤克隆一臺(tái)之前的虛擬機(jī)作為從(備)機(jī),編輯從機(jī)的keepalived.conf
文件,如下:
global_defs {
# 自帶的郵件提醒服務(wù),建議用獨(dú)立的監(jiān)控或第三方SMTP,也可選擇配置郵件發(fā)送。
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
# 高可用集群主機(jī)身份標(biāo)識(shí)(集群中主機(jī)身份標(biāo)識(shí)名稱(chēng)不能重復(fù),建議配置成本機(jī)IP)
router_id 192.168.12.130
}
# 定時(shí)運(yùn)行的腳本文件配置
vrrp_script check_nginx_pid_restart {
# 之前編寫(xiě)的nginx重啟腳本的所在位置
script "/soft/scripts/keepalived/check_nginx_pid_restart.sh"
# 每間隔3秒執(zhí)行一次
interval 3
# 如果腳本中的條件成立,重啟一次則權(quán)重-20
weight -20
}
# 定義虛擬路由,VI_1為虛擬路由的標(biāo)示符(可自定義名稱(chēng))
vrrp_instance VI_1 {
# 當(dāng)前節(jié)點(diǎn)的身份標(biāo)識(shí):用來(lái)決定主從(MASTER為主機(jī),BACKUP為從機(jī))
state BACKUP
# 綁定虛擬IP的網(wǎng)絡(luò)接口,根據(jù)自己的機(jī)器的網(wǎng)卡配置
interface ens33
# 虛擬路由的ID號(hào),主從兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
virtual_router_id 121
# 填寫(xiě)本機(jī)IP
mcast_src_ip 192.168.12.130
# 節(jié)點(diǎn)權(quán)重優(yōu)先級(jí),主節(jié)點(diǎn)要比從節(jié)點(diǎn)優(yōu)先級(jí)高
priority 90
# 優(yōu)先級(jí)高的設(shè)置nopreempt,解決異常恢復(fù)后再次搶占造成的腦裂問(wèn)題
nopreempt
# 組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣,默認(rèn)1s(類(lèi)似于心跳檢測(cè))
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 將track_script塊加入instance配置塊
track_script {
# 執(zhí)行Nginx監(jiān)控的腳本
check_nginx_pid_restart
}
virtual_ipaddress {
# 虛擬IP(VIP),也可擴(kuò)展,可配置多個(gè)。
192.168.12.111
}
}
⑥新建scripts
目錄并編寫(xiě)Nginx
的重啟腳本,check_nginx_pid_restart.sh
:
[root@localhost]# mkdir /soft/scripts /soft/scripts/keepalived
[root@localhost]# touch /soft/scripts/keepalived/check_nginx_pid_restart.sh
[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh
#!/bin/sh
# 通過(guò)ps指令查詢(xún)后臺(tái)的nginx進(jìn)程數(shù),并將其保存在變量nginx_number中
nginx_number=`ps -C nginx --no-header | wc -l`
# 判斷后臺(tái)是否還有Nginx進(jìn)程在運(yùn)行
if [ $nginx_number -eq 0 ];then
# 如果后臺(tái)查詢(xún)不到`Nginx`進(jìn)程存在,則執(zhí)行重啟指令
/soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf
# 重啟后等待1s后,再次查詢(xún)后臺(tái)進(jìn)程數(shù)
sleep 1
# 如果重啟后依舊無(wú)法查詢(xún)到nginx進(jìn)程
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
# 將keepalived主機(jī)下線,將虛擬IP漂移給從機(jī),從機(jī)上線接管Nginx服務(wù)
systemctl stop keepalived.service
fi
fi
⑦編寫(xiě)的腳本文件需要更改編碼格式,并賦予執(zhí)行權(quán)限,否則可能執(zhí)行失?。?/p>
[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh
:set fileformat=unix # 在vi命令里面執(zhí)行,修改編碼格式
:set ff # 查看修改后的編碼格式
[root@localhost]# chmod +x /soft/scripts/keepalived/check_nginx_pid_restart.sh
⑧由于安裝keepalived
時(shí),是自定義的安裝位置,因此需要拷貝一些文件到系統(tǒng)目錄中:
[root@localhost]# mkdir /etc/keepalived/
[root@localhost]# cp /soft/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost]# cp /soft/keepalived/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/
[root@localhost]# cp /soft/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
⑨將keepalived
加入系統(tǒng)服務(wù)并設(shè)置開(kāi)啟自啟動(dòng),然后測(cè)試啟動(dòng)是否正常:
[root@localhost]# chkconfig keepalived on
[root@localhost]# systemctl daemon-reload
[root@localhost]# systemctl enable keepalived.service
[root@localhost]# systemctl start keepalived.service
其他命令:
systemctl disable keepalived.service # 禁止開(kāi)機(jī)自動(dòng)啟動(dòng)
systemctl restart keepalived.service # 重啟keepalived
systemctl stop keepalived.service # 停止keepalived
tail -f /var/log/messages # 查看keepalived運(yùn)行時(shí)日志
⑩最后測(cè)試一下VIP
是否生效,通過(guò)查看本機(jī)是否成功掛載虛擬IP
:
[root@localhost]# ip addr
從上圖中可以明顯看見(jiàn)虛擬IP
已經(jīng)成功掛載,但另外一臺(tái)機(jī)器192.168.12.130
并不會(huì)掛載這個(gè)虛擬IP
,只有當(dāng)主機(jī)下線后,作為從機(jī)的192.168.12.130
才會(huì)上線,接替VIP
。最后測(cè)試一下外網(wǎng)是否可以正常與VIP
通信,即在Windows
中直接ping VIP
:
外部通過(guò)VIP
通信時(shí),也可以正常Ping
通,代表虛擬IP
配置成功。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-847182.html
?經(jīng)過(guò)上述步驟后,keepalived
的VIP
機(jī)制已經(jīng)搭建成功,在上個(gè)階段中主要做了幾件事:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847182.html
- 一、為部署
Nginx
的機(jī)器掛載了VIP
。 - 二、通過(guò)
keepalived
搭建了主從雙機(jī)熱備。 - 三、通過(guò)
keepalived
實(shí)現(xiàn)了Nginx
宕機(jī)重啟。
到了這里,關(guān)于深入淺出 -- 系統(tǒng)架構(gòu)之Keepalived搭建雙機(jī)熱備的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!