1:准备工作
- 一台国内服务器。
国内服务器可以监控到国外的服务器ip或者端口是否被封锁。如果你用国外的服务器,也能做到负载均衡,但是如果这台服务器被封锁,那SSR还是会断开连接。国内服务器不会被封锁。
- SSR添加多个端口或者多台SSR服务器
修改SSR配置文件,监听多个端口《SSR添加多用户多端口教程》,我监听的是34567、34568、34569。
注意:不同端口或者IP的密码和协议等等都必须相同。
2:haproxy下载和配置
在Ubuntu上下载:
1 | apt-get -y install haproxy |
在centos上:
1 | yum -y install haproxy |
安装完毕后,打开haproxy配置文件/etc/haproxy/haproxy.cfg
,修改配置为:
1 | global |
配置分为五大部分:
- global:全局配置,这里主要是配置了日志
- 默认值:默认配置,也是一些分布式配置
- 听:监听配置,我在
1111
端口配置了http监控页面,访问ip:1111/status
,认证用户名和密码都是admin
,具体含义参考博客“ haproxy监控页面和页面详细参数” - frontend:前端配置,Shadowsocks数据流从这里进入,流向指定标题,注意这里的端口号,即为ss客户端的输入端口
- backend:调整配置,
balance
指定负载平衡方式,每个服务器写一个服务器行,服务器支持域名或IP。如果使用域名,重启服务出现问题,可以参考博客“解决Haproxy用Systemd启动失败的问题”。
3:其他负载均衡方式
《shadowsocks借助nginx实现负载均衡,自动切换“零”宕机》介绍了使用nginx的方法。也可以尝试。
我之前使用过apache来做负载均衡,但是无法连接,查看apache日志后提示如下:
1 | [Tue Jun 16 00:07:30.557609 2020] [core:debug] [pid 25543:tid 140127116449536] protocol.c(1335): [client 127.0.0.1:57310] AH00566: request failed: malformed request line |
意思是请求行格式错误。刚开始以为配置错了。阅读apache的相关资料后才知道。
apache在做负载均衡时,只是对子目录进行了替换,比如说,你监听1234端口,将发送给主机1234端口的数据均衡发送给192.1.1.1:5678、192.1.1.2:6789。那么你在访问baidu.com/test 时,将你的请求发送给1234端口,而apache做的仅仅只是将请求HOST替换掉。真实请求地址是192.1.1.1:5678/test 或者192.1.1.2:6789/test 。。而ssr加密后的数据,是没有http请求头的,这便导致了,日志所显示的请求行格式错误。所以apache并不适合做单纯的数据转发。