扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章给大家主要讲的是关于使用HAProxy 代理 MySQL Master-Sl方法的内容,感兴趣的话就一起来看看这篇文章吧,相信看完使用HAProxy 代理 MySQL Master-Sl方法对大家多少有点参考价值吧。
武鸣ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!我有一个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 不就可以了?
这个Wrapper应该监听在TCP端口上,并以守护进程的方式运行.
当HAproxy连接至其监听的端口时, 会执行相应的脚本, 并将脚本执行结果通过 TCP 连接发送至Haproxy.
代码如下:
放置好mysqlchk 脚本, 然后在每个MySQL节点上把tcp-check-wrapper服务跑起来.
在Master节点上测试一下脚本
[root@control-01 ~]# mysqlchk.mysql HTTP/1.1 200 OK Content-Type: text/html Content-Length: 43 MySQL master is running.
在Slave节点上测试一下
[root@control-02 ~]# mysqlchk.mysql HTTP/1.1 200 OK Content-Type: text/html Content-Length: 43 MySQL slave is running. (Slave lag: 0)
OK, 通过 mysql check 脚本已经可以帮助我们区分Master还是Slave了.
然后配置好tcp-check-wrapper.
# /etc/haproxy-tcp-check-wrapper host = "0.0.0.0" port = 9090 script = "/usr/bin/mysqlchk.mysql"
在每个MySQL节点上, 运行 tcp-check-wrapper.
haproxy_tcp_check &
基于我们前面所做的, 现在可以写出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 check listen 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方法详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流