使用HaProxy强大的负载均衡功能打造稳定代理服务

这些天强哥一直把我按在地上摩擦,因为用的还是SS/SSR,所以被重点关照了。节点体验断断续续的,感觉十分不好。这次就使用HaProxy的负载均衡功能来提升科学上网的体验。

对比一下差别:

❌ 未启用负载均衡

Load-Balancing-1.jpeg

✅ 启用负载均衡

Load-Balancing-2.jpeg

👍 优点

💻 零宕机

未使用负载均衡前,单个节点宕机后需要等你意识到了之后再手动进行切换、测试,略显麻烦。

而使用了之后,搭载HaProxy的负载均衡节点在感知到当前连接节点宕机后,自动切换至其他正常的节点,并且时时监测节点是否上线,几乎是无感的。

🚀 提升带宽

这个负载均衡操作同时实现了流量中转的功能,由于普通家庭宽带的国际出口带宽相当的小,所以如果你的海外节点的线路不是很好的话,即使有服务商提供1Gbps,到你本地看720P可能还很卡。

这个时候就要依托于国内各地机房了,他们使用的商用宽带有着庞大的国际出口带宽,自然比普通家宽的体验要好的多。再加上从国内的家宽到商宽(机房)的网络环境综合优秀,所以中转在这里就有了点石成金的作用,海外节点的线路即使差一些,也能够带来相对不错的体验。

👎 缺点

🧩 IP切换频繁

为了实现“零宕机”的功能,负载均衡节点会一直尝试连接正常的服务器,所以免不了会产生IP切换频繁的问题。由于IP会自动切换,对于安全性需求较高的网站或服务会产生一些影响,比如支付服务、银行业务等。

🚧 带宽受限

上面的优点里的确提升了带宽,但是所有的流量都需要经过中转服务器(也就是负载均衡节点),所以此时带宽的瓶颈就在中转服务器这里,所以尽量选择一个合适的带宽。

📦 安装方法

使用起来很简单,假设你现在有多台已经配置好DDNS的代理服务器,并且它们的配置相同,也就是只有IPPort可以是不同的。

首先安装HaProxy这个强大的软件,这里有新版本的安装方法。

在这里以Debian 9为例,安装目前最新的2.1.*版本

  1. 启用专用存储库
curl https://haproxy.debian.net/bernat.debian.org.gpg | \
    apt-key add -
echo deb http://haproxy.debian.net stretch-backports-2.1 main | \
    tee /etc/apt/sources.list.d/haproxy.list
  1. 安装HaProxy 2.1.*版本
apt-get update
apt-get install haproxy=2.1.\*
  1. 安装完成之后,默认的配置文件应该在/etc/haproxy/haproxy.cfg,先进行备份。
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg
  1. 将下面的配置信息粘贴进去
global
    chroot  /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    user    haproxy
    group   haproxy

defaults
    mode    tcp                         # 服务器默认的工作模式
    balance roundrobin                  # 服务器默认使用的均衡模式
    retries 3                           # 三次连接失败表示服务器不可用
    maxconn 5000                        # 最大连接数
    timeout connect 1s                  # 连接超时
    timeout client  3s                  # 客户端超时
    timeout server  3s                  # 服务器超时

listen WebPanel
    mode    http                        # 这里使用HTTP模式
    bind    *:8080                      # WEB服务端口
    stats   refresh 5s                  # 自动刷新时间
    stats   uri /haproxy                # WEB管理地址
    stats   realm welcome to Haproxy    # 提示语
    stats   auth admin:admin            # 账号密码
    stats   hide-version                # 隐藏版本
    stats   admin if TRUE               # 验证通过则赋予管理权

resolvers mydns
    nameserver dns1 1.1.1.1:53
    nameserver dns2 1.0.0.1:53
    parse-resolv-conf                   # 启用本机DNS列表
    resolve_retries       10            # 放弃解析DNS之前尝试的次数
    timeout resolve       1s            # 触发名称解析的默认时间
    timeout retry         1s            # 重试解析DNS前的等待时间
    hold other           30s
    hold refused         30s
    hold nx              30s
    hold timeout         30s
    hold valid           10s
    hold obsolete        30s

listen SSR
    default-server check inter 1000 rise 2 fall 4 resolvers mydns
    bind *:8081
    server la0 ddns.abc.com:8081 weight 60
    server la1 ddns.abc.com:8081 weight 60
    server la2 ddns.abc.com:8081 weight 60

📄 部分配置说明

其中default-server就是服务器的默认配置

check 表示对服务器进行“健康度”检查,也就是看是否正常服务。

inter 1000 表示“健康度”检查的间隔1000ms

rise 2 表示2次“健康度”检查成功则判定服务器为正常状态

fall 4 表示4次“健康度”检查失败则判定服务器为离线状态

resolvers mydns 表示对该服务器启用自定义的“mydns”DNS解析

配置好之后systemctl reload haproxy进行重载,配置信息就生效了。

🛠 HaProxy控制命令

#           启动 |  重启 |停止|开机自启|关闭自启|重载配置|强制重载     |查看状态
systemctl (start|restart|stop|enable|disable|reload|force-reload|status) haproxy

🖥 Web面板

访问http://ip:8080/haproxy即可看到如下图所示的Web面板,里面显示了服务器状态和详细的各项数据信息。

WX20200209

HAProxy官方:Demo地址

🎈 总结

这几天使用下来的感受是:

虽然强哥一直在和SS/SSR枪林弹雨,但我这边依旧风平浪静。

从Web面板上能看到几个“坚强”的服务器一直在反复被墙,然后相继恢复正常。同时全部被墙还没有遇到过,所以实际的体验还是很不错的!

另外,上面大部分配置信息还是安装后默认的参数,如果想要获得最优的性能,那还是要根据实际情况慢慢调参的。