使用HAProxy代理MySQL Master-Sl方法

  

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

背景

我有一个MySQL主从复制,想要通过HAProxy代理,做读写分离。

写流量给到主节点,读流量给到奴隶节点。

使用HAProxy代理MySQL Master-Sl方法

首先我应该由一个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方法详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

  

使用HAProxy代理MySQL Master-Sl方法