使用HAProxy 代理 MySQL Master-Sl方法
admin
2023-01-25 02:20:05
0

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

背景

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

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

使用HAProxy 代理 MySQL Master-Sl方法

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

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

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

上一篇:ELK日志收集demo

下一篇:安装MediaWiki

相关内容

热门资讯

时隔一年,英国国防大臣斯特里廷... 一年前,当时还是英国卫生大臣的韦斯·斯特里廷(Wes Streeting)曾公开指责以色列犯下战争罪...
微软与Mistral宣布扩大战... 【CNMO科技消息】7月22日,据韩媒报道,微软与法国AI企业Mistral正式宣布大幅扩大双方战略...
东方空间引力一号(遥四)运载火... 本报讯 (记者袁传玺)北京时间7月22日10时54分,东方空间引力一号(遥四)·星联体号运载火箭在我...
“你的手上沾满鲜血”,美防长出... 当地时间21日,美国国防部长赫格塞思在出席国会参议院听证会时表示,根据最新估算,美国对伊朗战事的花费...
Kimi K3让美国羡慕又不甘... 北京时间7月17日凌晨,月之暗面公司发布开源大模型Kimi K3。据报道,该模型总参数规模达2.8万...
对话高正祺:AI五年内或接管芯... 2021 年,高正祺到 MIT 读博士时,ChatGPT 还没有发布。五年后,他已经可以把一份模拟电...
伊朗军方消息人士:若美袭击伊桥... △伊朗霍尔木兹甘省一座桥梁近日遭美军空袭总台记者当地时间22日获悉,一名伊朗军方消息人士针对美方最新...
外国男子在云南跳伞,半空迟迟不... 近日,有视频显示,一名外国男子背着降落伞从玻璃栈道上跳入峡谷,栈道上有游客拍照鼓掌。男子跳下后,以高...
美国人开始在直播间里“抢”东西... 作者 | 竹芒今年夏天,许多美国消费者的手机屏幕上,出现了这样一幅画面:倒计时十五秒,一件商品的价格...
伊朗连炸20座机库,造成数十名... 伊朗公布重大战果。伊朗WANA通讯社转引伊朗伊斯兰革命卫队第31号声明称,在“胜利2号行动”第21轮...