點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!
keepalived安裝
yum -y install keepalived
默認(rèn)配置在 /etc/keepalived下
systemctl start keepalived //啟動(dòng)keepalived
systemctl enable keepalived //加入開(kāi)機(jī)啟動(dòng)keepalived
systemctl restart keepalived //重新啟動(dòng)keepalived
systemctl status keepalived //查看keepalived狀態(tài)
10.xx.xx.30
配置keepalived
修改默認(rèn)配置文件:
! Configuration File for keepalived
#指定mysql服務(wù)檢測(cè)腳本
vrrp_script chk_mysql {
script "/etc/keepalived/scripts/chk_mysql.sh" #腳本路徑
interval 2 #腳本檢測(cè)頻率
weight -5 #腳本執(zhí)行返回值 =0 ,優(yōu)先級(jí)不變。!=0 時(shí)優(yōu)先級(jí) -5
fall 3 #如果連續(xù)三次檢測(cè)失敗,認(rèn)為節(jié)點(diǎn)服務(wù)不可用
rise 2 #如果連續(xù)2次檢查成功則認(rèn)為節(jié)點(diǎn)正常
}
#監(jiān)測(cè)mysql 是否是master
vrrp_script chk_mysql_master {
script "/etc/keepalived/scripts/chk_mysql_master.sh"
interval 2
weight 10 #腳本執(zhí)行返回值 =0 ,優(yōu)先級(jí)加 10。!=0 時(shí)優(yōu)先級(jí)不變。
}
vrrp_instance VI_1 {
state MASTER #指定實(shí)例初始狀態(tài),實(shí)際的MASTER和BACKUP是選舉決定。
interface eth0 #指定實(shí)例綁定的網(wǎng)卡。
virtual_router_id 88 #設(shè)置VRID標(biāo)記(0..255)
priority 100 #設(shè)置優(yōu)先級(jí),優(yōu)先級(jí)高的會(huì)被競(jìng)選為Master
advert_int 1 #檢查的時(shí)間間隔,默認(rèn)1s
authentication { #節(jié)點(diǎn)間的認(rèn)證,所有的必須一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.xx.xx.24/24
}
track_script { #指定前面腳本的名字
chk_mysql
chk_mysql_master
}
}
三個(gè)配置文件的區(qū)別只有priority 權(quán)重,節(jié)點(diǎn)1-3分別為100,98,96。通過(guò)其中兩個(gè)腳本判斷MySQL狀態(tài)以及MGR主節(jié)點(diǎn)在哪臺(tái)服務(wù)器上,提升權(quán)重。權(quán)重的提升合理分配,確保三個(gè)服務(wù)器每臺(tái)提升權(quán)重后,均可以權(quán)重最高,實(shí)現(xiàn)VIP漂移。
腳本一:
#!/bin/bash
counter=`netstat -tulnp |grep -w :::3306 |wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi
監(jiān)測(cè)MySQL服務(wù)的狀態(tài)。
腳本二:
#!/bin/bash
source ~/.bash_profile
source /etc/profile
PID1=`mysql -uroot -p1qsx@WAZ -S /home/my3306/run/mysql.sock -e "SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= group_replication_primary_member)" 2>/dev/null |awk NR==2{print}|awk -F" " {print $2}`
PID2=`mysql -uroot -p1qsx@WAZ -S /home/my3306/run/mysql.sock -e "select @@global.server_uuid" 2>/dev/null |awk NR==2{print}`
RES=$(echo $PID1 | grep "${PID2}")
if [[ ${RES} != "" ]]; then exit 0; fi
exit 1
監(jiān)控當(dāng)前節(jié)點(diǎn)uuid是否為主節(jié)點(diǎn)的uuid,是的話就提升權(quán)重,否則權(quán)重不變。
我的環(huán)境腳本2在判斷兩個(gè)變量是否相同時(shí),沒(méi)有進(jìn)入判斷邏輯,返回值始終為0,在腳本里添加引用了環(huán)境變量,就正常了。
腳本均需要添加執(zhí)行權(quán)限:
chmod +x chk_mysql*
驗(yàn)證IP漂移
三個(gè)節(jié)點(diǎn)啟動(dòng)keepalived后,檢查VIP(24)在1節(jié)點(diǎn)(25)上,因?yàn)?節(jié)點(diǎn)權(quán)重最高,并且1節(jié)點(diǎn)為主庫(kù)。
當(dāng)前數(shù)據(jù)庫(kù)節(jié)點(diǎn)狀態(tài):
模擬主節(jié)點(diǎn)宕機(jī):
此時(shí)檢查MGR集群,發(fā)現(xiàn)主庫(kù)是unreachable狀態(tài),此時(shí)MySQL集群還未發(fā)生重新選舉主節(jié)點(diǎn)。
觀察VIP,發(fā)現(xiàn)已經(jīng)漂移到節(jié)點(diǎn)2上去了,因?yàn)榇藭r(shí)2節(jié)點(diǎn)的權(quán)重高,所以在MySQL未選取出新主之前,VIP漂移到了2節(jié)點(diǎn)。
等MySQL選舉完后,觀察節(jié)點(diǎn)信息發(fā)現(xiàn)3節(jié)點(diǎn)成為主節(jié)點(diǎn):
隨后再觀察VIP,發(fā)現(xiàn)識(shí)別到了新的主節(jié)點(diǎn)3節(jié)點(diǎn),并提升了權(quán)重,VIP漂移到了3節(jié)點(diǎn)上:
最終VIP切換成功至主節(jié)點(diǎn)宕機(jī)后新選取的主節(jié)點(diǎn)上。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/129210.html
摘要:前提配置環(huán)境變量準(zhǔn)備服務(wù)器或者虛擬機(jī),以及環(huán)境,這個(gè)是必須的前提啊,我相信你可以的。關(guān)掉主機(jī),主機(jī)監(jiān)控到無(wú)后,自動(dòng)切換 前提-配置java環(huán)境變量 準(zhǔn)備centos服務(wù)器或者虛擬機(jī),以及JAVA環(huán)境,這個(gè)是必須的前提啊,我相信你可以的。 tomcat # 下載 curl http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bi...
閱讀 1493·2023-01-11 13:20
閱讀 1852·2023-01-11 13:20
閱讀 1290·2023-01-11 13:20
閱讀 2041·2023-01-11 13:20
閱讀 4244·2023-01-11 13:20
閱讀 2957·2023-01-11 13:20
閱讀 1583·2023-01-11 13:20
閱讀 3857·2023-01-11 13:20