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

参照官方文档

相关推荐
UestcXiye19 小时前
《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)
c++·计算机网络·tcp
UestcXiye4 天前
《TCP/IP网络编程》学习笔记 | Chapter 2:套接字类型与协议设置
网络·c++·ip·tcp
友友马5 天前
『 Linux 』网络传输层 - TCP(二)
linux·运维·网络·tcp
UestcXiye6 天前
《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字
c++·网络编程·ip·tcp
桃酥4038 天前
day05|计算机网络重难点之 HTTPS和HTTP的区别、HTTPS的工作原理(HTTPS建立连接的过程)、TCP和UDP的区别
计算机网络·http·https·udp·tcp
冷眼看人间恩怨8 天前
【Java】揭秘网络编程:深入探索其无尽奥秘与魅力
java·开发语言·tcp/ip·udp·tcp
SN_0113 天前
TCP控制位|标志位
网络·tcp
LabVIEW开发17 天前
UDP和TCP的区别
udp·tcp·labview开发技巧
做人求其滴18 天前
Qt第十三天:网络编程:TCP和UDP的使用
网络·qt·udp·tcp·通信
Eloudy21 天前
备忘,安装并使用 sshpass -p ‘654321‘ ssh hanmeimei@10.20.30.40
tcp