最近测试了一下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