文章目录
- docker下使用haproxy
- 一、haproxy docker镜像安装运行
- 1. 下载 haproxy镜像
- 2. 根据不同需求配置haproxy
- 3. 启动haproxy容器
- 二、haproxy应用场景
- 1. haproxy配置mysql负载均衡
- 1.1 haproxy.cfg 配置文件
- 1.2 运行haproxy docker容器
- 1.3 web界面访问haproxy监控界面
- 三、haproxy常用命令
- 1. 重载haproxy配置,不用重启haproxy
- 四、参考
docker下使用haproxy
一、haproxy docker镜像安装运行
docker学习系列14 使用haproxy实现mysql集群的负载均衡
参考URL: https://cloud.tencent.com/developer/article/1332571
1. 下载 haproxy镜像
docker pull haproxy:1.9.6
查看docker社区关于haproxy官方镜像相关信息
https://github.com/docker-library/docs/tree/master/haproxy 关于该镜像的描述如下:
Since no two users of HAProxy are likely to configure it exactly alike, this image does not come with any default configuration.
由于haproxy的两个用户都不可能完全相同地配置,因此此映像不附带任何默认配置。 (https://cbonte.github.io/haproxy-dconv/)
Please refer to upstream’s excellent (and comprehensive) documentation on the subject of configuring HAProxy for your needs.
请参阅上游优秀(和全面)文档有关haproxy配置。
2. 根据不同需求配置haproxy
写配置文件haproxy.cfg
/home/haproxy下的配置文件名必须为:haproxy.cfg
等会启动容器的时候把目录映射的容器中 -v /home/docker/haproxy:/usr/local/etc/haproxy
3. 启动haproxy容器
docker run -itd --name haproxy -m 1024M -v /home/docker_haproxy/etc/haproxy:/etc/haproxy -v /home/docker_haproxy/var/lib/haproxy:/var/lib/haproxy -p 8082:80 -p 8443:443 docker.io/dockercloud/haproxy
docker run --name haproxy -e LANG=en_US.UTF-8 -v /showcase/haproxy/haproxy.cfg:/etc/haproxy/haproxy.cfg --restart=always --net host -d haproxy:latest
docker run -d --name haproxy -p 80:80 -p 443:443 -p 2222:2222
-p 9090:9090 --restart=always -v /home/haproxy:/usr/local/etc/haproxy 镜像名
二、haproxy应用场景
1. haproxy配置mysql负载均衡
HAProxy厉害的点,不需要写mysql的健康检测,软件本身可以检测出mysql服务停止,然后切换到正常的服务器上,而且当mysql服务器重启之后,HAProxy不需要重启,也能识别并且切换上去。
1.1 haproxy.cfg 配置文件
global
daemon
# nbproc 1
# pidfile /var/run/haproxy.pid
# 工作目录
chroot /usr/local/etc/haproxy
defaults
log 127.0.0.1 local0 err #[err warning info debug]
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull #日志中不记录负载均衡的心跳检测记录
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
######## 监控界面配置 #################
listen admin_status
# 监控界面访问信息
bind 0.0.0.0:8888
mode http
# URI相对地址
stats uri /dbs
# 统计报告格式
stats realm Global\ statistics
# 登录账户信息
stats auth admin:123456
########frontend配置##############
######## mysql负载均衡配置 ###############
listen proxy-mysql
bind 0.0.0.0:3306
mode tcp
# 负载均衡算法
# static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
balance roundrobin
# 日志格式
option tcplog
# 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
# create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
option mysql-check user haproxy
# 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
server MYSQL_1 192.168.130.100:3306 check weight 1 maxconn 2000
server MYSQL_2 192.168.130.101:3306 check weight 1 maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
# 使用keepalive检测死链
# option tcpka
#########################################
配置解释:
- option mysql-check user haproxy | 用于心跳的mysql用户,请在mysql集群数据库进行创建该用户haproxy,读者可自己配置该用户名。在此处我们按照约定俗成定为haproxy。
- server MYSQL_3 192.168.130.3:3306 check weight 1 maxconn 2000 中
192.168.130.3:3306(容器的ip):3306(容器的端口)
check(心跳检测),weight 1(权重,只有当算法为static-rr才生效),maxconn 2000(最大连接数) - option mysql-check user haproxy 这个用户haproxy,是haproxy进行mysql服务可用的检测用。
在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
# create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
1.2 运行haproxy docker容器
docker run -d --name haproxy -p 8888:8888 -p 13000:3306 -v e:/home/docker/haproxy:/usr/local/etc/haproxy haproxy:1.9.6
haproxy 指定ip加入特定网络mynetwork(自己定义的docker网络)
docker run -d --name haproxy -p 8888:8888 -p 13000:3306 -v e:/home/docker/haproxy:/usr/local/etc/haproxy --network mynetwork --ip 192.168.130.10 haproxy:1.9.6
1.3 web界面访问haproxy监控界面
如下,url的访问路径由配置文件的以下参数控制:
# 监控界面访问信息
bind 0.0.0.0:8888
mode http
# URI相对地址
stats uri /dbs
三、haproxy常用命令
1. 重载haproxy配置,不用重启haproxy
If you used a bind mount for the config and have edited your haproxy.cfg file, you can use HAProxy’s graceful reload feature by sending a SIGHUP to the container:
如果你挂载haproxy配置并且修改了你的haproxy.cfg文件,可以使用如下命令优雅的重载配置:
$ docker kill -s HUP my-running-haproxy
四、参考
https://github.com/docker-library/haproxyhttps://cbonte.github.io/haproxy-dconv/1.9/management.html
HAProxy实现mysql负载均衡
参考URL: