写点什么

使用 Docker-Compose 部署 HAProxy 为 TiDB-Server 做负载均衡

  • 2022 年 7 月 11 日
  • 本文字数:2643 字

    阅读完需:约 9 分钟

作者: mao_siyu 原文来源:https://tidb.net/blog/7f654013

使用 HAProxy 为 TiDB-Server 做负载均衡

环境
  • IP: 172.160.180.46

  • 系统: CentOS 7


创建文件夹
mkdir -p /home/tidb/haproxy/config
复制代码
配置 haproxy.cfg
cat > /home/tidb/haproxy/config/haproxy.cfg << ericglobal  maxconn 32                    # 最大同时32连接  daemon                        # 以daemon方式在后台运行
defaults log 127.0.0.1 local0 debug # [emerg, alert, crit, err, warning, notice, info, debug] # mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 3 # 连接后端服务器失败重试次数,超过3次后会将失败的后端服务器标记为不可用。 timeout client 1h # 客户端响应超时 1小时 timeout server 1h # server端响应超时 1小时 timeout connect 1h # 连接server端超时 1小时 timeout check 10s # 对后端服务器的检测超时时间 10秒
listen stats # 定义监控页面 mode http bind *:1080 # 绑定容器内的1080端口 stats refresh 1s # 每1秒更新监控数据 stats uri /stats # 访问监控页面的uri stats realm HAProxy\" Stats # 监控页面的认证提示 stats auth admin:654321 # 监控页面的用户名和密码
frontend tidb_front mode tcp bind *:4000 # 监听容器内的4000端口 default_backend tidb_back
backend tidb_back
mode tcp option tcp-check balance roundrobin
server TiDB-Server-test2 172.160.180.47:4000 check inter 10s rise 3 fall 3 weight 1 server TiDB-Server-test3 172.160.180.48:4000 check inter 10s rise 3 fall 3 weight 2 server TiDB-Server-test4 172.160.180.18:4000 check inter 10s rise 3 fall 3 weight 3eric
复制代码
创建 docker-compose.yaml 文件
cat > /home/tidb/haproxy/docker-compose.yaml << ericversion: '3.1'
services:
HAProxy: image: haproxy:2.0.6 restart: always container_name: HAProxy ports: - 4100:80 - 4000:4000 - 1080:1080 volumes: - ./config/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfgeric
复制代码
查看管理界面

http://172.160.180.46:1080/stats

haproxy.cfg 配置详解
global  log     127.0.0.1 local0  maxconn 32                    # 最大同时32连接  daemon                        # 以daemon方式在后台运行
nbproc 8 # 开启的haproxy进程数,通常与CPU核数保持一致,开启多进程提高并发处理能力。(可选 调优) cpu-map 1 0 # CPU绑定: 这个配置指令有2个参数,第一参数是进程序号,从1开始。第二个参数是CPU序号,从0开始。(可选 调优) cpu-map 2 1 cpu-map 3 2 cpu-map 4 3 cpu-map 5 4 cpu-map 6 5 cpu-map 7 6 cpu-map 8 7 nbthread 1 # 指定每个haproxy进程开启的线程数,默认为每个进程一个线程。(可选 调优)

defaults # mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 3 # 连接后端服务器失败重试次数,超过3次后会将失败的后端服务器标记为不可用。
# 超时时间如果设置的太短,会导致应用程序断开连接,建议根据实际情况调整 timeout client 30s # 客户端响应超时 30秒 timeout server 30s # server端响应超时 30秒 timeout connect 5s # 连接server端超时 5秒 timeout check 10s # 对后端服务器的检测超时时间 10秒
listen stats # 定义监控页面 mode http bind *:1080 # 绑定端口1080 stats refresh 1s # 每1秒更新监控数据 stats uri /stats # 访问监控页面的uri stats realm HAProxy Stats # 监控页面的认证提示 stats auth admin:654321 # 监控页面的用户名和密码
frontend tidb_front mode tcp bind *:4000 # 监听4000端口 default_backend tidb_back
backend tidb_back
mode tcp option tcp-check # 这个必须要加,否则健康检查会失败,因为当前使用的是TCP协议,它表示使用TCP协议做检查,而不是使用HTTP或health协议
# 8种负载均衡方式 1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法 2.balance static-rr # 根据权重,建议使用 3.balance leastconn # 最少连接者先处理,建议使用 4.balance source # 根据请求源IP,建议使用 5.balance uri # 根据请求的URI 6.balance url_param, # 根据请求的URl参数'balance url_param' requires an URL parameter name 7.balance hdr(name) # 根据HTTP请求头来锁定每一次HTTP请求 8.balance rdp-cookie(name) # 根据据cookie(name)来锁定并哈希每一次TCP请求
balance roundrobin # roundrobin 轮询方式
# 健康检查: 1.inter: 时间间隔10秒 2.rise: 重试三次 3.fall: 失败三次连接状态将变为DOWN 4.weight: 权重1 server TiDB-Server-test2 172.160.180.47:4000 check inter 10s rise 3 fall 3 weight 1 server TiDB-Server-test3 172.160.180.48:4000 check inter 10s rise 3 fall 3 weight 2 server TiDB-Server-test4 172.160.180.18:4000 check inter 10s rise 3 fall 3 weight 3
复制代码
超时引发的异常
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
复制代码


将如下属性值改大


timeout client 30s # 客户端响应超时 30 秒


timeout server 30s # server 端响应超时 30 秒


timeout connect 5s # 连接 server 端超时 5 秒


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
使用 Docker-Compose 部署 HAProxy 为TiDB-Server 做负载均衡_TiDB 社区干货传送门_InfoQ写作社区