前文我们提到了如何让LVS来检测RealServer是否健康,我们可以写shell脚本来定期发送http请求监控返回Resp的状态码是否是200,还有就是使用现有技术keepalived
VRRP协议主要用来做网络的高可用保障的,keepalived用到了这项协议技术来保证高可用
最好将LVS上的防火墙关掉,因为LVS和iptables都是控制内核中的网络协议栈的方法,两个技术控制一个内核的一个模块,会产生冲突。所以企业会在整个服务器外部部署一个硬件防火墙,来做安全保障。
0. 准备工作:
1.在node01和node04上分别安装keepalived和ipvsadm(用来看负载状况和数据包状态),并进入keepalived目录下找到keepalived.conf,做一个拷贝副本方便以后还原初始——>keepalived.conf.bak。
2.对keepalived.conf进行配置和讲解
<1>vrrp协议的网卡接口相关配置,state字段表示当前服务器是主还是备用,我这里将node01配置成主,给LVS——node01配置VIP
PS:LVS服务器做主备,主一旦挂掉,备用接手,一旦主修复,主则抢占备用的级别,重新变为MASTER。LVS服务器做主备是抢占机制,这里考虑到的是服务器成本问题(因为服务器一定是冗余配置防止宕机的,所以成本较高),为了节省成本,LVS主服务器肯定配置较好,备配置较差,因为首先,LVS是内核中的一个程序,是一个字符串规则,也是c语言写的一个结构体,不会大量占用内存,不会占用大量IO和磁盘,所以主可以抢占,因为代价小;其次,备用服务器只需要承担一会儿的数据压力,等待主修好,就可以不用继续承担压力了。但是别的服务器集群不一定做抢占以及主备硬件配置不一样。以文件服务器举例子,文件服务器会承担大量数据的写入。所以文件服务器主备配置是一样的,因为一旦主挂掉,备用顶上去,在主服务器修复好的过程中,备用服务器的内存中已经写了大量数据,需要从内存中同步到磁盘中。主如果已经修复好,要抢占备用占据的主的地位,则会首先做数据移植。这是一个耗时耗资源的过程,业务会造成一个时间窗口是不可用的。所以文件服务器主备不做抢占,并且服务器硬件配置相同。
<2>LVS虚拟服务器相关配置,配置负载均衡规则,相当于ipvsadm -A -t 192.168.88.100:80 -s rr
<3>LVS后面的RealServer的配置(node02和node03),
将上述配置node02的real_server方法体复制粘贴到该方法体后并更改为node03的ip和tcp端口,并将上述配置LVS虚拟服务器的方法体外的方法全部删掉即可。
<4> 配置LVS备用服务器node04
使用远程拷贝命令 : scp ./keepalived.conf [email protected]:`pwd` ,将node01的keepalived.conf拷贝到node04的对应目录中去。
将state更改为BACKUP,表示为从属服务器,并修改权重为50,其他全部和node01一样
(1)在node01上启动keepalived:service keepalived start,通过ifconfig查看node01上是否有VIP,使用ipvsadm -ln查看负载均衡规则
VIP配置在了eth0:2子接口中
发现node02和node03都在负载均衡的规则中
(2)在node02和node03上启动httpd服务:service httpd start,访问192.168.88.100来查看负载均衡
刷新后:
(3)关掉node03的httpd服务,则只能访问node02
在node01上使用ipvsadm -ln,查看负载均衡情况
只有node02,没有node03了,说明node01中的keepalived通过心跳检测检测到node03宕机,则只将数据包转向node02,正确。
(4)重新启动node03,使用ipvsadm -ln查看负载均衡表
node03重新添加到负载均衡规则中,重新刷新访问192.168.88.100页面也会出现(2)中情况,说明node01和node02,node03的DR模型搭建成功。
(6)测试在node01宕机下,node04是否能够作为LVS重新上线
问题:如果我们将node01和node04的iptables都关掉的话,那么Xshell远程登录和keepalived的IP漂移都不能够正常进行。为了试验成功,只能现将iptables打开,并放开80端口。则可以测试成功,至于为和关闭防火墙反而不能成功,应该和iptables的配置和iptables开机启动有关,这样会导致iptables和LVS内核冲突。
模拟node01宕机:将node01的eth0网卡接口关闭——>ifconfig eth0 down
我们发现阻塞了,因为网卡eth0被关闭了,那么我们外界通过Xshell来访问node01虚拟机则也不能访问了,所以会阻塞。只能从VMware上查看网卡接口状态:
只剩下环回接口lo了,这时候node04会得到VIP:
后端RealServer访问不受影响,同(2)
将node01恢复:ifconfig eth0 up,访问192.168.88.100,也同(2),实验成功,达成主备。
(7)但是如果keepalived程序本身出现bug,则会出现bug,详情请听https://www.bilibili.com/video/av35028934/?p=29中32分钟之后讲解