共计 12159 个字符,预计需要花费 31 分钟才能阅读完成。
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 –ln
日志:监听日志,查看状态,测试 LVS 负载均衡及高可用性是否有效
#tail –n 12 /var/log/message
Keepalived 的详细介绍:请点这里
Keepalived 的下载地址:请点这里
推荐阅读:
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
VI. keepalived 的配置
/etc/keepalived/keepalived.conf:
global_defs {## 全局配置部分
# notification_email {## 下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此 注释掉,并采用 Nagios 监视 lvs 运行情况
# admin@toxingwang.com
# }
# notification_email_frommaster@toxingwang.com
# 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 的负载均衡方案可以满足以上条件,后续文章将介绍这两种方案的具体实施。
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 –ln
日志:监听日志,查看状态,测试 LVS 负载均衡及高可用性是否有效
#tail –n 12 /var/log/message
Keepalived 的详细介绍:请点这里
Keepalived 的下载地址:请点这里
推荐阅读:
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm