负载均衡最大的作用就是0宕机,可以做到宕机秒切换。SS/SSR的PC客户端都有负载均衡的功能,而且还可以根据延迟进行负载均衡,但iOS端就有点蛋疼了,一直使用PotatsoLite的我有时候真的挺需要这个功能的。
这里介绍两种方法,第一种用HAProxy,第二种用Nginx。个人推荐用Nginx,因为HAProxy不支持UDP,如果是用来玩游戏,那就有点蛋疼了。而且有时候也确实需要用到UDP。
这里我准备了3台机器,一台用来做负载均衡服务器,另外两台跑SSR服务,实现功能:两台SSR机器如有某一台挂了,本地客户端可以自动切换并连接到正常运行的那一台。
这里补充一下,LEDE软路由是有这个HAProxy功能的,而且做SS/SSR负载均衡的话,建议HAProxy是搭建在本地,因为如果你搭建在服务器上,你跑HAProxy的那台机器挂了也就失去了负载均衡的意义。
两个前提条件:
1:所有的SS/SSR密码必须一致。
2:所有的SS/SSR加密方式必须一致。如果是SSR,那么协议/混淆也必须一致。
先安装:
yum -y install haproxy
将默认的配置文件做一个备份:
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
新建一个配置文件:
nano /etc/haproxy/haproxy.cfg
写入下面的配置:
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 500ms #连接超时 timeout client 3s #客户端超时 timeout server 3s #服务器超时 listen WebPanel mode http #这里使用HTTP模式 bind 0.0.0.0:50000 #WEB服务端口 stats refresh 5s #自动刷新时间 stats uri / #WEB管理地址 stats auth imlala:lala.im #账号密码 stats hide-version #隐藏版本 stats admin if TRUE #验证通过则赋予管理权 listen USA bind 0.0.0.0:50001 #服务端口 server usa1 1.2.3.4:55555 check inter 500 rise 2 fall 4 weight 100 #SS/SSR服务器地址与端口 server usa2 2.2.3.4:55555 check inter 500 rise 2 fall 4 weight 50 #SS/SSR服务器地址与端口 listen JP bind 0.0.0.0:50002 #服务端口 server jp1 3.2.3.4:55555 check inter 500 rise 2 fall 4 weight 100 #SS/SSR服务器地址与端口 server jp2 4.2.3.4:55555 check inter 500 rise 2 fall 4 weight 50 #SS/SSR服务器地址与端口
这里详细说一下这个配置里面的各项作用:
首先你需要将listen WebPanel段下的web管理员账户密码做一下修改。然后你就可以看到listen USA/JP这两段这里了。
一个listen代表一个服务,你可以把它分为多个组。现在假设你在美国有2台机器,日本有2台机器,那么就可以分成两组,组与组之间没有联系,HAProxy只会给在同一个组里面的机器做负载均衡。但这样我们得在HAProxy内起两个服务端口,一个端口用于美国,一个端口用于日本。如果你想将所有的机器都加在一个组里面也是可以的,这样就可以让4台机器做负载均衡。怎么选择看你自己。
server后面首先跟名字,名字随便起呗,自己能够区分就行。紧接着跟这台机器的公网IP+端口,端口也就是SS/SSR的端口。
check是检测的意思,这段配置很重要:
inter:单位毫秒,我配置的500,即500毫秒检测一次目标服务器。
rise2:设定健康状态检查中,某离线的服务器从离线状态转换至正常状态需要成功检查的次数,这里我设置的2次。
fall4:确认服务器从正常状态转换为不可用状态需要检查的次数,这里是4次。
weight:权重,值越大代表这台机器工作的机会越多,这里我们可以把一台线路较好的机器的权重设置高一些。
配置完成之后,务必关闭SELinux,否则我们无法使用systemd去正常运行HAProxy(这是一个坑):
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
启动HAProxy:
systemctl start haproxy systemctl enable haproxy
这样HAProxy就配置好了,可以访问WEB面板确认服务器是否都在正常工作,如下图显示绿色就是正常:
本地客户端在配置的时候就填写这台HAProxy服务器的IP+服务端口。
因为我这边目前正在使用LEDE软路由,我的推荐是有LEDE那就直接在LEDE上面设置:
这样设置之后并没有完成,HAProxy甚至都不会运行,我们还需要添加一个节点:
之后把账号设置里面的节点改为刚才添加的,如果在上方多出一个“负载均衡”的检测就说明配置完成:
现在介绍Nginx的方法,还是先安装:
yum -y install nginx
然后在Nginx的主配置文件内写一个include,因为我们需要用到stream段,这个段和http段是平级的,不能内嵌到http段使用:
echo "include /etc/nginx/tcpconf.d/*.conf;" >> /etc/nginx/nginx.conf
创建一个存放配置文件的目录:
mkdir -p /etc/nginx/tcpconf.d
新建一个配置文件:
nano /etc/nginx/tcpconf.d/ssproxy.conf
写入如下配置:
stream { upstream imlala { server 1.2.3.4:55555 weight=7; server 2.2.3.4:55555 weight=3; } server { listen 50003; listen 50003 udp; proxy_pass imlala; } }
这边我使用的是weight(权重)模式,可以去掉这两个设置让Nginx默认用于轮询模式。
最后我还看了一下Caddy,结果发现很可惜这个WEB服务器目前还不能够支持TCP/UDP的负载均衡,但可以实现中转的功能,并且配置也很简单,这里顺带记录一下。
首先在安装的时候得添加net插件:
curl https://getcaddy.com | bash -s personal net
然后新建配置文件:
nano /etc/caddy/Caddyfile
写入如下配置就能进行中转了:
proxy :50004 1.2.3.4:55555 { } proxy :50005 2.2.3.4:55555 { }
注意,此时的Caddy启动时必须加上-type=net,插件功能才能生效:
caddy -type=net -conf=/etc/caddy/Caddyfile
最新评论
5211314
能不能教我 一点不会