keepalive主从高可用
简明扼要
- 搭建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 keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_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 MASTER
interface ens192 # 实际网卡名称
virtual_router_id 51 # 虚拟路由id,双节点需要一致
priority 100 # 主节点优先级
advert_int 1
# 认证密码,双节点需一致
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
mysql_check # 使用vrrp_script定义的名称
}
virtual_ipaddress {
10.2.0.200
}
# Allow packets addressed to the VIPs above to be received
accept
}
从keepalived.conf
- 除了优先级,其他都一样
- 当然,网卡要配置当前服务器的
- 没有数据库检测的脚本
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens192 # 实际网卡名称
virtual_router_id 51 # 虚拟路由id,双节点需要一致
priority 90 # 节点优先级
advert_int 1
# 认证密码,双节点需一致
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
}
virtual_ipaddress {
10.2.0.200
}
# Allow packets addressed to the VIPs above to be received
accept
}
mysql_check.sh
- 检查不到数据库服务,关闭KP
#!/bin/bash
ss -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 keepalived
exit 1
else
exit 0
fi
高可用验证
KP运行情况
通过vip连接mysql
vip连接上创建数据库
关闭主库所在服务器的KP
vip连接上再次创建数据库
结尾
- 给个赞呦!!!