本篇文章给大家主要讲的是关于使用HAProxy代理MySQL Master-Sl方法的内容,感兴趣的话就一起来看看这篇文章吧,相信看完使用HAProxy代理MySQL Master-Sl方法对大家多少有点参考价值吧只
背景
我有一个MySQL主从复制,想要通过HAProxy代理,做读写分离。
写流量给到主节点,读流量给到奴隶节点。
首先我应该由一个HAProxy的配置,我想应该这样写(伪配置):
<>以前听,MySQL ,,,结合*:3316 ,,,tcp,模式 ,,,,…… ,,,服务器192.168.1.111 192.168.1.111:3306检查 ,,,,服务器192.168.1.112 192.168.1.112:3306检查 ,,,以前,服务器192.168.1.113 192.168.1.113:3306检查>很明显,这么写仅仅只实现了流量的分发,但并不能实现我的需求:把写流量给主人,读流量给奴隶节点。
那么问题来了,首先我要能够识别主从节点,才能有接下来的流量分离。
HAProxy有个配置项叫做mysql-check。但是这里并不能用它去做主从的检测,因为这个选项只提供存活检测。
只要能够连上,就代表这个mysql后端是健康的。
这还是不符合我的需求。
MySQL如果能够通过tcp-check检测是主人还是奴隶就好了。
既然这样,写一个TCP-check包装不就可以了?
TCP-Check-Wrapper
这个包装应该监听在TCP端口上,并以守护进程的方式运行。
当HAproxy连接至其监听的端口时,会执行相应的脚本,并将脚本执行结果通过TCP连接发送至HAproxy。
代码如下:
- <李> TCP-Check-Wrapper李> <>李mysqlchk李>
放置好mysqlchk脚本,然后在每个MySQL节点上把TCP-Check-Wrapper服务跑起来。
在主节点上测试一下脚本
root@control-01 ~ # mysqlchk.mysql HTTP/1.1 200 OK 内容类型:text/html 内容长度:43 & lt; html> & lt; body> MySQL主运行灵活;/body> & lt;/html>
在奴隶节点上测试一下
root@control-02 ~ # mysqlchk.mysql HTTP/1.1 200 OK 内容类型:text/html 内容长度:43 & lt; html> & lt; body> MySQL奴隶正在运行。(奴隶滞后:0)& lt;/body> & lt;/html>
好的,通过mysql检查脚本已经可以帮助我们区分主还是奴隶了。
然后配置好tcp-check-wrapper。
#/etc/haproxy-tcp-check-wrapper 主机=?.0.0.0" 端口=9090 脚本=?usr/bin/mysqlchk.mysql"
在每个MySQL节点上,运行tcp-check-wrapper。
<>以前haproxy_tcp_check,HAProxy的配置
基于我们前面所做的,现在可以写出HAProxy的配置文件了。
<>以前听,mysql_write ,,,结合*:3316 ,,,tcp,模式 ,,,客户机超时大敌;10800年代 ,,,超时服务器大敌;10800年代 ,,,,平衡leastconn ,,,,选择tcp-check ,,,,tcp-check期望字符串MySQL \主\ \运行。 ,,,,选择allbackups ,,,,默认的服务器端口9090国米2 s downinter 5 s升3降2 slowstart 60 maxconn 64 maxqueue 128体重100 ,,,服务器192.168.1.111 192.168.1.111:3306检查 ,,,,服务器192.168.1.112 192.168.1.112:3306检查 ,,,,服务器192.168.1.113 192.168.1.113:3306检查 听,mysql_read ,,,结合*:3317 ,,,tcp,模式 ,,,客户机超时大敌;10800年代 ,,,超时服务器大敌;10800年代 ,,,,平衡leastconn ,,,,选择tcp-check ,,,,tcp-check期望字符串MySQL \奴隶\ \运行。 ,,,,选择allbackups ,,,,默认的服务器端口9090国米2 s downinter 5 s升3降2 slowstart 60 maxconn 64 maxqueue 128体重100 ,,,服务器192.168.1.111 192.168.1.111:3306检查 ,,,,服务器192.168.1.112 192.168.1.112:3306检查 ,,,以前,服务器192.168.1.113 192.168.1.113:3306检查>总结
至此,我们已经通过HAProxy,借助了“TCP-Check-Wrapper"+“mysqlchk",实现了MySQL主从复制的读写分离,
TCP-Check-Wrapper帮助我们对一些不能使用tcp-check选项的应用执行检查。
mysqlchk提供了具体检测的方法。
其实再多想一点,可以再进一步利用尼古拉斯+ HAPRoxy,可以实现MySQL主从复制高可用。
即:在主发生故障时,尼古拉斯可以将其中一台MySQL奴隶提升为大师,并且配置其他的奴隶指向新的主人。
以上关于使用HAProxy代理MySQL Master-Sl方法详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。