服务器集群(六)宝塔专业版网站负载均衡

本文章已收录至本站专栏
服务器集群系列

1、实现原理

摘自:宝塔论坛
https://www.bt.cn/bbs/thread-58436-1-1.html

负载均衡的简单原理大概如下图:

负载均衡示意图

需要安装专业版插件:宝塔负载均衡

如果没有正版授权,可参考文章:

安装宝塔7.7.0企业版
https://blog.tsinbei.com/tw/archives/7/
安装宝塔7.9.0企业版
https://blog.tsinbei.com/tw/archives/293/

如果有能力,建议支持正版!

2、添加节点

这里使用三台机器进行负载均衡配置,

负载均衡服务部署在192.168.100.3,以下简称主控
后端节点192.168.100.1,192.168.100.2,以下简称节点

由于我们的负载均衡是使用Nginx来搭建的,要先在主控机器上安装Nginx,然后安装宝塔负载均衡插件。

安装好插件之后打开插件,

插件首页

添加负载:

添加负载

参数说明:

  • 域名:填网站域名
  • 负载名称:自定义,建议填写网站域名,方便区分
  • 会话跟随:一般选择Cookie即可,如果有特殊需求就选择IP,静态网站选择关闭

节点配置:

如果你按本系列的教程走,那么IP地址填之前组网的虚拟IP。如:192.168.100.1

组网参考教程:

服务器集群(二)WireGuard组网
https://blog.tsinbei.com/tw/archives/621/

如果云厂商自带内网互联,则填内网VPC的IP。如:172.20.0.1

如果以上都没有,那就填公网IP,记得开放防火墙。如:1.1.1.1

如果只需要HTTP,添加节点就用80端口,否则用443端口。

注意:如果用非标准端口,那么会被默认识别为HTTP,造成添加失败。

解决方法:在使用非标准端口的节点,打开网站配置,编辑配置文件:

Nginx
1
2
listen 8080;
listen 8443 ssl http2;

先关闭强制SSL,再替换为:

Nginx
1
2
listen 8080;
listen 8443;

注意:等主控端添加完成后,要再改回去。

原因:宝塔负载均衡默认是协议跟随,即使用HTTPS访问主控,主控也用HTTPS回源节点,因此相当于使用HTTPS协议访问HTTP站点,自然会报错。

3、高级设置

3.1、Cookie设置

添加完成后,还可以点击修改,再次设置配置。

如果在前面选择Cookie跟随,会看到:

Cookie配置

建议更改Cookie标识,只能小写字母或下划线。其他可自定义。
如果需要更安全,建议开启Secure保护

3.2、节点设置

节点类型有三个:参与、备用和停用。

备用

假设我有2个负载均衡主控(M1,M2),4个负载均衡节点(S1,S2,S3,S4),

其中M1和S1,S2在同一区域(如:都在中国境内),M2和S3,S4在同一区域(如:都在美国境内)

那么可以如此设置:

M1设置S1,S2为参与,S3,S4为备用
M2设置S1,S2为备用,S3,S4为参与

这样既保证了回源速度,又保证了高可用性。

停用

如果一个节点正在调试,那么可以临时设置为停用。一段时间内回源错误率太高,也可以停用排查。

其他设置有权重和恢复时间。

权重

权重越高,该节点就越被频繁访问。

例如S1权重为2,S2权重为3,那么访问5000次,会有2000次分配给S1,3000次分配给S2。

如果节点就在本地,可以按照上文的方法使用非标准端口(建议部署在Docker内),节点IP设置为127.0.0.1。

访问本地资源,自然是更快的,因此可以设置更高的权重,例如2或3。

注意:如果一个节点返回50x,如果满足特定条件,那么在返回给客户端前,主控会查询下一个节点,丢弃该节点的内容;
如果不是50x,则会返回该节点的内容;
如果仍是50x,那么继续查询下一个节点,如果“参与”节点没有了,就查询“备用”节点,如果全部查询完毕,则使用最后一个节点返回的内容。

宝塔负载均衡称这为一次“并发”

这样可以避免一个节点的问题引起客户端访问返回50x,但是在调试时也会导致50x错误页面返回缓慢。

因此调试时建议停用所有节点,只启用一个最快的,调试完成再改回去。

恢复时间

一个节点返回50x后,会自动停用,过一段时间再启用。这段时间被成为恢复时间。

但是,恢复也不是直接启用,会对正常节点和恢复节点同时发出请求,如果恢复节点仍然返回50x,那么再次停用该节点。

宝塔负载均衡也称这为一次“并发”

注意:插件内,并发数和错误数似乎是实时的,因为有时我看到是2,过一会儿变成了0。
也有可能是点进去“日志”之后被标记为了“已读”,总之这个数字会被清零。

4、使用场景

如果只有一台主控,一台节点,建议直接用NGINX反向代理,无需用这个插件。

但是,可能会出现DNS问题:主控不断请求自己。

因此建议配合Dnsmasq或腾讯云PrivateDNS私有域使用,参考文章:

服务器安全(二)内外网防御
https://blog.tsinbei.com/tw/archives/140/

服务器集群(六)宝塔专业版网站负载均衡

https://blog.tsinbei.com/tw/archives/648/

文章作者
Hsukqi Lee
发布于

2022-08-23

修改于

2022-12-06

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
暂无