我们来学mysql -- keepalive主从高可用
keepalive主从高可用
- 简明扼要
- 安装KP
- 场景
- “高可用”配置
- 主keepalived.conf
- 从keepalived.conf
- mysql_check.sh
- 高可用验证
- KP运行情况
- 通过vip连接mysql
- vip连接上创建数据库
- 关闭主库所在服务器的KP
- vip连接上再次创建数据库
- 结尾
简明扼要
- 搭建mysql的主从
- 八股文如是:主用来写,从作为读(大量报表业务或其他读较多的需求)
- 实际业务中,从顶多就是个备份
- 至少binlog被破坏,数据在从还有一份
- 或许正是源于此种解释,客户认为我认为的不是他认为的
- 便有了这样的需求
- 主节点下线,数据服务要能切换到从
- 呵呵,那便有了keepalive,便会造成两种情况
- 主恢复了后,主从关系易位
- 涉及将从的数据恢复到主(此时做了些业务,从的数据多余主)
- 修改my.cnf配置,调整主从
- 保持之前主从关系
- 从的数据恢复到主(此时做了些业务,从的数据多余主)
- 开启主从
- 主恢复了后,主从关系易位
- 友情提示
- 本篇只是验证数据服务的切换,上述的两种情况不做记录
- 本篇通过主数据服务的下线,关闭KP,实现切换
安装KP
- 参考
场景
- 两台服务器,都安装了KP
- 两台服务器,做了mysql主从
- 主mysql下线,从mysql提供数据服务
“高可用”配置
主keepalived.conf
- 配置 authentication 两个节点一样
- 配置virtual_ipaddress 未被占用的IP
- 配置 interface 实际的网卡
- 配置 virtual_router_id 虚拟路由id,双节点需要一致
- 配置 priority 优先级,以优先级为主,state 没啥意义
- 配置 vrrp_script 检测脚本
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script mysql_check { # 健康检查脚本,通过命令判断MySQL的状态值,如果状态值不为零,则MySQL异常,停止keepalived服务,VIP将飘逸到另一台backup上面。script "/u01/soft/oracle/script/mysql_check.sh" # 脚本别忘了加上可执行权限。interval 2 # 没2秒检查一次# weight -30 # 检查失败,优先级减30
}vrrp_instance VI_1 {state MASTERinterface ens192 # 实际网卡名称virtual_router_id 51 # 虚拟路由id,双节点需要一致priority 100 # 主节点优先级advert_int 1# 认证密码,双节点需一致authentication {auth_type PASSauth_pass 1111}track_script { mysql_check # 使用vrrp_script定义的名称}virtual_ipaddress {10.2.0.200}# Allow packets addressed to the VIPs above to be receivedaccept
}
从keepalived.conf
- 除了优先级,其他都一样
- 当然,网卡要配置当前服务器的
- 没有数据库检测的脚本
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens192 # 实际网卡名称virtual_router_id 51 # 虚拟路由id,双节点需要一致priority 90 # 节点优先级advert_int 1# 认证密码,双节点需一致authentication {auth_type PASSauth_pass 1111}track_script { }virtual_ipaddress {10.2.0.200}# Allow packets addressed to the VIPs above to be receivedaccept
}
mysql_check.sh
- 检查不到数据库服务,关闭KP
#!/bin/bashss -tnl |grep 3308
i=$?ps -ef | grep mysqld |grep -v color |grep -v "grep mysqld"
j=$?mysql -uroot -proot@000 -e "select version();"
k=$?if [ $i -ne 0 -a $j -ne 0 -a $k -ne 0 ];then
# 通过命令判断MySQL的状态值,如果状态值不为零,则MySQL异常,停止keepalived服务,VIP将飘逸到另一台backup上面。systemctl stop keepalivedexit 1
elseexit 0
fi
高可用验证
KP运行情况
通过vip连接mysql
vip连接上创建数据库
关闭主库所在服务器的KP
vip连接上再次创建数据库
结尾
- 给个赞呦!!!