最近測試了一下mysql+keepalived實現主從自動切換,主從都需要安裝keepalived,使用vip漂移實現主從自動切換,這里主要記錄的是keepalived的文件配置。
這里mysql搭建的是雙主。
環境:
主:192.168.184.128
從:192.168.184.133
vip:192.168.184.132
兩台服務器配置的均是BACKUP,主機優先級是100,從機優先級是90.均為非搶占模式nopreempt(只有BACKUP才可以設置為nopreempt),設置非搶占模式后,在原主機恢復並正常啟動keepalived后,不會自動切回,若想切回master,只需去掉該節點的nopreempt選項並且將priority改的比其他節點大,然后重新加載配置文件即可(等MASTER切過來之后再將配置文件改回去再reload一下)。
主從配置文件除了優先級priority和virtual_server中的real_server不一樣外,其他均一樣。
notify_master 是切換為master時執行的腳本,主要用於判斷主從是否已同步,並記錄下主從切換時的日志位置。
notify_backup 是切換為backup時執行的腳本,主要是修改一些使用於從庫的參數。
nofify_stop 是keepalived服務停掉后執行的腳本,主要是配置一些參數,並判斷是否存在寫操作。
notify_down /data/mysql/bin/MySQL.sh部分是在mysql 3306端口不通時執行的操作,腳本內容是:
#! /bin/sh pkill keepalived
keepalived停掉后就會發生主從切換。
主機keepalived.conf
global_defs { notification_email{ XXXX } notification_email_from XXX smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id KeepAlive_Mysql } vrrp_instance VI_1 { state BACKUP nopreempt interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } notify_master /home/sh/master.sh notify_backup /home/sh/backup.sh nofify_stop /home/sh/stop.sh smtp_alert virtual_ipaddress { 192.168.184.132 } } virtual_server 192.168.184.132 3306 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.184.133 3306 { weight 3 notify_down /data/mysql/bin/MySQL.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
從機keepalived.conf
global_defs { notification_email{ XXXX } notification_email_from XXXX smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id KeepAlive_Mysql } vrrp_instance VI_1 { state BACKUP nopreempt interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } notify_master /home/sh/master.sh notify_backup /home/sh/backup.sh nofify_stop /home/sh/stop.sh smtp_alert virtual_ipaddress { 192.168.184.132 } } virtual_server 192.168.184.132 3306 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.184.128 3306 { weight 3 notify_down /data/mysql/bin/MySQL.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
關於keepalived相關參數的說明可參考:
http://outofmemory.cn/wiki/keepalived-configuration
http://www.keepalived.org/documentation.html