LVS负载均衡的DR模式配置及高可用

什么是集群:
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。
集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完成一个任务。

LVS的模式:
lvs有三种主要模式:nat模式(LVS/NAT),直接路由模式(LVS/DR)ip隧道模式(LVS/TUN)
以及二度开发的第四种模式(FULL NAT)

LVS在企业架构中的位置:
用户 --> LVS负载均衡服务器 —> apahce服务器 —> mysql服务器&memcache服务器&共享存储服务器。并且我们的mysql、共享存储也能够使用LVS再进行负载均衡。

集群的特点:
1)高性能performance。一些需要很强的运算处理能力比如天气预报,核试验等。这就不是几台计算机能够搞定的。这需要上千台一起来完成这个工作的。
2)价格有效性
通常一套系统集群架构,只需要几台或数十台服务器主机即可,与动则上百王的专用超级计算机具有更高的性价比。
3)可伸缩性
当服务器负载压力增长的时候,系统能够扩展来满足需求,且不降低服务质量。
4)高可用性
尽管部分硬件和软件发生故障,整个系统的服务必须是7*24小时运行的。
集群的优势:
1)透明性
如果一部分服务器宕机了业务不受影响,一般耦合度没有那么高,依赖关系没有那么高。比如NFS服务器宕机了其他就挂载不了了,这样依赖性太强。
2)高性能
访问量增加,能够轻松扩展。
3)可管理性
整个系统可能在物理上很大,但很容易管理。
4)可编程性
在集群系统上,容易开发应用程序,门户网站会要求这个。
小结:
集群就是一组相互独立的计算机,通过高速的网络组成一个计算机系统,每个集群节点都是运行其自己进程的一个独立服务器。对网络用户来讲,网站后端就是一个单一的系统,协同起来向用户提供系统资源,系统服务。

一、LVS集群的搭建
DR模式的原理:
负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

DR模式的特性:
1)RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
2)RS的网关一定不能指向DIP;
3)RS跟DR要在同一物理网络内(不能由路由器分隔);
4)请求报文经过DR,但响应报文一定不经过DR
5)不支持端口映射;
6)RS可以使用大多数的操作系统;

1.环境说明(需要三台虚拟机,后面做到主备负载的时候需要再添加一台虚拟机,作为备用负载均衡器):

机器名称 ip配置 服务角色
server1 VIP:172.25.96.1 DIP:172.25.96.100 负载均衡器
server2 RIP:172.25.96.2 后端服务器
server3 RIP:172.25.96.3 后端服务器

2.实现步骤
server1上:
1)编辑yum源,将LoadBalancer(负载均衡)添加到文件中,进行特定解析。

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.96.250/rhel6.5/LoadBalancer
gpgcheck=0

这里写图片描述

yum clean all
yum repolist

这里写图片描述
显示3694,即表示设定成功,可进行接下来的操作。
2)安装ipvsadm

[root@server1 ~]# yum install -y ipvsadm

这里写图片描述
查看策略(这里还没配置策略,所以没有显示):

[root@server1 ~]# ipvsadm -l

这里写图片描述
可使用ipvsadn --help来查看命令的参数和使用方法,接下来开始写策略:

[root@server1 ~]# ipvsadm -A -t 172.25.96.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.96.100:80 -r 172.25.96.2:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.96.100:80 -r 172.25.96.3:80 -g

查看策略:

[root@server1 ~]# ipvsadm -ln

这里写图片描述
3)添加VIP到eth0上

[root@server1 ~]# ip addr add 172.25.96.100/24 dev eth0
[root@server1 ~]# ip addr show eth0

这里写图片描述
最后一步启动network服务

/etc/init.d/network start

这里写图片描述
这样server1上负载均衡器的配置就完成了,接下来配置后端服务器server2和server3。
server2和server3上:
两个服务器的配置相同,这里只说明server2上的配置,server3同样配置。
1)安装服务arptables:用来设置、维护和检查Linux内核中的arp包过滤规则表。

[root@server2 ~]# yum install -y arptables_jf

这里写图片描述
2)添加VIP到eth0上,注意这里的子网掩码设置为32,使设备独立,不存在广播地址,也就不会对外广播,即自己不接受也不发送。

[root@server2 ~]# ip addr add 172.25.96.100/32 dev eth0

这里写图片描述
3)编写arptables策略:
首先查看arptables
这里写图片描述
对IN 和 OUT进行控制:

[root@server2 ~]# arptables -A IN -d 172.25.96.100 -j DROP
[root@server2 ~]# arptables -A OUT -s 172.25.96.100 -j mangle --mangle-ip-s 172.25.96.2
[root@server2 ~]# /etc/init.d/arptables_jf save

这里写图片描述
4)修改内核配置
5)安装http服务,编写测试页

[root@server2 ~]# yum install -y httpd

这里写图片描述

[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
[root@server2 html]# vim index.html

这里写图片描述
启动http服务
这里写图片描述
server3上也进行相同的操作,只需要将对应的2改为3即可。

3.测试:
在浏览器上测试(刷新页面得到的结果不同):
这里写图片描述
这里写图片描述
在物理机上使用curl命令来进行测试,可以看到可以进行正常的轮询调度。
注:浏览器中一般都会有缓存,其调度可能会失效,使用Linux中的curl等命令访问则是没有问题的。能够正常的实现调度。
这里写图片描述
注:这里为了演示轮询调度的效果,所以server2和server3上测试页面写的不一样,在实际的应用中server2和server3中的数据应该是一样的,得到的是一样的结果。例如,一个用户在一定时间内访问了两次百度,网页的显示时没有任何变化的,但数据却却有可能是从不同的服务器上得到的。
这样的轮询调度看起来是正确的,但其实是存在问题的,如下演示:
假如后端服务器server2宕掉了,但在负载调度器上的策略并不会发生改变,还是根据策略在server2和server3之间进行轮询调度,这样再访问的时候调度到server2会得到错误的输出。
关闭server2上的http服务,模拟server2宕掉
这里写图片描述
在物理机上再次测试:
这里写图片描述
究其原因是负载调度器没有对后端服务器server2和server3的一个健康检查功能。接下来在上述配置的基础上对负载服务器server1添加健康检查功能。

4.实现健康检查
1.server1上修改yum源,添加以下内容,否则安装不了服务。

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo

这里写图片描述

[root@server1 ~]# yum clean all
[root@server1 ~]# yum repolist

显示如下内容则表示配置成功,可以进行下一步的擦作。
这里写图片描述
2.安装服务
1)ldirectord功能说明
ldirectord用来实现LVS负载均衡资源在主、备节点间的故障转移。在首次启动时,ldirectord可以自动创建IPVS表。此外,它还可以监控各RealServer的运行状态,一旦发现某RealServer运行异常时,还可以将其从IPVS表中移除。
ldirectord进程通过向RealServer的RIP发送资源访问请求并通过由RealServer返回的响应信息来确定RealServer的运行状态。在Director上,每一个VIP需要一个单独的ldirectord进程。如果RealServer不能正常响应Director上ldirectord的请求,ldirectord进程将通过ipvsadm命令将此RealServer从IPVS表中移除。而一旦RealServer再次上线,ldirectord会将其重新添加至IPVS表中
2)安装ldirectord服务

[root@server1 /]# yum install -y ldirectord-3.9.5-3.1.x86_64.rpm

这里写图片描述
3)修改其配置文件
查看这个包安装了那些文件

[root@server1 /]# rpm -ql ldirectord    

这里写图片描述

[root@server1 resource.d]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server1 resource.d]# cd /etc/ha.d/
[root@server1 ha.d]# vim ldirectord.cf

这里写图片描述
清除原先设定的策略

[root@server1 ha.d]# ipvsadm -C

这里写图片描述
启动服务,策略自动添加
这里写图片描述
查看规则是否添加成功
这里写图片描述
到这里负载均衡器server1上对后端服务器的健康检查的设置完毕了。后端服务器server2和server3的设定保持不变。
4)测试
1.两台后端服务器都正常工作,效果如下(进行正常的轮询调度):
这里写图片描述
2.有一台服务器宕掉,假设后端服务器server2宕掉(这里只需关闭server2的http服务即可模拟)
这里写图片描述
再次测试:
这里写图片描述
只会负载均衡器只会调度server3,而不在去调度server2,
查看负载均衡器的策略:
这里写图片描述
可以看到调度策略里没有了server2,即也不会再去调度server2。
3.server2恢复正常,查看负载均衡器的调度:
这里写图片描述
server1上的策略自动添加服务器server2,并且进行正常的轮询调度。
这里写图片描述
4.假设服务器server2和server3都宕掉,
这里写图片描述
这里写图片描述
查看结果
server1上:
这里写图片描述
可以看到只有server1的本地回环接口再轮询调度里(可查看上面健康检查设置时的配置文件,有说明)。
测试就会出现问题
这里写图片描述
这里可以在server1上安装http,编写发布页,这样在所有后端服务器都宕掉的时候显示这个测试页。给客户提示。

实现:

[root@server1 ha.d]# yum install -y httpd

这里写图片描述
编写发布页
这里写图片描述
开启http服务
这里写图片描述
再次测试
这里写图片描述
若现在server2和server3恢复正常,则又进行正常的轮询调度
这里写图片描述
这里写图片描述
查看策略
这里写图片描述
测试
这里写图片描述
以上的几种测试方法可直观的看到负载均衡器对后端服务器的健康检查。
从一开始的没有健康检查的负载均衡,到添加了健康检查,进行完善,现在看来应该已经完成了负载均衡的设定,其实还存在一些问题,由于只有一个调度器,当调度器主机宕机后,所有服务都不能正常访问,为了解决这个问题,我们必须准备一台备用的调度器,来应对这种危机。

Keepalived 高可用集群管理
说明:由于ldirectord与Keepalived存在冲突,所以必须将ldirectord停掉。
这里写图片描述
由于ldirectord开机自启,所以必须将其开机自启关掉
这里写图片描述
1.源码安装Keepalived

下载站点:
 1、http://www.keepalived.org/download.html
 2、http://keepalived.org/software

 cd /tmp
 curl --progress http://keepalived.org/software/keepalived-2.0.6.tar.gz

这里写图片描述
使用scp命令发给server1
这里写图片描述
server1上:
1)解压
这里写图片描述
2)编译

[root@server1 ~]# cd keepalived-2.0.6
[root@server1 keepalived-2.0.6]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV

这里写图片描述
这里写图片描述
生成了Makefile文件,得到上面的结果表示编译的第一步完成。
可能会出现如下错误:
这里写图片描述
这是因为server1上没有gcc,安装gcc即可。
还要安装rpm-build和openssl-devel。

[root@server1 ~]# yum install -y gcc rmp-build openssl-devel

第二步使用make开始编译

[root@server1 keepalived-2.0.6]# make

这里写图片描述
第二步完成,最后一步使用make install开始安装,这一步结束后,软件就被安装到我指定的目录下。

[root@server1 keepalived-2.0.6]# make install

这里写图片描述
经过上面的步骤,keepalived就已经安装完成了,接下来就是对其配置文件的更改。

做软连接:

[root@server1 keepalived]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
[root@server1 keepalived]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server1 keepalived]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server1 keepalived]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/

加可执行权限
这里写图片描述
编辑主配置文件

[root@server1 init.d]# cd /etc/keepalived/
[root@server1 keepalived]# vim keepalived.conf

这里写图片描述
这里写图片描述
这里写图片描述
只编写这三部分的内容,其余全部删除,完成后保存退出即可。
开启服务:
这里写图片描述
经过上述的操作,主服务器server1就部署完成。
Keeplived 高可用
再开一台虚拟机server4,作为备用服务器。按照前面部署server1的步骤布置keeplived配置,这里可直接将server1的keeplived 配置文件复制过来,进行稍作修改,并进行软连接即可。
在etc下新建目录keeplived,将servre1的配置文件复制在该目录下
这里写图片描述
修改配置文件:1)将状态由原来的master 改为备用。2)更改优先级,使其和server1上的优先级不同,避免若一台主机挂掉以后,若优先级是一致的,等原来的主机恢复后,会因为优先级是一致的而导致争抢,同时操作电脑上的同一台文件,而导致脑裂。其他部分不做更改。

[root@server4 keepalived]# cd /etc/keepalived/
[root@server4 keepalived]# vim keepalived.conf 

这里写图片描述
做软连接

[root@server4 keepalived]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
[root@server4 keepalived]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server4 keepalived]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

启动服务(给脚本执行权限)
这里写图片描述
这样server4上的keepalived就部署完成了,还需要设置其为负载均衡服务器,和server1的设置相同,只需修改部分参数即可(这里可直接将server1的yum配置文件拷贝过来,在安装ipvsadm即可,不再详细说明)。
查看server1和server4的日志

[root@server1 local]# cat /var/log/messages

这里写图片描述

[root@server4 ~]# cat /var/log/messages 

这里写图片描述
可以看到分别为MASTER和BACKUP,与设定的相同。
在物理机上进行测试
1.两台负载均衡器都正常工作
这里写图片描述
2.主负载均衡器server1宕机,查看效果:
这里写图片描述
查看server4日志,可看到当server1宕机,server4立刻接替server1的工作。
这里写图片描述
测试也正常
这里写图片描述
当server1又启动了,server4又回归为备用。
这里写图片描述
server1:
这里写图片描述
server4:
这里写图片描述
总结:
以上的操作的结果直观的可以看到和感受到lvs集群高可用。

猜你喜欢

转载自blog.csdn.net/oikinkl/article/details/82715894