haproxy代理链接MySQL_使用HAProxy 代理 MySQL Master-Sl方法

使用HAProxy 代理 MySQL Master-Sl方法

发布时间:2020-05-28 17:40:00

来源:51CTO

阅读:198

作者:三月

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

背景

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

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

cff535aa9b5572c5f5699db742b28114.png

首先我应该由一个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.mysql

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 43

在Slave节点上测试一下[root@control-02 ~]# mysqlchk.mysql

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 43

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的配置

基于我们前面所做的, 现在可以写出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方法详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值