keepalived+LVS的实现
一.LVS 概述Linux Virtual Server(LVS)是一套完整的基于IP的负载均衡的集群软件.LVS运行在一对有相似配置的计算机上:
一个作为活动LVS Router(Active LVS Router),一个作为备份LVS Router(Backup LVS Router),活动
LVS Router 服务有两个角色:
*负载均衡到真实的服务器上。
*检查真实服务器提供的服务是否正常
备份LVS Router用来监控活动的LVS Router.以备活动的LVS Router失败时由备份LVS Router接管。
如图所示:
http://s2.运维网.com/wyfs02/M00/82/FC/wKioL1dn1t6CvgbPAAAzY6nXL7w374.png-wh_500x0-wm_3-wmp_4-s_1382571038.pngPulse进程运行在活动LVS router和备份LVS Router上,在备份LVS router上,Pulse发送一个心跳到
活动LVS Router的公网接口上检查活动LVS Router是否正常。在活动LVS Router上,pulse启动LVS进程
并响应来自于备份LVS Router的心跳。LVS进程调用ipvsadm 工具去配置和维护IPVS路由表,并为每一个
在真实的服务器上的虚拟服务启动一个nanny进程,每一个nanny进程去检查真实服务器上的虚拟服务状态
并将故障情况通知lvs进程。假如一个故障被发现,lvs进程通知ipvsadm在ipvs路由表中将此节点删除。
如果备份LVS Router未能收到来自于活动LVS Router的响应。它将调用send_arp将虚拟IP地址再分配到备份
LVS Router的公网接口上。并在公网接口和局域网接口上分别发送一个命令去关闭活动LVS Router上的LVS
进程。同时启动自己的LVS 进程来调度客户端请求。
下面是一个2层结构的LVS 架构:
http://s5.运维网.com/wyfs02/M00/82/FC/wKiom1dn1smhfVnkAAA2f7ngT-Y004.png-wh_500x0-wm_3-wmp_4-s_3182671014.png2层结构的LVS架构适合于Real Server上的数据变化不是很频繁的情况,如果Real Server上的数据变化很频繁应该
考试使用三层价构的LVS,将数据放到一个共享文件系统GFS上供所有的Real Server同时读写。可以考虑使用VS/NAT,
VS/TUN和VS/DR和VS/FULLNAT模式来实现IP负载均衡:
*使用VS/NAT模式:客户通过Virtual IP Address访问网络服务器时,请求报文到达调度器,调度器根据连接调度算法
http://s1.运维网.com/wyfs02/M01/82/FC/wKioL1dn1z_gt4WYAAA01EBqEUM773.png-wh_500x0-wm_3-wmp_4-s_2913968412.png从一组真实服务器中选出一台服务器,将报文的目标地址Virtual IP Address改写成选定服务器的地址,报文的目标端口
改写成选定服务器的响应端口,最后将修改后的报文发送给选出的服务器,同时,调度器在连接Hash表中记录这个连接,
当这个连接的下一个报文到达时,从连接Hash表中可以得到原定服务器的地址和端口,进行同样的改写操作。
并将报文传送给原选定的服务器。当来自真实服务器的响应报文经过调度器时。调度器将报文的源地址和源端口改为Virtual
IP Address和相应的端口,再把报文发给用户。当使用VS/NAT方法时,如果有大量的响应数据经过调度器。调度器将成为整个集群
的瓶颈。
*VS/TUN模式:VS/TUN的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态
http://s2.运维网.com/wyfs02/M01/82/FC/wKiom1dn11PSvrCrAAFVt3YF9RU834.png-wh_500x0-wm_3-wmp_4-s_2827736021.png地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器,服务器收到报文后,先将报文解封装
获得原来的目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回
给客户。
*VS/DR模式http://s1.运维网.com/wyfs02/M00/82/FC/wKioL1dn13Shzlz-AAJVnuw77eA059.png-wh_500x0-wm_3-wmp_4-s_782029314.png:调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,如通过交换机或者高速的HUB相连。VIP地址为调度器和服务器组
共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non——ARP网络设备上,只是处理目标地址
为VIP的网络请求。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC
地址,再讲修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定是可以收到这个数据帧,从中可以获得该IP报文。
当服务器发现IP报文的目标地址是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
配置案例:
LVS常与keepalived 组件一起使用;LVS本次使用VS/DR模式。选用的2台RS主机域名分别为server3.example.com
和server4.example.com.
环境及组件:RedHat 6.5 keepalived-1.2.20.tar.gzlibnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
1.安装相关组件,libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm gcc
openssl-devel -y
2.tar zxf keepalived-1.2.20.tar.gz
cd keepalived-1.2.20/
3.开始编译:./configure --prefix=/usr/local/;make && make install
至少确保如下条件满足:http://s4.运维网.com/wyfs02/M02/82/FD/wKiom1dn3Q_SppVKAAFFYjFto34443.png-wh_500x0-wm_3-wmp_4-s_4194078004.png
4.建立相关链接:
#cd /usr/local/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin
5.将安装后的目录文件同步到另一台主机:
#scp -r /usr/local/keepalived/ root@172.25.26.4:/usr/local/
6.编辑/etc/keepalived/keepalived.conf
vi etc/keepalived/keepalived.conf
http://s2.运维网.com/wyfs02/M01/82/FD/wKiom1dn3hzgUhFfAACo7MQ0T6A189.png-wh_500x0-wm_3-wmp_4-s_3683370137.png
7.由于网络结构对称,另一台主机/etc/keepalived/下的keepalived.conf文件与此相同。可以通过远程复制的方式将配置文件复制到远端:
#scp /etc/keepalived/keepalived.conf root@172.25.26.4:/etc/keepalived/
8.检查无误此时启动keepalived服务。
#/etc/init.d/keepalived start
在另一台主机上执行相同的操作;
9.观察2台主机keepalived状态。主要是通过监控日志观察MASTER端和BACKUP端是否正常;
10.测试。关闭其中一台主机。观察另外一台是否能正常接替MASTER角色。
tail -f /var/log/message
http://s1.运维网.com/wyfs02/M01/82/FD/wKiom1dn3_WztI_JAAObMz0wfkA780.png-wh_500x0-wm_3-wmp_4-s_3861005068.png
如果能正常进行角色转换说明此功能正常。
页:
[1]