使用HAProxy为Shadowsocks做负载平衡

by , at 05 May 2020, tags : 服务 检查 点击纠错 点击删除
使用CN2/CN2GIA顶级线路,支持Shadowsocks/V2ray科学上网,支持支付宝付款,每月仅需 5 美元
## 加入品葱精选 Telegram Channel ##

为了高可用,以及平衡多个Shadowsocks服务器流量,可以借助HAProxy代理+多个Shadowsocks服务端来配置一个Shadowsocks服务群。利用HAProxy的4层代理作流量分发,使用外部检查工具实时监控Shadowsocks服务器的状态,以完成服务群的配置。

HAProxy是一个高性能负载均衡/代理服务器,可以提供4/7层的TCP代理。通过HAProxy的负载均衡器,可以将TCP连接分发到多个Shadowsocks服务端。同时在外部工具的帮助下,HAProxy提供的服务检查功能也可以对多个服务可用性进行检查,进行多服务容灾处理。

haproxy-shadowsocks-proxy-load-balance

整体架构如上图。有一些其它方案是把HAProxy放在Shadowsocks后面的,但这样就需要多个服务端使用相同的配置,即端口、密码和加密方式都一样。但这样不是很利于多个服务的维护,安全性也有一些影响,对于v2ray等混淆方案也是不支持的。放在前面可以有效支持多个不同配置的服务,只是这样HAProxy就无法直接检测到远程服务器的可用状态,因为它只与本地的ss-local交互。而本地的TCP连接检查一定是通过的,因此这样就失去了高可用功能了。

不过HAProxy提供了使用外部工具进行服务检查的功能,于是我写了一个专门用于测试Shadowsocks服务的检查脚本,其原理是按照Socks5协议和ss-local进行握手,再通过Shadowsocks建立ssl连接去请求google主页,看能否收到200 OK的回复。

源代码放在Github上:haproxy-shadowsocks-checker,编辑HAProxy的配置文件,修改配置如下:

检查结果:

haproxy-shadowsocks-protocol-checker

  • 声明: 评论属于其发表者所有,不代表本站的观点和立场.

  • 路人甲 回复该留言 时间: 2020-04-14

    非常棒的解决办法,遇到跟你同样的问题,用你的脚本解决了,多谢。 不过那代码在 ubuntu16.04 不能运行,python和openssl版本不行,升级到ubuntu18.04搞定。

  • sbw 回复该留言 时间: 2020-04-17

    要注意是 Python3,不能是 Python2,而且对应的依赖包也要安装

已有 2 位网友发表了一针见血的评论,你还等什么?

最简单好用的 VPS,没有之一,注册立得 100 美金
comments powered by Disqus

See Also