本系统分为go和rust两个版本,配置不同。
rust版本的负载均衡配置例子与说明:
"config": { "backends": [ { "host": "1.2.3.4", "http_port": 80, "https_port": 443, "weight": 100, "is_backup": false, "health_check": "https://www.tingtao.org/archives/3508.html", "protocol": "passthrough", "health_check_interval": "30s" }, { "host": "2.3.4.5", "http_port": 80, "https_port": 443, "weight": 100, "is_backup": true, "health_check": "https://www.tingtao.org/archives/3508.html", "protocol": "passthrough", "health_check_interval": "30s" } ], "failover": true, "timeout": "30s", "protocol_mode": "passthrough", "preserve_host": true, "preserve_x_forwarded": true }
作用域:site
负载均衡配置:
failover:故障转移功能,true:当主服务器不健康时,自动切换到备用服务器
timeout:向后端服务器请求的超时设置
protocol_mode:协议模式,支持passthrough、force_http、force_https
preserve_host:保留主机名,是否将原始域名传递给后端服务器,如果false,则使用后端服务器ip作为主机名。
preserve_x_forwarded:是否发送x-forwarded-for头部给后端节点
重要说明:示例中的“backends”是服务器组的名字,这个目前已经没什么用了。旧版本是可以根据路由来决定某个路径使用某个组,相当于nginx的不同location使用不同后端节点,但是更强大。
节点配置:
host:后端ip,支持v4/v6
http_port与https_port:不必多说
weight:权重
is_backup:是否是备用节点
health_check:健康检查网址
protocol:与后端通信的协议,可选http/https/passthrough,前两个是写死协议,可以理解为强行协议转换,passthrough是根据浏览器协议进行直通
health_check_interval:健康检查周期。
健康检查的配置与说明:
健康检查并没有独立的配置,所需所有设置都位于节点设置中。
负载均衡与监控检查的关联:
健康检查是全局功能,会根据后端节点的ip:http_port:https_port进行聚合,这三项相同的视为同一服务器,而同一节点的不同设置分为两种情况:rust版本会合并为较严格模式,比如一个节点检查间隔60秒,另一个节点30秒,则健康检查的实际时间会合并为30秒。go版本则使用第一个节点的配置,后续不再判断严格情况。
负载均衡器自身仅是一个虚拟容器,里面有若干虚拟组,组内进行负载均衡以及主备切换的各种算法,而节点健康情况向健康检查器查询。
两个版本的负载均衡也有区别:
rust版本只支持主备切换。
go版本支持所有主流和非主流的负载均衡算法,并且将后端节点根据设置划分为不同的服务器组、主备组,并且在各组内运行负载均衡算法。