玩翻墙主机的人哪个没有好几个小鸡,所以多主机负载均衡访问这个需求应运而生,开源软件界当然已经有可以解决这个问题的软件——Haproxy
HAProxy是一个使用C语言编写的基于TCP和HTTP的应用程序代理,其提供高可用性、负载均衡。
整套系统的流程如图
Haproxy
安装就不必多讲了,直接看看配置文件,默认在/etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
user root
group root
daemon
defaults
log global
mode tcp
timeout connect 5s
timeout client 5s
timeout server 5s
option dontlognull
option redispatch
retries 3
listen status
bind *:1111
mode http
stats refresh 30s
stats uri /status
stats realm Haproxy
stats auth admin:admin
frontend shadowsocks-in
mode tcp
bind *:8388
default_backend shadowsocks-out
backend shadowsocks-out
mode tcp
option tcp-check
balance roundrobin
server servername1 xxxxx1.com:8088 check
server servername2 xxxxx2.net:8080 check
server servername3 12.34.56.78:9999 check
server servername4 123.234.234.123:443 check
配置分为五大部分:
global
:全局配置,我这里主要是配置了日志
defaults
:默认配置,也是一些全局配置,没什么好说的
listen
:监听配置,我在本机1111端口配置了http监控页面
frontend
:前端配置,Shadowsocks数据流从这里进入,流向指定后端
backend
:后端配置,balance
指定负载平衡方式,每个服务器写为一个server行,server支持域名或IP,如果你想使用域名,那么必须要看看我之前写的解决 Haproxy 用 Systemd 启动失败的问题,不然肯定会出问题。
我能用到就负载平衡方式只有简单的几种,复杂的需要查文档
roundrobin:简单轮询
static-rr:根据权重分配,权重在后端server中设置
leastconn:根据服务器最少连接分配,这个模式适合长连接应用
Shadowsocks
新建一个配置文件 /etc/shadowsocks/Shadowsocks-haproxy.json
,内容如下:
{
"server": "127.0.0.1",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 65509,
"password": "password",
"timeout": 30,
"method": "chacha20-ietf-poly1305",
"fast_open": true,
"workers": 2
}
启动
首先要启动haproxy服务
systemctl enable haproxy.service
systemctl start haproxy.service
只需要启动一个Shadowsocks服务就可以实现多服务器负载均衡了
systemctl enable shadowsocks-libev@Shadowsocks-haproxy.service
systemctl start shadowsocks-libev@Shadowsocks-haproxy.service