双主+haproxy手工切换的一个注意点

在双主数据库切换过程中,通过Haproxy关闭会话可能导致主键冲突错误。分析表明,即使关闭会话,已建立的MySQL连接仍可能继续执行,引起数据不一致。模拟场景验证了这一问题。为解决此问题,优化方法是在切换前直接登录主节点,使用MySQL的kill命令终止业务连接,确保切换时无残留连接。
摘要由CSDN通过智能技术生成

之前设计的切换逻辑

1 查询slve的延迟情况,超过N秒延迟则等待或者返回失败,确保业务影响时间最短

2 登陆proxy节点,disable当前hproxy,使得后续通过proxy的业务连接失败

3 登陆proxy节点,shutdown当前通过proxy连接的会话(如果sql能快速完成,这步其实可用不做,可以做个时间阈值检测,当N秒以后还有业务层连接则kill)

4 记录当前主库的binlog和pos点

5 等待双主间的数据完全一致,即从库执行到步骤4记录的pos点后,可以利用MASTER_POS_WAIT(log_name,log_pos[,timeout])内置函数实现

6 执行切换,即enable M-M中的备用节点

7 返回切换成功


故障现象

切换以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
keepalived和haproxy可以结合使用来实现主备模式的高可用负载均衡。下面是一个示例配置: 1. 首先,安装并配置keepalived。keepalived用于实现故障切换和负载均衡器之间的故障切换。在keepalived的配置文件中,你需要指定虚拟路由冗余协议(VRRP)的相关参数,例如虚拟路由ID、虚拟IP地址、优先级等。同时,你还需要指定故障切换时的脚本路径。 2. 接下来,安装并配置haproxyhaproxy用于实现负载均衡。在haproxy的配置文件中,你需要指定后端服务器的IP地址和端口号,并设置负载均衡算法(例如轮询、加权轮询等)。 3. 当keepalived和haproxy都配置好后,启动keepalived服务。keepalived会监听虚拟IP地址,并在主节故障时将虚拟IP地址切换到备节。 4. 启动haproxy服务。haproxy会根据配置的负载均衡算法将请求转发给后端服务器。 下面是一个示例配置文件的代码: ```shell # keepalived配置文件示例(keepalived.conf) vrrp_script chk_haproxy { script "/etc/keepalived/check_haproxy.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 } track_script { chk_haproxy } } # haproxy配置文件示例(haproxy.cfg) frontend myapp bind 192.168.1.100:80 mode http default_backend app_servers backend app_servers mode http balance roundrobin server server1 192.168.1.101:80 check server server2 192.168.1.102:80 check ``` 请注意,以上示例仅供参考,你需要根据你的实际环境和需求进行相应的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值