keepalive安裝(配合mysql主主複製)
系統:centos5.5_64
#vip爲程序讀取mysql的IP,應和程序服務器的網卡一個網段
主庫實際IP 192.168.10.48
從庫實際IP 192.168.10.49
虛擬VIP 192.168.10.50 #該IP供程序連接使用
【一】、keepalived安裝步驟,這裏建議使用keepalived-1.1.17,不可使用過高版本
wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
tar zxvpf keepalived-1.1.17.tar.gz
cd keepalived-1.1.17
./configure
#不使用lvs只需要Use VRRP Framework爲Yes
make
make install
#拷貝配置文件並創建配置問文件目錄
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
#suse使用keepalived.suse.init啓動腳本覆蓋/etc/init.d/keepalived
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
【二】、定義配置文件
vim /etc/keepalived/keepalived.conf #(見下面文件詳細配置)
#啓動服務
/etc/init.d/keepalived start
#啓動後加載配置文件(一般無需該操作,只有在更新了配置之後重新加載時使用)
/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf
#如下是keepalived.conf配置文件內容,因爲我們的需求是主主熱備,無需其他功能,故主從的配置文件一致即可
#在同一局域網內,兩組keepalived兩參數 router_id 和 virtual_router_id 不可以一致
#
#主從庫需要區別修改的三處如下:
#
# state 初始狀態值,主庫對應參數爲 MASTER 從庫對應的參數爲 BACKUP
# priority 主庫的優先級參數爲150 從庫的優先級參數爲 100 注意這裏的參數,從庫的優先級一定要低於主庫
# virtual_ipaddress 定義虛擬VIP地址以及綁定的網卡參數
#
###########################keepalived.conf配置內容##########################
! Configuration File for keepalived
global_defs {
router_id mysql #keepalive主機標識,這裏的標識很重要,影響到主從庫之間的keepalived通訊
}
vrrp_script check_run {
script "/etc/keepalived/check_mysql.sh" #服務器檢查腳本,主要檢查mysql是否可以正常訪問
interval 3 #服務檢查週期,單位:秒
}
vrrp_sync_group VG1 {
group {
VI_1 #服務組名,多個時候一個出錯就切換
}
notify_master /etc/keepalived/takeover.sh #狀態切換爲從庫接管時執行該腳本,即主庫宕機時,從庫接管
notify_backup /etc/keepalived/recovery.sh #狀態切換爲主庫接管時執行該腳本,即主庫恢復時,從庫歸還
}
vrrp_instance VI_1 {
state BACKUP #初始狀態,都設置爲BACKUP,配合不搶佔參數
interface eth1 #實例綁定網卡
virtual_router_id 11 #VRID標識0-255
priority 150 #主庫的高優先級競選爲MASTER,從庫的優先級要低於主庫,故需要設置爲100
advert_int 1 #檢查時間,單位:秒
nopreempt #不搶佔,只能設置在BACKUP上
authentication {
#驗證方式
auth_type PASS
auth_pass 1qaz@WSX
}
track_script {
check_run #定義程序的檢查方法,調用腳本
}
virtual_ipaddress {
#VIP
10.10.20.205 dev eth1 label eth1:1
}
}
##########################end#############################################
【三】、注意事項
1、無論主從服務器mysql都要優先keepalived啓動,所以mysql開機啓動權值應高於keepalived
2、將啓動腳本加入系統服務啓動項,需在腳本加入如下一段內容,位置放到`#!/bin/sh`下即可,注意前面的`#`號需要添加
`# chkconfig: 2345 90 80 `
#解釋如下:
# chkconfig 系統命令通過該命令獲取參數
# 2345 啓動順序
# 20 開機啓動優先權 故mysql的啓動優先權一定要高於keepalived優先權,建議將mysql設置爲15 ,keepalived設置爲80
# 80 關機停止優先權 故mysql的停止優先權一定要高於keepalived優先權,建議將mysql設置爲60 ,keepalived設置爲80
3、添加啓動
chkconfig --add keepalived
chkconfig --level 35 keepalived on
4、如果需要主從兩臺服務器關機維護時,如遷移機房,應先關閉從庫服務器上的mysql和keepalived,再關閉主庫的服務,避免因爲先關閉主庫而導致從庫接管服務
【四】、需要配合的檢查腳本及報警腳本如下
##########################################################################
#!/bin/bash
#腳本位置:/etc/keepalived/check_mysql.sh
#腳本作用:mysql狀態檢測腳本
mysql -urepl -p"repl" -h127.0.0.1 -P3306 -e "show status;" >/dev/null 2>&1
if [ "$?" -ne 0 ];then
/etc/init.d/keepalived stop
fi
#腳本結束
##########################################################################
chmod 700 /etc/keepalived/check_mysql.sh
##########################################################################
#!/bin/sh
#腳本位置:/etc/keepalived/takeover.sh
#腳本作用:接管服務報警腳本
#報警短信手機號
Phonenumber=13811080724
LANG="zh_CN.GBK"
export LANG
IP=`/sbin/ifconfig|awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print $2}'|awk '{printf"%s_",$0}' | sed 's/_$//'`
node=`ls /data1/*mysql5*/data/*_mysql5_*_[0-9][0-9]*|awk -F "/" '{print $NF}'|awk -F"_" '{print $1}'`
case $node in
master)
#報警信息
SMS="${node}庫`hostname`已恢復服務_${IP}_`date +%Y%m%d_%R`"
#郵件報警
echo $SMS | /bin/mail -s "keepalived恢復通知" [email protected]
#短信報警
java -cp "/root/sh" SmsDelegate $Phonenumber "$SMS"
;;
slave)
#備用節點接管後,停止數據庫備份
sed -i 's/\(.*\)dbbackup\.sh\(.*\)/#\1dbbackup\.sh\2/' /var/spool/cron/root
#報警信息
SMS="${node}庫`hostname`已接管服務_${IP}_`date +%Y%m%d_%R`"
#郵件報警
echo $SMS | /bin/mail -s "keepalived接管通知" [email protected]
#短信報警
java -cp "/root/sh" SmsDelegate $Phonenumber "$SMS"
;;
esac
#記錄日誌
echo $SMS >> /etc/keepalived/keepalived.log
#腳本結束
##########################################################################
chmod 700 /etc/keepalived/takeover.sh
##########################################################################
#!/bin/sh
#腳本位置:/etc/keepalived/recovery.sh
#腳本作用:關閉服務通知腳本
Phonenumber=15801177843
LANG="zh_CN.GBK"
export LANG
IP=`/sbin/ifconfig|awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print $2}'|awk '{printf"%s_",$0}' | sed 's/_$//'`
node=`ls /data1/*mysql5*/data/*_mysql5_*_[0-9][0-9]*|awk -F "/" '{print $NF}'|awk -F"_" '{print $1}'`
case $node in
master)
SMS="${node}庫`hostname`已等待接管_${IP}_`date +%Y%m%d_%R`"
;;
slave)
SMS="${node}庫`hostname`已等待接管_${IP}_`date +%Y%m%d_%R`"
#主節點恢復後,啓動數據庫備份
sed -i 's/#\(.*\)dbbackup\.sh\(.*\)/\1dbbackup\.sh\2/' /var/spool/cron/root
;;
esac
#記錄日誌
echo $SMS >> /etc/keepalived/keepalived.log
#腳本結束
##########################################################################
chmod 700 /etc/keepalived/recovery.sh
【五】、測試結果
1、首先需要保證mysql和keepalived都正常啓動,且mysql優先啓動於keepalived.可以ifconfig查看到主庫的虛擬VIP網卡,從庫是正常網卡
2、將主庫服務器電源直接斷電,從庫自動接管,時間預計2秒鐘左右.從庫將自動啓動虛擬VIP網卡,並接管成功,訪問數據庫正常。在接管的同時從庫會發出報警告知。
3、重新啓動主庫,待主庫正常啓動,從庫將自動歸還,這時從庫的虛擬VIP將消失,主庫的虛擬VIP加載。同時從庫在歸還的同時將發出報警告知。
4、如果結果vip不生效,從接管VIP後主動刷新arp: /sbin/arping -I em1 -c 10 -s vip gateway&>/dev/null
keepalive 配合mysql主主複製
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.