Docker HAProxy使用示例

1. 准备Docker HAProxy基础环境:

1
2
3
docker pull haproxy:1.6.5
mkdir haproxy
cd haproxy

2. 编写HAProxy的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
cat <<EOF > haproxy.cfg
global
log 127.0.0.1 local0 # 日志输出配置,所有日志都记录在本机,通过local0输出
maxconn 4096 # 最大连接数
tune.ssl.default-dh-param 2048
chroot /usr/local/sbin # 改变当前工作目录
daemon # 以后台形式运行HAProxy
nbproc 4 # 启动4个HAProxy实例
pidfile /usr/local/sbin/haproxy.pid # pid文件位置
defaults
log 127.0.0.1 local3 # 日志文件的输出定向
mode http # { tcp|http|health } 设定启动实例的协议类型
option dontlognull # 保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
option redispatch # 当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 2 # 重试两次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000 # 最大连接数
balance roundrobin # 负载均衡算法,roundrobin表示轮询,source表示按照IP
timeout connect 5000ms # 连接超时时间
timeout client 50000ms # 客户端连接超时时间
timeout server 50000ms # 服务器端连接超时时间
errorfile 400 /usr/local/etc/haproxy/errors/400.http
errorfile 403 /usr/local/etc/haproxy/errors/403.http
errorfile 408 /usr/local/etc/haproxy/errors/408.http
errorfile 500 /usr/local/etc/haproxy/errors/500.http
errorfile 502 /usr/local/etc/haproxy/errors/502.http
errorfile 503 /usr/local/etc/haproxy/errors/503.http
errorfile 504 /usr/local/etc/haproxy/errors/504.http
balance source

frontend http_frontend
bind *:80
mode http

default_backend server_harbor_backend

backend server_backend
mode http
...
server s1 192.168.86.128:31451
server s2 192.168.86.129:31451
server s3 192.168.86.130:31451
...

EOF

注意事项:宿主机的80端口未被占用;根据需要配置server_backend中的使用标记(…)圈上的部分。

3. 使用Docker镜像启动HAProxy容器:

1
docker run -d -p 80:80 --name haproxy -v `pwd`/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:1.6.5