mysql+读的负载均衡_使用HAProxy实现MySQL多slave的读负载均衡

本文介绍了如何利用HAProxy实现MySQL多slave的读负载均衡。通过配置HAProxy,确保查询请求被分发到不同的MySQL slave节点,实现负载均衡。在遇到slave故障时,HAProxy能自动检测并切换到可用的节点。同时,提供了日志监控、故障恢复及权限配置等相关操作。
摘要由CSDN通过智能技术生成

# vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=""  改为  SYSLOGD_OPTIONS="-r -m 2 -c 2"

重启日志服务让配置生效

#/etc/init.d/rsyslog  restart

四,启动haproxy# /etc/init.d/haproxy start

# ps -ef | grep haproxy

haproxy  12648     1  0 02:34 ?        00:00:04 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid# netstat -tunlp | grep 12648

tcp        0      0 0.0.0.0:1080                0.0.0.0:*                   LISTEN      12648/haproxy

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      12648/haproxy

udp        0      0 0.0.0.0:60182               0.0.0.0:*                               12648/haproxy

五,测试负载均衡

在slave1和slave2上分别给haproxy的ip授权:> grant all privileges on *.* to hatst@10.32.1.64 identified by ‘123456‘;

> flush privileges;

为了方便测试,在slave1的test库下面建一个t1表,要slave2的test库下面建test1表。在test库下执行show tables命令结果不一样则表示负载均衡有效。

salve1: 10.32.1.67>use test;

Database changed

>show tables;

+----------------+

| Tables_in_test |

+----------------+

| t1             |

+----------------+

slave2: 10.32.1.73>use test;

Database changed

>show tables;

+----------------+

| Tables_in_test |

+----------------+

| test1          |

+----------------+

测试结果:

9e27c4c95f73b6414040775116a7dda4.png

多次查询返回的结果是t1和test1交替出现。说明查询分别分发到了slave1和slave2上,从而实现了负载均衡。

六,访问haproxy监控页面

因为在配置文件中配置了监控页面,我们可以通过http://10.32.1.64:1080/haproxyadmin?stats来查看后端db的状态。

5feed28081edbd820d8a08e5f06a61b4.png

七,查看日志# tail -f /var/log/haproxy/haproxy.log

Feb 17 17:06:58 localhost haproxy[12648]: 10.32.1.64:50626 [17/Feb/2017:17:06:58.959] mysql mysqlservers/dbsrv1 1/0/30 395 -- 0/0/0/0/0 0/0

Feb 17 17:07:00 localhost haproxy[12648]: 10.32.1.64:50629 [17/Feb/2017:17:07:00.050] mysql mysqlservers/dbsrv2 1/0/5 392 -- 0/0/0/0/0 0/0

Feb 17 17:07:01 localhost haproxy[12648]: 10.32.1.64:50632 [17/Feb/2017:17:07:01.252] mysql mysqlservers/dbsrv1 1/0/12 395 -- 0/0/0/0/0 0/0

Feb 17 17:07:02 localhost haproxy[12648]: 10.32.1.64:50635 [17/Feb/2017:17:07:02.037] mysql mysqlservers/dbsrv2 1/0/9 392 -- 0/0/0/0/0 0/0

Feb 17 18:41:17 localhost haproxy[12648]: 10.32.1.227:8398 [17/Feb/2017:18:41:17.489] stats stats/ 3/0/0/0/4 200 17398 - - LR-- 3/3/0/0/0 0/0 "GET /haproxyadmin?stats HTTP/1.1"

Feb 17 18:41:17 localhost haproxy[12648]: 10.32.1.227:8398 [17/Feb/2017:18:41:17.494] stats stats/ 89/-1/-1/-1/89 503 212 - - LR-- 2/2/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"

Feb 17 18:41:19 localhost haproxy[12648]: 10.32.1.227:8399 [17/Feb/2017:18:41:17.489] stats stats/ 1568/0/0/0/1569 200 17399 - - LR-- 3/3/0/0/0 0/0 "GET /haproxyadmin?stats HTTP/1.1"

Feb 17 18:41:19 localhost haproxy[12648]: 10.32.1.227:8399 [17/Feb/2017:18:41:19.058] stats stats/ 68/-1/-1/-1/68 503 212 - - LR-- 2/2/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"

Feb 17 18:41:19 localhost haproxy[12648]: 10.32.1.227:8400 [17/Feb/2017:18:41:17.489] stats stats/ 2331/0/0/1/2333 200 17402 - - LR-- 3/3/0/0/0 0/0 "GET /haproxyadmin?stats HTTP/1.1"

Feb 17 18:41:19 localhost haproxy[12648]: 10.32.1.227:8400 [17/Feb/2017:18:41:19.823] stats stats/ 60/-1/-1/-1/60 503 212 - - LR-- 2/2/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"

可以看到每一次请求都有记录在日志文件中。

八,failover测试

把slave1的mysql服务停掉模拟故障,我们先来看日志:Server mysqlservers/dbsrv2 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 4ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.

haproxy已经检测到了slave1不可用,现在我们再来通过haproxy转发查询,可以看到haproxy把所有的请求都转发到slave2了,监控界面也已经将slave标记为down了。

b6d5b6d5cbee154121049beae147aa25.png

7c3f305fbb7a83e9e0f93326bff782ac.png

在将slave1的mysql服务启起来之后,slave1双可以正常提供服务了:

fcfcfa56655c887c0ee44352639d3a46.png

注意:

1,如果日志里面出现proxy proxy-mysql has no server available!这个的报错时,可以先看一下后端的mysql服务是否正常,如果正常的话有可能是防火墙的规则有问题或者selinux没有关闭导致的。

2,生产环境如果出现从库宕机要判断主从复制是否有误,复制延迟大不大,确认没问题再提供服务,不然要将有问题的从库从配置文件中摘除。

3,上面配置文件haproxy对后端mysql的检测只是检测端口是否在,也可以通过option  mysql-check user haproxy来检测mysql是否可以正常连接,因为有遇到过mysqld进程还在,但是连不了的情况。此时需要对检测用户haproxy进行授权:

USE mysql;

INSERT INTO user (Host,User) values (‘10.32.1.64>‘,‘haproxy‘);

FLUSH PRIVILEGES;

参考:

http://www.ttlsa.com/linux/haproxy-study-tutorial/

http://www.haproxy.org/

本文出自 “一直在路上” 博客,请务必保留此出处http://chenql.blog.51cto.com/8732050/1898713

使用HAProxy实现MySQL多slave的读负载均衡

标签:haproxy   mysql proxy

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://chenql.blog.51cto.com/8732050/1898713

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值