PXC数据库集群的负载均衡

前一篇博客介绍了PXC数据库集群的搭建过程,但是这里有一个问题,虽然搭建了数据库集群,但是如果不使用数据库负载均衡,单节点处理所有的请求,还是会造成单个节点负载过高,数据库系统的性能较差。

本篇博客将会介绍如何通过Haproxy(转发器)做负载均衡,使得请求能够被均匀地分发给每一个节点,单节点负载得到降低,提高了数据库系统的性能。

指标 Haproxy Nginx Apache LVS
是否免费 免费 免费 免费 免费
支持虚拟机 支持 支持 支持 不支持
HTTP协议 支持 支持 不支持 支持
TCP/IP协议 支持 支持(不成熟) 不支持 支持
支持插件 不支持 支持 不支持 不支持
性能 一般 最好

首先,下载Haproxy的docker镜像:

docker pull haproxy

接着,创建Haproxy配置文件。

mkdir /root/ha
touch /root/ha/haproxy.cfg

上述目录可以自定义,后面我们会添加映射,将该配置文件映射到docker容器中。

HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。

  • global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
  • defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
  • frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
  • backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
  • listen:Frontend和Backend的组合体。

更多具体配置,请移步至:Haproxy配置

global
	#工作目录
	chroot /usr/local/etc/haproxy
	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon

defaults
	log global
	mode http         
	#日志格式    
	option httplog       
	#日志中不记录负载均衡的心跳检测记录    
	option dontlognull       
	#连接超时(毫秒)
	timeout connect 5000    
	#客户端超时(毫秒)
	timeout client  50000    
	#服务器超时(毫秒)    
	timeout server  50000

#监控界面  
listen  admin_stats
	#监控界面的访问的IP和端口    
	bind  0.0.0.0:8888    
	#访问协议    
	mode        http
	#URI相对地址    
	stats uri   /dbs
	#统计报告格式    
	stats realm     Global\ statistics
	#登陆帐户信息    
	stats auth  admin:123456

#数据库负载均衡
listen  proxy-mysql
	#访问的IP和端口    
	bind  0.0.0.0:3306      
	#网络协议
	mode  tcp    
	#负载均衡算法(轮询算法)    
	#轮询算法:roundrobin    
	#权重算法:static‐rr    
	#最少连接算法:leastconn    
	#请求源IP算法:source     
	balance  roundrobin
	#日志格式    
	option  tcplog
	# 在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库进行心跳检测   
	option  mysql-check user haproxy
	server  MySQL_1 172.19.0.2:30001 check weight 1 maxconn 2000 
	server  MySQL_2 172.19.0.3:30002 check weight 1 maxconn 2000 
	server  MySQL_3 172.19.0.4:30003 check weight 1 maxconn 2000     
	server  MySQL_4 172.19.0.5:30004 check weight 1 maxconn 2000    
	server  MySQL_5 172.19.0.6:30005 check weight 1 maxconn 2000    
	# 使用keepalive检测死链    
	option  tcpka

创建Haproxy容器

# 8888: 监控端口;3306: 负载均衡服务端口
# -v 映射文件到容器中
docker run -it -d -p 4001:8888 -p 4002:3306 -v /root/ha:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.19.0.7 haproxy
# 进入到容器内部
docker exec -it h1 /bin/bash
# 指定haproxy配置文件,并启动haproxy
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

这里需要注意的是,在使用xftp上传cfg配置文件到linux系统中时,需要设置cfg文件的编码为utf-8,不然会发生莫名其妙的错误。
在这里插入图片描述
在此之前,我们还需要向数据库中添加haproxy用户,因为5个数据库是同步的,因此,这里只需要在一个数据库中添加该用户即可。

-- %表示任何IP都可以以haproxy账号登陆到数据库,密码为空
create user 'haproxy'@'%' identified by '';
-- 用户授权
-- grant all privileges on * to haproxy@'%' identified by '';
-- flush privileges;
-- 删除用户
-- drop user 'haproxy'@'%';

接着,访问:http://192.168.137.118:4001/dbs,输入登录用户名和密码,之前haproxy.cfg配置文件中配置的用户名和密码分别为admin和123456,Haproxy监控界面如下所示。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zyxhangiian123456789/article/details/107614455