keepalive 配合mysql主主複製

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章