使用HAProxy对MySQL进行负载均衡和状态监控

文章描述:-2022年4月13日发(作者:费玉清)使用HAProxy对MySQL进行负载均衡和状态监控转载请保留原文内容,并声明转载地址:/blog/乐搜()使用HAProxy已经很久了,但主要用在前端web请求的负载均衡和状态监控上,对于后端的Memcached以及MySQL却一直没有应用,最近对系统架构进行了小规模的整理,把MySQL也收编到了HAProxy下,经过一段时间的使用,体验还是不错的。详细的

-

使用HAProxy对MySQL进行负载均衡和状态监控
2022年4月13日发
(作者:费玉清)

使用HAProxy对MySQL进行负载均衡和状态监控

转载请保留原文内容,并声明转载地址:/blog/

乐搜()使用HAProxy已经很久了,但主要用在前端web请求的负载均衡和状态监控上,对

于后端的Memcached以及MySQL却一直没有应用,最近对系统架构进行了小规模的整理,把MySQL

也收编到了HAProxy下,经过一段时间的使用,体验还是不错的。

详细的HAProxy的安装配置我就不说了,主要针对HAProxy如何监控检测后端MySQL服务器的状态说

两句。

我们的环境由两台master和若干台slave数据库组成,在HA的配置中,可以设置灵活的策略和进行slave

的分组,如果系统更大了,将还会根据业务系统来拆分若干个master和slave组。

声明:以下内容应用和验证环境是基于FreeBSD8.2

环境,

MySQL

5.1

以上版本,理论上Linux

的各个版本基本都能通过,如果有不能通过的情况,请别随意张口扔板砖,欢迎添加评论留言向我提问

HA对MySQL状态监控实现的方式很多,不过大多逻辑都一样,使用自己编写的脚本程序(可以是shell、

php、perl等你熟悉的语言)监控mysql的运行情况,然后通过HTTP的方式输出运行结果给HA,我使

用的是shell程序来实现的监控,结合FreeBSD的inetd服务来实现监控端口的提供

1.监控脚本编写

下面是我写的一段监控shell脚本,用于监控其中一台叫mdb1的master数据库replication运行:

1.#!/usr/local/bin/bash

_HOST="mdb1"

_PORT="3307"

_USERAME="michael"

_PASSWORD="michael@"

6.

7./usr/local/bin/mysql-h$MYSQL_HOST-P$MYSQL_PORT-u$MYSQL_USERAME

-p$MYSQL_PASSWORD-e"showslavestatusG;">/tmp/check_mdb1_

=`grep"Slave_IO_Running"/tmp/check_mdb1_|awk'{print

$2}'`

t=`grep"Slave_SQL_Running"/tmp/check_mdb1_|awk'{print

$2}'`

10.#echoiostat:$iostatandsqlstat:$sqlstat

["$iostat"="Yes"]&&["$sqlstat"="Yes"];

13.#mysqlisfine,returnhttp200

14./bin/echo"HTTP/1.1200OKrn"

15./bin/echo"Content-Type:Content-Type:text/plainrn"

16./bin/echo"rn"

17./bin/echo"MySQL($MYSQL_HOST:$MYSQL_PORT)replicationisrunning.rn"

18./bin/echo"rn"

20.#mysqlisdown,returnhttp503

21./bin/echo"HTTP/1.1503ServiceUnavailablern"

22./bin/echo"Content-Type:Content-Type:text/plainrn"

23./bin/echo"rn"

24./bin/echo"MySQL($MYSQL_HOST:$MYSQL_PORT)replicationis*down*.rn"

25./bin/echo"rn"

上面的代码大概有点shell脚本编写经验的都能明白什么意思,就是用mysql命令连接指定数据库并-e

方式执行MySQL命令“showslavestatusG”,用以输出当前MySQL服务器的replication运行状况,

里面会有两个主要的状态参数Slave_IO_Running和Slave_SQL_Running,这两个参数用于表示当

前数据库的replication运行是否正常,如果有一个是o,则表示数据库同步歇菜了,把状态据结果通过

Linux的管道命令输出到/tmp/check_mdb1_文件(你可以自己随便改个文件名),再使用grep

和awk命令把文件中想要的两个参数文本行读取出来并拆分,最后判断是否都是“Yes”,对于正常情况,

我们输出一个HTTP协议标准的header头信息,里面包含关键的Code200或者Code503,这个其实

就是HAProxy监控最终需要的东西。

上面的解释如果有不明白的,可以留言来问我。

把以上这段代码保存为一个文件,比如/bin/mdb1_,记得chmod+x

2.把脚本变成一个系统TCP监听服务

编写/etc/service文件,在末尾添加如下一行

1_replication8822/tcp

这段代码的意思就是定义一个系统的服务,名称叫mdb1_replication,占用8822端口,使用TCP协

议访问(这里名称和端口可以自己定义,只要不和系统别的服务重名和端口重复即可)

然后编写/etc/,在文件末尾添加如下一行

1_replicatitreamtcpnowaitroot/bin/mdb1_

mdb1_replication

这段代码的意思是添加一个接受系统inetd管理的服务,服务名称是前面提到的mdb1_replication,执

行的脚本是/bin/mdb1_,其他的几个参数意思就自己看看吧

然后运行修改运行/etc/rc.d/inetdrestart启动服务

运行netstat-anl|grep8822看看是否服务和端口起来了,没有起来的话,检查检查哪里出错了,看

看系统日志。

最后执行telnetlocalhost8822,正常应该看到如下运行结果

1.%telnetlocalhost8822

127.0.0.1...

tedtolocalhost.

characteris'^]'.

/1.1200OKrn

t-Type:Content-Type:text/plainrn

7.rn

(mdb2:3307)replicationisrunning.rn

9.rn

tionclosedbyforeignhost.

11.%

3.配置Haproxy的监控

在HA配置文件中添加类似下面的部分内容

mdb_3307192.168.0.8:3307

p

n100

eroundrobin

httpchkOPTIOS*HTTP/1.1rnHost:www

www1:3307www1:3307weight1checkport9922inter2srise2fall

2

mdb2:3307mdb2:3307weight3checkport9922inter2srise2fall

2backup

tcpka

上面这段配置我就不过多说明了,这是HAProxy的配置语法,如果对HA有不明白的地方,欢迎讨论。

补充:目前我们的系统已经实现了ginx/Memcached/Sphinx/MySQL等各个后端应用的负载

均衡和状态监控,还有报警等环节,有兴趣讨论交流的,欢迎和我联络!

-

使用HAProxy对MySQL进行负载均衡和状态监控

发布时间:2022-04-13 02:10:30
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 16 条评论,84人围观)
霍邱二手房V铁粉7 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
$sqlstat["$iostat"="Yes"]&&["$sqlstat"="Yes"];13.#mysqlisfine
潞河医院V铁粉20 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
里面包含关键的Code200或者Code503
高中辅导V铁粉22 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
$sqlstat["$iostat"="Yes"]&&["$sqlstat"="Yes"];13.#mysqlisfine
如何辨别真假鸡蛋V铁粉13 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
体验还是不错的
阳狮锐奇集团V铁粉18 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
如果有不能通过的情况
霸州二手房信息V铁粉1 minute ago Google Chrome 93.0.4577.82 Windows 10 x64
补充:目前我们的系统已经实现了ginx/Memcached/Sphinx/MySQL等各个后端应用的负载均衡和状态监控
新品快播V铁粉30 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
3307)replicationisrunning.rn9.rntionclosedbyforeignhost.11.%3.配置Haproxy的监控在HA配置文件中添加类似下面的部分内容mdb_3307192.168.0.8
蒜苗的营养价值V铁粉24 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
记得chmod+x2.把脚本变成一个系统TCP监听服务编写/etc/service文件
大连地板团购V铁粉28 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
没有起来的话
补肝V铁粉26 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
在末尾添加如下一行1_replication8822/tcp这段代码的意思就是定义一个系统的服务
东钱湖租房V铁粉16 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
returnhttp20014./bin/echo"HTTP/1.1200OKrn"15./bin/echo"Content-Type
催奶食谱V铁粉26 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
3307weight1checkport9922inter2srise2fall2mdb2
星汇园V铁粉12 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
3307weight1checkport9922inter2srise2fall2mdb2
顺义樱花园V铁粉7 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
正常应该看到如下运行结果1.%telnetlocalhost8822127.0.0.1...tedtolocalhost.characteris'^]'./1.1200OKrnt-Type
沙漠海V铁粉30 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
名称叫mdb1_replication