千家信息网

使用HAProxy 代理 MySQL Master-Sl方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家主要讲的是关于使用HAProxy 代理 MySQL Master-Sl方法的内容,感兴趣的话就一起来看看这篇文章吧,相信看完使用HAProxy 代理 MySQL Master-Sl方法对
千家信息网最后更新 2026年11月01日使用HAProxy 代理 MySQL Master-Sl方法

本篇文章给大家主要讲的是关于使用HAProxy 代理 MySQL Master-Sl方法的内容,感兴趣的话就一起来看看这篇文章吧,相信看完使用HAProxy 代理 MySQL Master-Sl方法对大家多少有点参考价值吧。

背景

我有一个MySQL Master-Slave Replication, 想要通过HAProxy代理, 做读写分离.

写流量给到Master 节点, 读流量给到Slave 节点.

首先我应该由一个HAProxy的配置, 我想应该这样写(伪配置):

listen  mysql        bind *:3316        mode tcp        ...        server 192.168.1.111 192.168.1.111:3306 check        server 192.168.1.112 192.168.1.112:3306 check        server 192.168.1.113 192.168.1.113:3306 check

很明显, 这么写仅仅只实现了流量的分发, 但并不能实现我的需求: 把写流量给Master, 读流量给Slave 节点.

那么问题来了,首先我要能够识别Master Slave 节点, 才能有接下来的流量分离.

HAProxy有个配置项叫做 mysql-check. 但是这里并不能用它去做Master-Slave的检测,因为这个option只提供存活检测.
只要能够连上,就代表这个mysql后端是Health OK的.

这还是不符合我的需求.

MySQL 如果能够通过tcp-check 检测是Master还是Slave就好了.

既然这样, 写一个TCP-check Wrapper 不就可以了?

TCP-Check-Wrapper

这个Wrapper应该监听在TCP端口上,并以守护进程的方式运行.
当HAproxy连接至其监听的端口时, 会执行相应的脚本, 并将脚本执行结果通过 TCP 连接发送至Haproxy.

代码如下:

  • TCP-Check-Wrapper
  • mysqlchk

放置好mysqlchk 脚本, 然后在每个MySQL节点上把tcp-check-wrapper服务跑起来.

在Master节点上测试一下脚本

[root@control-01 ~]# mysqlchk.mysqlHTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 43MySQL master is running.

在Slave节点上测试一下

[root@control-02 ~]# mysqlchk.mysqlHTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 43MySQL slave is running. (Slave lag: 0)

OK, 通过 mysql check 脚本已经可以帮助我们区分Master还是Slave了.

然后配置好tcp-check-wrapper.

# /etc/haproxy-tcp-check-wrapperhost = "0.0.0.0"port = 9090script = "/usr/bin/mysqlchk.mysql"

在每个MySQL节点上, 运行 tcp-check-wrapper.

haproxy_tcp_check &

HAProxy的配置

基于我们前面所做的, 现在可以写出HAProxy的配置文件了.

listen  mysql_write        bind *:3316        mode tcp        timeout client  10800s        timeout server  10800s        balance leastconn        option tcp-check        tcp-check expect string MySQL\ master\ is\ running.        option allbackups        default-server port 9090 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100        server 192.168.1.111 192.168.1.111:3306 check        server 192.168.1.112 192.168.1.112:3306 check        server 192.168.1.113 192.168.1.113:3306 checklisten  mysql_read        bind *:3317        mode tcp        timeout client  10800s        timeout server  10800s        balance leastconn        option tcp-check        tcp-check expect string MySQL\ slave\ is\ running.        option allbackups        default-server port 9090 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100        server 192.168.1.111 192.168.1.111:3306 check        server 192.168.1.112 192.168.1.112:3306 check        server 192.168.1.113 192.168.1.113:3306 check

总结

至此, 我们已经通过HAProxy, 借助了 "TCP-Check-Wrapper" + "mysqlchk", 实现了MySQL Master-Slave Replication 的读写分离,

TCP-Check-Wrapper 帮助我们对一些不能使用tcp-check option 的应用执行检查.
mysqlchk 提供了具体检测的方法.

其实再多想一点, 可以再进一步利用MHA + HAPRoxy, 可以实现 MySQL Master-Slave Replication 高可用.
即: 在Master发生故障时, MHA可以将其中一台 MySQL Slave提升为Master, 并且配置其他的Slave指向新的Master.

以上关于使用HAProxy 代理 MySQL Master-Sl方法详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

节点 配置 流量 脚本 方法 代理 检测 还是 帮助 内容 端口 需求 测试 监听 运行 明显 再进一步 接下来 代码 代表 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 互联网科技公司简介 齐家互联网科技 海南购全球互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 互联网汽车科技小镇 玖二柒互联网科技公司待遇 移动互联网科技股 注册互联网科技公司经营范围大全 恒生互联网科技指数跳水 想开互联网科技公司怎么样 国大互联网教育科技有限公司工作 科技类公司包括互联网吗 威龙国际互联网科技公司 华中科技大学互联网的牛人 雨阳互联网卡科技有限公司 杭州披云加互联网科技有限公司 唐山双旺合互联网科技产业园 安徽零酒互联网科技有限公司 深圳互联网科技园地址 腾讯阿里互联网科技 互联网金融 科技 紫鲸互联网科技 一五八零互联网科技 互联网科技革命什么开始 中国航天科技大学国际工业互联网 想开互联网科技公司怎么样 河南住房之家互联网科技 互联网科技平台产品运营 互联网科技创新方面的资料
0