文档章节

使用Haproxy做Percona XtraDB Cluster或Mariadb Galera Cluster的负载均衡器

AnthonyYau
 AnthonyYau
发布于 2014/06/09 23:13
字数 1508
阅读 3807
收藏 13

环境情况:

系统:CentOS release 6.4 (Final),2.6.32-358.el6.x86_64

haproxy版本:1.4.25

haproxy节点:10.0.60.190

mysql集群:10.0.60.104(mariadb01)、10.0.60.105(mariadb02)、10.0.60.106(mariadb03)


Haproxy是一个反向代理负载均衡解决方案,支持4层和7层模式,提供后端服务器健康检查,非常稳定。淘宝前期也使用Haproxy作为CDN系统负载均衡器。


一、安装haproxy

tar xvf haproxy-1.4.25.tar.gz
cd haproxy-1.4.25
make TARGET=linux2628
make install

二、配置haproxy

mkdir /etc/haproxy
cd examples/
cp haproxy.cfg /etc/haproxy/


简单配置文件:

# cat /etc/haproxy/haproxy.cfg 

# this config needs haproxy-1.1.28 or haproxy-1.2.1
global #全局参数
        log 127.0.0.1   local0 #定义日志输出到哪里,以及日志级别,格式log <address> <facility> [max level [min level]],使用ip地址,默认使用udp 514端口,可以配置两种日志,一种进程启动和退出,一种代理日志
        log 127.0.0.1   local1 notice
        maxconn 4096 #每个进程的最大并发连接数
        #ulimit-n 10240 #每个进程的文件描述符,默认根据maxconn值自动计算
        chroot /usr/share/haproxy #安全目录,需要root权限启动haproxy
        uid 99 #进程的用户ID,必须使用root用户运行,交换到指定的用户,也可以使用user
        gid 99 #进程的组ID,也可以使用group指定组名
        daemon #后台运行,等同于命令行参数-D
        #nbproc 2 多进程模式,默认只开启一个进程
        pidfile /var/run/haproxy/haproxy.pid
        #stats socket /var/run/haproxy/haproxy.sock level operator #能接收各种状态输出,以及能接收命令输入
        #debug
        #quiet
defaults
        log     global #使用global段的日志定义
        mode    http #设置实例运行模式或协议,支持http、tcp和health,frontend和backend要一致
        option  tcplog #启用记录tcp连接的日志,包含会话状态和时间,连接数,frontend、backend和server name,源地址和端口,当使用tcp模式时能找出客户端、服务器断开连接或超时。
        option  dontlognull #不记录来自监控状态检查的空连接
        retries 3 #连接错误后,重传次数
        option  redispatch #连接错误,启用会话重新分配
        maxconn 2000
        timeout connect      5000 #单位为毫秒,等待成功连接到服务器的最大时间值
        timeout client      50000 #设置在客户端侧的最大不活跃时间值,在TCP模式,最好跟服务器侧一致
        timeout server      50000 #设置在服务端侧的最大不活跃时间值,
frontend pxc-front  #描述允许客户端连接的监听套接字
        bind    *:3306
        mode    tcp
        default_backend pxc-back #当没有匹配use_backend时,默认的backend
frontend stats-front
        bind    *:80
        mode    http
        default_backend stats-back
backend pxc-back #描述进来的连接将转发到哪些后端服务器
        mode    tcp
        balance leastconn    #负载均衡算法,使用最少连接算法,适合长连接应用
        option httpchk #启用HTTP协议检查服务器监控状态,通过调用脚本检查节点的状态
        server mariadb01 10.0.60.104:3306 check port 9200 inter 12000 rise 3 fall 3 #fall连续3次检查错误后,将表明服务器死亡,默认为3;inter连续两次检查的间隔时间值,单位为毫秒,默认为2s;rise连续3次检查成功,表明服务可用
        server mariadb02 10.0.60.105:3306 check port 9200 inter 12000 rise 3 fall 3
        server mariadb03 10.0.60.106:3306 check port 9200 inter 12000 rise 3 fall 3
        #option  mysql-check user haproxy_check #使用Mysql健康检查,不检查数据库和数据一致性,需要在mysql上创建相应的检查帐户
        #server  mariadb01 10.0.60.104:3306 check
        #server  mariadb02 10.0.60.105:3306 check
        #server  mariadb03 10.0.60.106:3306 check
backend stats-back  #开启haproxy的状态页面
        mode http
        balance roundrobin
        stats   uri /haproxy/stats #定义访问统计信息的URI
        stats   auth    admin:admin #设置查看统计信息的用户名和密码


在每个mysql集群节点(集群环境同"部署Mariadb Galera Cluster高可用和多Master集群")安装mysql健康状态检查脚本:

1、拷贝脚本

cd /opt/PXC/
cp bin/clustercheck /usr/bin/
cp xinetd.d/mysqlchk /etc/xinetd.d/


2、添加服务端口:

echo 'mysqlchk 9200/tcp # mysqlchk' >> /etc/services


3、安装和启动xinetd服务

yum -y install xinetd
/etc/init.d/xinetd restart
chkconfig --level 2345 xinetd on


4、创建mysql的检查帐户,如不使用默认用户名和密码,将需要修改脚本

grant process on *.* to 'clustercheckuser'@'localhost' identified by 'clustercheckpassword!';


5、测试

# clustercheck

HTTP/1.1 200 OK

Content-Type: text/plain

Connection: close

Content-Length: 40


Percona XtraDB Cluster Node is synced.

# curl -I 127.0.0.1:9200

HTTP/1.1 200 OK #要保证返回是200状态码

Content-Type: text/plain

Connection: close

Content-Length: 40


三、启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg


查看状态界面:


四、扩展部分

1、haproxy可以安装在mysql集群节点,但需要将mysql节点监听在非3306端口,以让haproxy监控在3306端口;

2、为了保证haproxy的高可用,可以结合keepalived;

3、可以使用haproxy做mysql只读库的负载均衡;


五、使用VIP地址进行Mysql测试

创建测试账号:

 GRANT ALL PRIVILEGES ON *.* TO 'sysbench'@'%' IDENTIFIED BY PASSWORD 'sysbench'


注:其实可以只允许haproxy侧的IP访问即可,因用户通过vip访问mysql集群,haproxy根据调度策略使用自己的ip创建与后端mysql服务器的连接。


进行测试:

3台1核心 2G的xen server虚拟机环境

#  ./sysbench --test=tests/db/oltp.lua --mysql-engine-trx=yes --mysql-host=10.0.60.109 --mysql-user=sysbench --mysql-password=sysbench --mysql-db=test --mysql-table-engine=innodb --num-threads=32 --max-time=60 --report-interval=5 run   
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 32
Report intermediate results every 5 second(s)
Random number generator seed is 0 and will be ignored
Threads started!
[   5s] threads: 32, tps: 0.00, reads/s: 0.00, writes/s: 0.00, response time: 0.00ms (95%)
[  10s] threads: 32, tps: 0.00, reads/s: 0.00, writes/s: 0.00, response time: 0.00ms (95%)
[  15s] threads: 32, tps: 432.40, reads/s: 9881.39, writes/s: 2725.40, response time: 195.12ms (95%)
[  20s] threads: 32, tps: 421.20, reads/s: 9759.22, writes/s: 2705.60, response time: 179.22ms (95%)
[  25s] threads: 32, tps: 425.20, reads/s: 9728.21, writes/s: 2695.00, response time: 178.74ms (95%)
[  30s] threads: 32, tps: 423.80, reads/s: 9811.41, writes/s: 2709.00, response time: 186.11ms (95%)
OLTP test statistics:
    queries performed:
        read:                            229628
        write:                           63625
        other:                           26402
        total:                           319655
    transactions:                        10000  (298.56 per sec.)
    deadlocks:                           6402   (191.14 per sec.)
    read/write requests:                 293253 (8755.31 per sec.)
    other operations:                    26402  (788.25 per sec.)
General statistics:
    total time:                          33.4943s
    total number of events:              10000
    total time taken by event execution: 749.8922s
    response time:
         min:                                 18.51ms
         avg:                                 74.99ms
         max:                                890.31ms
         approx.  95 percentile:             183.95ms
Threads fairness:
    events (avg/stddev):           312.5000/97.68
    execution time (avg/stddev):   23.4341/0.02


来自为知笔记(Wiz)


© 著作权归作者所有

AnthonyYau
粉丝 29
博文 85
码字总数 93611
作品 0
广州
数据库管理员
私信 提问
MariaDB物理备份与MySQL是否一样

背景 MariaDB作为MySQL的分支,其功能越来越受人关注。本文是针对MariaDB数据库平台产品提供功能支持测试整理 测试步骤 MariaDB 10.1.38 MariaDB 10.1默认支持xtrabackup备份 使用压缩page ...

powdba
04/24
0
0
MariaDB 新版本实力逆袭,不仅是 MySQL 替代品

MySQL分支——MariaDB MariaDB是MySQL源代码的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采...

两味真火
2016/12/16
19.8K
21
高可用的mysql galera集群部署

一:集群机器介绍四台机器:1.balance节点安装haproxy和keepalived机器名:balance01 172.18.48.1balance02 172.18.48.22.galera节点安装mysql数据库和galera机器名:galera01 172.18.48.3g...

双叶天下
2014/05/13
4.1K
0
如何安装和配置MariaDB Galera CentOS-7集群

192.168.3.130 clustera galera-db01 192.168.3.131 clusterb galera-db02 192.168.3.129 clusterc galera-db03 以下1-3步三台都需要执行 1:卸载mysql(因为mysql与mariaDB与mysql不兼容) ......

3764208
2018/06/13
0
0
docker搭建集群mysql

1.创建mysql集群 下载pxc镜像 docker pull percona/percona-xtradb-cluster 创建内部网络:出于安全考虑,需要给PXC集群实例创建Docker内部网络 创建命令:docker network create net1 创建指...

xinrenbaodao
2018/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

32位与64位Linux系统下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型...

mskk
12分钟前
4
0
Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)

在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide。 针对此需求,整理了三种实现方式,大家按实际情况选择。 当然,我们做项目肯定会用到 UI 框架,常...

张兴华ZHero
19分钟前
3
0
SpringBoot激活profiles你知道几种方式?

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活Profi...

恒宇少年
21分钟前
5
0
PDF修改文字的方法有哪些?怎么修改PDF文件中的文字

PDF修改文字一直以来都是一个难以解决的问题,很多的办公族在办公的时候会有修改PDF文件中的文字的需要,可是PDF文件一般是不能进行编辑和修改的,难道就没有什么办法解决这个问题了嘛?不要...

趣味办公社
24分钟前
3
0
企业组织中采用服务网格的挑战

作者:Christian Posta 译者:罗广明 原文:https://blog.christianposta.com/challenges-of-adopting-service-mesh-in-enterprise-organizations/ 编者按 本文作者介绍了企业组织采用服务网...

jimmysong
33分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部