Linux下的LVS+keepalived
一.LVS(Linux虚拟服务器)
Linux虚拟服务器是一个虚拟的服务器集群系统。通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS。使用LVS架构的服务器集群系统由三个部分组成:最前端的负载均衡层(load Balancer),中间的服务器群组层(server array),最底层的数据共享存储层(shared storage)。
Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为Director Server的应用还不是很多,性能也不是很好。
对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。
二.IPVS实现负载均衡机制
LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。IPVS实现负载均衡机制有三种分别是NAT、TUN和DR
VS/DR:直接路由
VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,但是必须要求VS和RS在同一网段。
常用的四种负载调度算法:
轮叫调度(rr):将外部用户请求按顺序1:1的分配到集群中的每个Real Server上,这种算法平等地对待每一台Real Server,而不管服务器上实际的负载状况和连接状态。
加权轮叫调度(wrr):根据Real Server的不同处理能力来调度访问请求
最少链接调度(LC):将网络请求调度到已建立的链接数最少的服务器上
加权最少链接调度(WLC):每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
三.VS/DR的搭建
实验环境: LB+keepalived(Master)server1:172.25.78.1,web1(server2):172.25.78.2,web2(server3):172.25.78.3,keepalived(Backup)server4:172.25.78.4,client:172.25.78.250
1.调度端的配置
(1)去官网下载LVS安装包并且安装
(2)IPVSadm套件的安装
配置好yum源并且安装IPVSadm套件, ipvsadm是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置。在redhat6.5系统中,已经集成了LVS相关模块,但是ipvsadm命令仍然需要使用yum单独安装。6.5的yum源默认支持服务的下载,别的要单独配置yum源下载
rdehat6.5版本的包含以下几个部分
[HighAvailability] ##高可用的
[LoadBalancer] ##负载均衡
[ResilientStorage] ##分布式存储
[ScalableFileSystem] ##文件系统
(3)添加VIP
ip addr 172.25.78.100/24 dev eth0 ##添加虚拟IP到eth0上
(4)使用IPVSadm添加LVS策略
ipvsadm -A -t 172.25.78.100:80 -s rr ##-A:添加虚拟服务 -t:添加服务地址 -s:采用的方式(10种算法:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|)
ipvsadm -a -t 172.25.78.100:80 -r 172.25.78.2:80 -g ##-a:添加真实的服务 -r:添加真实的服务地址
ipvsadm -a -t 172.25.78.100:80 -r 172.25.78.3:80 -g ##-g:直连,默认采用直连
/etc/init.d/ipvsadm save ##保存策略
ipvsadm -ln ##查看策略
2.服务端配置(server2 server3同理配置)
(1)echo server2 > /var/www/html/index.html ##web1的发布文件
(2)ip addr add 172.25.78.100/32 dev lo ##添加VIP到本机的回环接口
(3)yum install arptables_jf -y ##安装ARPtables_jf套件对arp包制定规则,类似于iptables
arptables -A IN -d 172.25.32.100 -j DROP ##询问本机的ARP包全部都丢弃
arptables -A OUT -s 172.25.32.100 -j mangle --mangle-ip-s 172.25.32.2
/etc/init.d/arptables_jf save ##保存策略
如果不对server2和3的ARP包做限制,那客户端可能会越过调度端直接访问后端服务器,调度端没有意义了,只能让它去访问调度端
不加限制:
加限制:
(3)arptables -L ##查看arptables的策略
3.测试:轮询访问成功
四.健康检查(调度端对后端的健康检查)
(1)在server1调度端上面安装:
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y ###自动检测ipvsadm策略是否正常
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/ ##复制配置文件的模版
vim /etc/ha.d/ldirectord.cf
/etc/init.d/ldirectord reload ###更新配置文件
(2)测试:随机停掉一个web服务,访问就会涌向另一个运行良好的的web服务
当两个都down掉,会启用调度端的服务
(1)源码编译,少什么软件装什么软件
./configure --perfix=/usr/local/keepalived/ --with-init=SYSV
make&&make install ##安装
有以下安装成功即可使用keepalived
(2)把keepalived的配置文件,启动脚本都创建链接以便于平常的使用习惯(主备都做)
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 /bin/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived ##给脚本执行权限
/etc//keepalived//keepalived.conf ###keepalived的配置文件
这个是备份的keepalived
这个是主keepalived的配置文件(state这个参数有差别,主:MASTER,备份:BACKUP)
/etc/init.d/keepalived reload ##更新配置文件
(3)删除调度端的VIP,开启keepalived后会自动添加VIP
当停掉主keepalived,VIP就会自动飘移到备份的keepalived
(4)测试:
可以在之前设定的root邮箱里查看后端的异常
停掉web2,测试结果如下
查看调度信息