HAProxy实现多tcp服务负载均衡如此简单

HAProxy实现多tcp服务负载均衡如此简单

HAProxy实现多tcp服务负载均衡方法

实现多tcp服务(socks_proxy)的负载均衡.

HAProxy实现负载均衡的原理图:

Browser -> HAProxy -- SOCKS5 Tunnel --> Remote

HAProxy的安装及配置

1.安装haproxy

Linux系统命令安装:
- Ubuntu系统: apt install haproxy
- CentOS系统: yum install haproxy
- openSUSE系统: zypper install haproxy

获取安装源码文件-Latest LTS version (2.2.2) , 也可以在Github获得最新源码Github-haproxy源码地址

wget -c https://www.haproxy.org/download/2.2/src/haproxy-2.2.2.tar.gz
tar zxvf haproxy-2.2.2.tar.gz
cd haproxy-2.2.2
make clean
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 PREFIX=/usr
sudo make install

安装好后,检测是否可用haproxy -v

╰─ haproxy -v
HA-Proxy version 2.2.2 2020/07/31 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2025.
Known bugs: http://www.haproxy.org/bugs/bugs-2.2.2.html
Running on: Linux 4.12.14-lp151.28.59-default #1 SMP Wed Aug 5 10:58:34 UTC 2020 (337e42e) x86_64

2.配置haproxy实现tcp负载均衡

配置文件通常需要在root账户下操作

sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig

sudo cat <<END  > /etc/haproxy/haproxy.cfg
global
    log /dev/log daemon
    maxconn 32768
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon
    stats socket /var/lib/haproxy/stats user haproxy group haproxy mode 0640 level operator
    tune.bufsize 32768
    tune.ssl.default-dh-param 2048
    ssl-default-bind-ciphers ALL:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH

defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option                  http-server-close
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

# HAProxy 前端服务
frontend socks5_frontend
    bind    0.0.0.0:1080
    mode    tcp
    option tcplog
    timeout client  30s
    default_backend socks5_backend

# HAProxy 后端服务节点的负载均衡配置
backend socks5_backend
    mode    tcp
    option log-health-checks
    balance leastconn
    timeout server  30s
    timeout connect 10s
    server  socks5_000 127.0.0.1:20000 check
    server  socks5_001 127.0.0.1:20001 check
    server  socks5_002 127.0.0.1:20002 check
    server  socks5_003 127.0.0.1:20003 check
    server  socks5_004 127.0.0.1:20004 check
    server  socks5_005 127.0.0.1:20005 check
    server  socks5_006 127.0.0.1:20006 check
    server  socks5_007 127.0.0.1:20007 check
    server  socks5_008 127.0.0.1:20008 check
    server  socks5_009 127.0.0.1:20009 check

# HAProxy web ui, 访问地址 : http://localhost:19999/haproxy?stats
listen stats
    bind 0.0.0.0:19999
    mode http
    log global

    maxconn 10
    timeout client 100s
    timeout server 100s
    timeout connect 100s
    timeout queue 100s

    stats enable
    stats uri /haproxy?stats
    stats hide-version
    stats realm HAProxy\ Statistics
    stats admin if TRUE
    stats show-node
END

这里的127.0.0.1:20000127.0.0.1:20009是启动好的SOCKS5协议客户端服务,通过HAProxy实现负载均衡功能.

balance负载均衡

balance <algorithm> [ <arguments> ]
balance url_param <param> [check_post]

balance负载均衡算法:
- roundrobin : 轮训, 支持动态的weight权重设置,每个backend最多支持4095个服务.
- static-rr : 静态轮训, 根据静态的weight权重轮训,每个backend无上限服务限制.
- leastconn : 最少连接数, 将连接请求分发到连接数最少的服务上, 推荐适合长连接请求策略,不适合短连接请求策略.
- first : 按第一个可用服务分发请求(按id从小到大的顺序), 每个服务达到最大连接数(maxconn)后分发给下一个可用服务. 例如 server server1 127.0.0.1:20000 id=1 maxconn=10
- source : 按源IP地址hash值分发, 可以保证同一个客户端请求可以分发给同一个server服务(适合具有session会话类服务), 当服务节点变化时,请求分发会重新计算.
- random/random(<draws>) : 随机分发策略, 使用随机数作为权重值(立即生效), 适合服务节点会动态增加或者缩减情景.当指定<draws>参数为大于等于1的数值时,表示在选择这些服务器中负载最少的服务器之前的抽签次数(增加选择公平性),默认为2。
- hdr(<name>) : 根据HTTP协议Requests请求headersname字段分发.
- rdp-cookie/rdp-cookie(<name>) : 根据cookiename字段分发, 同一用户分发到同一个服务.
- uri : 根据uri实现分发策略
- url_param : 根据HTTPGET请求参数分发策略.

配置示例:

balance roundrobin
balance url_param userid
balance url_param session_id check_post 64
balance hdr(User-Agent)
balance hdr(host)
balance hdr(Host) use_domain_only

深入阅读PROXY配置参数

3.HAProxy服务启动

sudo systemctl start haproxy
sudo systemctl enable haproxy

~END~

转载本文时请注明出处及本文链接地址HAProxy实现多tcp服务负载均衡如此简单

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注