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

使用HAProxy为Shadowsocks做负载平衡

来源: sbw Blog | 浏览: 6368 | 评论: 14 发表时间: 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
注意

2020/07/30:自从haproxyv2.2版本开始,需要在global设置中开启insecure-fork-wanted设置。



相关文章
  • 声明: 评论属于其发表者所有,不代表本站的观点和立场.
  • 路人甲 回复该留言 时间: 2020-04-14

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

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

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

  • 路人甲 回复该留言 时间: 2020-07-30

    太棒了!

  • 路人甲 回复该留言 时间: 2022-01-18

    可惜不会用

  • 路人甲 回复该留言 时间: 2022-08-19

    一行 curl 应该就能搞定,没必要上 Python: #!/bin/sh /usr/bin/curl -x socks5://$3:$4 https://www.google.com/generate_204

  • 路人甲 回复该留言 时间: 2022-08-22

  • sbw 回复该留言 时间: 2023-09-09

    不过 Google 的服务器如果同时发送请求过多,会被拒绝一段时间,当 Server 数量比较多时,还是需要一个脚本,从多个网站中随机选择会好一点

已有 7 位网友发表了一针见血的评论,你还等什么?
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml