使用HAProxy为Shadowsocks做负载平衡 - sbw Blog

使用HAProxy为Shadowsocks做负载平衡

来源: sbw Blog | 浏览: 99 | 评论: 0 发表时间: 2020-02-02

为了高可用,以及平衡多个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


相关文章
没有人评论过此文,还不快抢个沙发
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml