LVS(Linux VirtualServer)是一个建立在一系列真实服务器上的高可扩展、高可用性的服务器,工作于四层网络,即基于IP加端口的模式。LVS的负载均衡器工作在Linux系统上。作为一个非常优秀的负载均衡解决方案,LVS可用来搭建高可拓展和高可用的网络服务,例如web、cache、ftp、mail、media和VoIP服务等。以下为LVS集群体系结构:
负载均衡转发模式包括直接路由模式DR、网络地址转换模式NAT以及隧道模式TUN三种
在一般的互联网应用环境,选择直接路由模式。
DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。从原理上可以知道,DR模式下,负载均衡器的输出和输出流量应该是基本一致的
排错方便迅速。如果通过vip访问不到服务,则可以直接通过访问真实服务器的方式直接定位问题的所在。
当负载均衡器都停止工作时,DR模式易于应急处理。通过修改dns的A记录,把先前主机名对应的vip改成真实服务器的ip地址,使服务迅速恢复起来,从而赢得时间处理负载均衡器的故障。
集群采用三层结构
负载调度器(loadbalancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
服务器池(serverpool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
共享存储(sharedstorage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
IP负载均衡技术
在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。
基于内容请求的分发技术
服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容和服务器的情况选择服务器执行请求。因为所有的操作都是在操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
负载调度策略和算法
IP负载均衡软件IPVS在内核中所实现的各种连接调度算法:
轮轮叫调度(Round-RobinScheduling)
加权轮叫调度(WeightedRound-Robin Scheduling)
最小连接调度(Least-ConnectionScheduling)
加权最小连接调度(WeightedLeast-Connection Scheduling)
基于局部性的最少链接(Locality-BasedLeast Connections Scheduling)
带复制的基于局部性最少链接(Locality- BasedLeast Connections with Replication Scheduling)
目标地址散列调度(DestinationHashing Scheduling)
源地址散列调度(SourceHashing Scheduling)
最短预期延时调度(ShortestExpected Delay Scheduling)
叫调度(Round-RobinScheduling)
加权轮叫调度(WeightedRound-Robin Scheduling)
最小连接调度(Least-ConnectionScheduling)
加权最小连接调度(WeightedLeast-Connection Scheduling)
基于局部性的最少链接(Locality-BasedLeast Connections Scheduling)
带复制的基于局部性最少链接(Locality-BasedLeast Connections with Replication Scheduling)
目标地址散列调度(DestinationHashing Scheduling)
源地址散列调度(SourceHashing Scheduling)
最短预期延时调度(ShortestExpected Delay Scheduling)
不排队调度(NeverQueue Scheduling)
后端存储
采用容错的分布式文件系统,如AFS、GFS、Coda和Intermezzo等。访问分布式文件系统就像访问本地文件系统一样。同时,分布式文件系统提供良好的伸缩性和可用性。使用分布式锁管理器(DistributedLock Manager)来解决应用程序的访问冲突问题。
LVS可应用的解决方案
可拓展的Web和媒体服务(如Real公司的LLVS可伸缩Web和媒体集群)、可拓展的Cache服务、可伸缩邮件服务(在前端是一个采用IP负载均衡技术的负载调度器;在第二层是服务器池,有LDAP(Light-weightDirectory AccessProtocol)服务器和一组邮件服务器。第三层是数据存储,通过分布式文件系统来存储用户的邮件。集群中结点间是通过高速网络相连的)、地理分布LVS集群等。
LVS+Keepalived实现高可用集群(Web服务)―使用VS/DR负载均衡技术构建可拓展的Web集群
Keepalived
用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
VRRP
VirtualRouter Redundancy Protocol,能够动态分配可用的IP路由给参与的主机。在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器。VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器。由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。
集群架构:负载均衡层+WEB服务层+数据库层
IP配置信息:
LVS―DR-Master 192.168.56.1 rango.sysu
LVS―DR-Backup 192.168.56.101 vm1.sysu
LVS-DR-VIP 10.0.0.227
WEB1-Realserver 192.168.56.102 vm2.sysu
WEB2-Realserver 192.168.56.103 vm3.sysu
GateWay 192.168.56.254
VIP:虚拟IP需要事先从IDC处获得,并将其绑定到Master的eth0上:
ifconfig eth0:0 10.0.0.227 broadcast 10.0.0.227 netmask 255.255.255.255 up安装LVS和Keepalived
在Master和Backup上分别编译安装ipvsadmin、keepalived
ps:安装前准备:lsmod |grep ip_vs;
ln -s /usr/src/kernels/{uname -r}/ /usr/src/linux;
yum install libnl* popt*
安装ipvsadmin:
#tar zxvf ipvsadm-1.26.tar.gz
#cd ipvsadm-1.26
#make && make install
#find / -name ipvsadm # 查看ipvsadm的位置
安装keepalived:
#tar zxvf keepalived-1.2.9.tar.gz
#cd keepalived-1.2.9
#./configure && make && make install
#find / -name keepalived #查看keepalived位置
做成系统启动服务方便管理:
#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived/etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/sbin/keepalived/usr/sbin/
#service keepalived start|stop利用Keepalvied实现负载均衡和和高可用性
在主负载均衡服务器上配置keepalived.conf
在Backup服务器上配置keepalived.conf
集群所有机器开启路由转发:
vim /etc/sysctl.conf:net.ipv4.ip_forward = 1
sysctl -p
在Realserver上设置网关:
/etc/sysconfig/network-scripts/ifcfg-eth0:
GATEWAY=192.168.56.254
RealServer的启动脚本:lvs_rs.sh
#!/bin/bash
#description: start realserver
VIP=10.0.0.227
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS ofRealServer"
/sbin/ifconfig lo:0$VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host$VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0down
/sbin/route del $VIP >/dev/null 2>&1
echo "close LVSDirectorserver"
echo "0"> /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0"> /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0"> /proc/sys/net/ipv4/conf/all/arp_ignore
;;
*)
echo "Usage: $0{start|stop}"
exit 1
esac
exit 0
启动:chmod +x lvs_rs.sh; lvs_rs.sh start
启动:分别在MASTER、BACKUP上执行service keepalived start启动keepalived就可实现负载均衡及高可用集群了
service keepalived start
查看lvs服务是否正常:#watch ipvsadm �Cln
日志:监听日志,查看状态,测试LVS负载均衡及高可用性是否有效
#tail �Cn 12 /var/log/message
VI. keepalived的配置
/etc/keepalived/keepalived.conf :
global_defs { ##全局配置部分
# notification_email { ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此 注释掉,并采用Nagios监视lvs运行情况
# }
# smtp_server smtp.exmail.qq.com
# smtp_connect_timeout 30
router_id LVS_MASTER ##设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 { ##设置vrrp组,唯一且同一LVS服务器组要相同
state MASTER ##备份LVS服务器设置为BACKUP
interface p5p1 ##设置对外服务的接口
virtual_router_id 51 ##设置虚拟路由标识
mcast_src_ip 192.168.56.1 #备机此处为192.168.56.101
priority 100 #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
advert_int 1 ##设置同步时间间隔
authentication { ##设置验证类型和密码,master和backup一定要设置一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ##设置VIP,可以多个,每个占一行
10.0.0.227
}
}
virtual_server 10.0.0.227 80 {
delay_loop 6 ##健康检查时间间隔,单位s
lb_algo wrr ##负载均衡调度算法设置为加权轮叫
lb_kind DR ##负载均衡转发规则
nat_mask 255.255.255.0 ##网络掩码,DR模式要保障真实服务器和lvs在同一网段
persistence_timeout 60 ##会话保持时间,单位s
protocol TCP ##协议
real_server 192.168.56.102 80 { ##真实服务器配置,80表示端口
weight 3 ##权重
TCP_CHECK { ##服务器检测方式设置
connect_timeout 5 ##连接超时时间
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.56.103 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
总结
LVS是软件型负载均衡集群构架方案中,抗负载能力强,工作于网络4层之上的软件,它仅做分发之用,没有流量的产生。通过其自身完备的双机热备方案,如本文的LVS+Keepalived,或者是LVS+Heartbeat,可以确保集群能够稳定的工作和执行。但LVS软件本身不支持正则处理,不能做动静分离,而基于Nginx/HAProxy+Keepalved的负载均衡方案可以满足以上条件,后续文章将介绍这两种方案的具体实施。
――RangoChen