前言
这个算是我在梦璃搭建集群环境时的过程,只不过…梦璃的结局比较悲剧就是啦…
本文章亲测于公网环境部署完毕并成功运行WordPress
本文章提供的方案并不是非常适合用于生产环境
注意,我在标题没有写高可用性,因为这次使用的是宝塔自带的负载均衡功能,对于这个插件,其实我是不大相信其稳定性的(实在是不知道到底是我网站程序问题还是插件问题,一个劲崩,报错差不多知道原因后又因这插件不能编辑详细配置而放弃),不过看在它超级方便的情况下,还是很适合萌新去使用。本文章全程基本没什么技术要求,只要懂得简单的linux经验就好。
提一句,这里实现负载均衡的方法类似于反代负载均衡,其优处与缺点这里就不提及了,各位可以去了解下其他的方式,如DNS负载均衡等
本次用到的服务器
一台响应服务器(即安装负载均衡插件的服务器)
两台负载均衡服务器(根据需求增减,保底两台)
一台NFS存储服务器(用于帮助两台负载均衡服务器同步数据)
每台服务器环境
Centos 7.x
宝塔7.X面板
宝塔的LNMP环境
开始
负载均衡
一、启用负载均衡插件
进入提前准备好用于响应、分发的服务器的宝塔面板,点进插件-专业版插件,启用宝塔的负载均衡插件
点击创建负载,然后如实填写网站信息
不要急着点提交,接着我们点击添加节点,将其中一台用于负载均衡的服务器ip地址添加进去,验证文件路径填写一个index.html就好,宝塔通常会在你的网站目录里生成一个默认的index.html文件,验证这个文件就可以知道你的负载服务器是否正常运作
添加完毕后点击节点管理,将另一个负载均衡服务器的ip也填入
这里可以调整一下权重,阈值和恢复时间,没有头绪的话可以看看我下面的建议:
两台负载服务器,一台叫1号,一台叫2号
权重:如果1号负载服务器的CPU及内存要优于2号,可以将1号的权重设置为2-3,2号保持1,也就是访问3-4次时,3次分配给1号服务器进行处理,1次分配给2号服务器进行处理。过高的权重可能会影响服务器性能,从而导致两台服务器全死的情况(一台崩,所有请求就转移到第二台,随即第二台也崩了)
阈值:以WordPress为例,WordPress如果拿来做博客等静态站点的话,建议将阈值设置在2-3次左右,这个值会很灵活的将访问分配给负载均衡服务器(秘技,反复横跳!),而问题就在于,每次切换都会导致连接中断,对动态站点非常不友好,最直观的效果就是疯狂502报错,而且不带停的。如果是动态站点(即如梦璃这种交互型站点)建议将阈值设置在5-10次(不建议超过十次,这样基本是失去负载均衡的作用了)
恢复时间:以WordPress为例,如果是静态站点,恢复时间建议在60秒-180秒,以免出现该台服务器未恢复正常就继续接受访问的问题。动态站点建议恢复时间在10秒-30秒,防止其他负载均衡服务器因该台服务器停用而导致访问量突增从而一起崩溃的问题,实测如果恢复速度过慢,会导致长时间响应502的问题(即这短时间全部服务器都挂了,并且无一台服务器恢复)
以上仅供参考,根据实际情况不同需要做出改变。
调整完毕后,前往两台负载均衡服务器,配置站点。(这段我就不用讲了吧?照常添加站点,解析就好,域名一定要跟负载均衡插件里面的信息相同)
小贴士:配置站点时要注意关闭网站目录项中的防跨站攻击,开启会导致502报错
至此,负载均衡部分配置完毕(点两下就完事也就这宝塔插件能做到了)
二、使用NFS文件系统实现数据同步
NFS搭建教程已更新
负载均衡虽然搭建完毕了,但是困扰WordPress站长们的问题来了,怎么样把数据同步呢?那么这里就需要用到NFS文件系统来同步数据了。什么,不清楚NFS的概念?建议百度下,我这边简略讲一下:
NFS就是网络文件系统的简写,常用于数据挂载同步,国内很多大的云服务商都有提供相关服务,如阿里云的NFS服务,腾讯云的CFS服务,都是基于这一文件系统。不过这个只适合小型的集群站点,如果想要更高可用的文件存储、挂载、同步方案,可以去考虑下分布式文件系统,如HDFS、ceph等,这里不一一赘述,可以去参考下这个文章:https://blog.csdn.net/u011436427/article/details/98198935
除此之外,还有一个非常简单,但是非常弱鸡的远程文件挂载同步方案:sshfs,如果你是用来内用的话,可以去试试,但是这东西绝对不适合建站!
另外,还有一种方案,就是不用挂载的数据同步,如rsync之类的,宝塔也有相关插件,易部署但是并不方便。属于是两边服务器同步文件到本地,存储小或者对数据同步及时要求较高的不建议使用 。
好了,回到NFS的搭建上来,SSH上我们提前准备好的NFS服务器,开始安装NFS2、安装nfs
[infobox title=”安装NFS”]yum -y install nfs-utils rpcbind[/infobox]
[infobox title=”设置开机自动启动服务”]
chkconfig nfs on
chkconfig rpcbind on[/infobox]
[infobox title=”启动服务”]
service rpcbind start
service nfs start
[/infobox]
接下来是开放端口,如果你是内网环境进行测试,可以直接关闭centos的防火墙。
但由于我这边搭建是时属于公网环境,并且公网环境更贴近实际情况,所以本处介绍的是固定其端口并让防火墙放行。
注;我的文本编辑器是vim,如果没有vim可以安装下,当然,习惯用nano的话,把vim改成nano就好
[infobox title=”vim编辑器安装”]
yum install -y vim
[/infobox]
[infobox title=”vim编辑器常用指令”]
非指令模式下:
按a进入编辑模式
输入”:”进入指令模式
指令模式下:
q 退出
q! 强制退出
w 保存
wq 保存并退出
esc 返回非指令模式
编辑模式下:
esc返回非指令模式
[/infobox]
以上为你可能需要用到的vim操作方式
固定端口
[infobox title=”nfs配置文件”]
vim /etc/sysconfig/nfs
[/infobox]
进入后将下面指定的端口粘贴进去
[infobox title=”固定端口”]
RQUOTAD_PORT=23331
LOCKD_TCPPORT=23332
LOCKD_UDPPORT=23333
MOUNTD_PORT=23333
STATD_PORT=23334
[/infobox]
保存退出后重启服务
[infobox title=”重启服务”]
systemctl restart rpcbind.service
systemctl restart nfs.service
[/infobox]
另外,/etc/modprobe.d/lockd.conf下也需要配置端口以锁定(不然你的端口号会反复横跳)
[infobox title=”端口配置文件”]
vim /etc/modprobe.d/lockd.conf
[/infobox]
粘贴以下配置
[infobox title=”锁定端口”]
options lockd nlm_tcpport=23332
options lockd nlm_udpport=23332
[/infobox]
完毕后退出重载
[infobox title=”重启服务”]
systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server
[/infobox]
这样端口就配置完毕了,前往宝塔控制面板把23331-23334给放行就好,可以在宝塔那边直接写23331:23334 快捷添加全部端口
另外还要放行下111端口和2049端口
分享目录
目前NFS的通信已经是正常的了,所以接下来就是将你的网站数据放在这台NFS服务器上,给另外两台服务器共享数据就好。
那么假定我们目前网站数据在NFS服务器上的这个目录中:/www/wwwroot/xiaohuo
所以,我们需要将xiaohuo文件夹中的文件共享给负责负载均衡两台服务器
进入到管理共享目录的配置文件中
[infobox title=”授权配置文件”]
vim /etc/exports
[/info]
/www/wwwroot/xiaohuo 第一台负载服务器的IP(rw,sync,no_root_squash) /www/wwwroot/xiaohuo 第二台负载服务器的IP(rw,sync,no_root_squash)
[/infobox]
配置参数解释:
rw 读写权限
sync 即时同步
no_root_squash 给予访问者root权限
本处比较有争议的是no_root_squash这一项,用这个的话可以省去配置账户的问题,但是安全性降低(一台负载被黑,那么你的NFS服务器也不保),不过考虑到我们实际情况下并没有那么高的要求,就使用这一项了,如果你比较注重安全性并且打算将这个做成存储服务的话,建议用root_squash,不过就需要去配置用户了。
配置完毕后保存退出,重载文件
[infobox title=”重载文件”]
exportfs -a
[/infobox]
检查挂载是否正常
[infobox title=”检查挂载”]
showmount -e
[/infobox]
报错的话试试
[infobox title=”检查挂载”]
showmount -e NFS服务器公网IP地址
[/infobox]
仍旧报错的话就需要去检查下你的配置是否正确了,有概率是因为servername与host引起的,本处不赘述,百度上面有更加详细的教程。
挂载目录
NFS的服务器配置已经完成,接下来我们把SSH切换到其中一个负载均衡服务器(另一个按照这个相同配置就好)
假设我们要把网站目录定义在:/www/wwwroot/saikou
那么我们需要做的就是把saikou文件夹和NFS服务器上的xiaohuo文件夹根目录内容进行同步(也就是xiaohuosaikou!)
创建文件夹可以选择在宝塔直接新建文件夹,或者在SSH中输入
[infobox title=”创建目录”]
mkdir /www/wwwroot/saikou
[/infobox]
注意,权限所有者一定要是www,而不是root,因此我更推荐你在宝塔那边创建,那边默认是www
创建完毕后输入这个指令进行挂载
[infobox title=”挂载”]
mount NFS服务器IP地址:/www/wwwroot/xiaohuo /www/wwwroot/saikou
[/infobox]
回车后,如果没有任何返回值,那么就是挂载完毕了,可以输入df -h查看是否正确挂在,宝塔控制面板中也可以看到
效果如下:
SSH输入df -h的效果:
以上,挂载基本完毕,被挂载的文件夹操作与本地并无两样。
开机自动挂载
如果是生产环境,当然不可能重启一次,所以需要将挂载放到开机硬盘加载中
[infobox title=”配置文件”]
vim /etc/fstab
[/infobox]
进入配置文件后将挂载代码粘贴进去
[infobox title=”永久挂载”]
NFS服务器IP地址:/www/wwwroot/xiaohuo /www/wwwroot/saikou nfs rw,tcp,intr 0 1
[/infobox]
保存,退出,重启即可看到效果。
文章参考
https://www.cnblogs.com/zhaojingyu/p/10529945.html
https://www.cnblogs.com/merely/p/10793877.html
https://blog.51cto.com/superpcm/2096552
https://blog.csdn.net/qq_41376060/article/details/102842218
https://mxlog.com/fenxiang/1519.html
https://www.cnblogs.com/sevck/p/5733713.html
感谢以上作者提供给我大量思路让我更加容易去搭建集群环境,少走不少弯路√