HAProxy代理TCP(使用HAProxy 为TiDB-Server 做负载均衡)

目录

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

安装 docker-compose

环境

  • IP: 192.168.180.46
  • 系统: CentOS 7
  • Core: 8核
  • HAProxy版本 2.0.6
服务器 IP hostname
HAProxy 192.168.180.46 test1
TiDB-Server 192.168.180.47 test2
TiDB-Server 192.168.180.48 test3
TiDB-Server 192.168.181.18 test4

1、创建文件夹

ruby 复制代码
mkdir -p /home/tidb/haproxy/config

2、配置haproxy.cfg

ruby 复制代码
cat > /home/tidb/haproxy/config/haproxy.cfg << eric
global
  maxconn 10000                 # 最大同时10000连接
  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 5s              # 每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-48 192.168.180.47:4000 check inter 10s rise 3 fall 3 weight 1
  server TiDB-Server-49 192.168.180.48:4000 check inter 10s rise 3 fall 3 weight 1
eric

3、创建 docker-compose.yaml 文件

ruby 复制代码
cat > /home/tidb/haproxy/docker-compose.yaml << eric
version: '3.1'

services:

  HAProxy:
    image: haproxy:2.0.6
    restart: always
    container_name: HAProxy
    ports:
      - 4600:4000 # 宿主机端口:容器内端口
      - 1080:1080
    volumes:
      # 容器与宿主机时间同步
      - /etc/localtime:/etc/localtime
      - ./config/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    environment:
      TIME_ZONE: Asia/Shanghai
eric

查看管理界面: http://192.168.180.46:1080/stats
数据库连接地址: 192.168.180.46:4600

haproxy.cfg 配置说明

ruby 复制代码
global
  log     127.0.0.1 local0
  maxconn 10000                 # 最大同时10000连接
  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
  

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 192.168.180.47:4000 check inter 10s rise 3 fall 3 weight 1
  server TiDB-Server-test3 192.168.180.48:4000 check inter 10s rise 3 fall 3 weight 2
  server TiDB-Server-test4 192.168.181.18:4000 check inter 10s rise 3 fall 3 weight 3

参照官方文档

相关推荐
奋斗★~男孩2 天前
TCP 流量控制 - 滑动窗口和拥塞控制算法解析
网络协议·计算机网络·tcp
西京刀客14 天前
linux的redir命令实现端口转发
linux·运维·tcp·流量转发
嘻嘻仙人15 天前
【网络通信基础与实践第四讲】用户数据报协议UDP和传输控制协议TCP
网络·网络协议·udp·tcp·三次握手·流量控制·拥塞控制
阑梦清川16 天前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
邂逅岁月20 天前
【网络原理】❤️Tcp 连接管理机制❤️ “三次握手” “四次挥手”的深度理解, 面试最热门的话题,没有之一, 保姆式教学 !!!
网络·tcp/ip·计算机网络·面试·tcp·网络连接·tcp机制
怀九日24 天前
网络高级(学习)2024.9.11
网络·网络协议·学习·tcp/ip·tcp·modbus·rtu
轩轶子1 个月前
【C-实践】文件服务器(1.0)
服务器·c语言·小程序·tcp
不想秃头的烟花1 个月前
传输层(TCP、UDP、RDT详解)
udp·tcp·连接管理·流量控制·传输层·rdt·可靠数据传输
yunteng5211 个月前
区块链-P2P(八)
网络协议·区块链·tcp·p2p
红客5971 个月前
TCP如何关闭连接(详细版)
网络·网络协议·tcp