Lvs+keepalived的高可用负载均衡群集
1 关键技术介绍
- 1 LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
LVS集群采用三层结构,三层主要组成部分为:
1 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
1 轮叫(Round Robin)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2 加权轮叫(Weighted Round Robin)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3 最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
4 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5 基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
7目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
8 源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
LVS有三种转发类型:
NAT模式 TUN模式 DR模式
对服务器
节点要求
服务节点可以是任何操作系统 必须支持IP隧道模式,目前只有Linux 服务节点支持虚拟网卡设备,能够禁用设备的ARP响应
网络要求
拥有私有IP地址的局域网络 拥有合法IP地址的局域网或广域网 拥有合法IP地址的局域网,服务节点与均衡器必须在同一个网段
通常支持节点数 支持10-20个服务节点,又均衡器的处理能力而定 较高,可以支持到100个服务节点 较高,可以支持到100个服务节点
网关 均衡器极为服务器节点网关 服务节点同自己的网关或者路由器连接,不经过均衡器 服务节点同自己的网关或者路由器连接,不经过均衡器
服务节点安全性 较好,采用内部IP,服务节点隐蔽 较差,采用公用IP地址,节点完全暴露 较差,采用公用IP地址,节点完全暴露
IP要求 仅需要一个合法IP地址作为VIP 除VIP外,每个服务节点需拥有合法IP地址,可以直接路由至客户端 除VIP外,每个服务节点需拥有合法的IP地址,可以直接路由至客户端
效率 一般 高 最高 - 2 KEEPALIVED
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
Keepalived的设计目标是构建可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双机热备。使用keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
系统总体部署设计
vmware虚拟出4台主机,LVS服务器两张网卡,一桥接模式,一张仅主机模式,两台服务器都为仅主机模式。
LVS_master的桥接网卡ip 为192.168.1.196,内网ip:10.0.0.49。
lvs-backup:外网192.168.1.197,内网为::10.0.0.52。
两台web服务器的ip为10.0.0.51,10.0.0.52.
虚拟IP为192.168.1.198,虚拟网关为10.0.0.100
系统版本:CentOS Linux release 7.3.1611 (Core)
拓扑图如下所示:
系统的实现
【1】安装ipvsadm和keepalived
在LVS_master和LVS_backup两台机器上安装ipvsadm和keepalived
注意:yum方式安装过程可能会因为进程号被占用而出现中断的问题。
解决:可开启两个终端,一个终端重新yum一次,另一个终端输入命令pgrep yum显示被中断的进程号,随即执行命令: kill -9 进程号 将进程杀死。
再yum clean all 清理掉yum缓存,接着 yum makecache 重新yum即可安装成功
【2】配置主从LVS服务器(所有机器开启转发、关闭内核安全)
a,开户路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
b,关闭SELinux内核安全(改完需重启服务器);
[root@localhost ~]# vi /etc/sysconfig/selinux
c,还原真实部署环境,开启iptables防火墙
添加规则链,开放80端口,配置目的地址转换
(让外网用户能够访问局域网内不同的服务器)
[root@localhost ~]# ./iptables-lvs-nat.sh
d,lvs_master keepalived配置文件
[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_MASTER
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.198
}
}
vrrp_instance LAN_GATEWAY {
state MASTER
interface ens37
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 111
}
virtual_ipaddress {
10.0.0.100
}
}
virtual_server 192.168.1.198 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
# persistence_timeout 50
protocol TCP
real_server 10.0.0.51 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.52 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
e,lvs_backup keepalived配置文件
[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_BACK
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.198
}
}
vrrp_instance LAN_GATEWAY {
state BACKUP
interface ens37
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 111
}
virtual_ipaddress {
10.0.0.100
}
}
virtual_server 192.168.1.198 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
# persistence_timeout 50
protocol TCP
real_server 10.0.0.51 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.52 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
f,在两台LVS上运行keepalived服务
g,两台WEB服务平台搭建
1.安装提供Apache服务的软件包httpd,简单修改配置文件,设置开机启动服务
2.将两台WEB服务器的网关设置成10.0.0.100.
3.默认网站根目录为/var/www/html, 编写简单的HTML文件区分web1、web2
4.在两台服务器定义arp-_gnore和arp_announce内核参数
使本地ip地址根据决策做出相应应答
【3】结果
a,从局域网中的一台机器ping VIP 192.168.1.198可以ping通
b,在LVS——master查看
在脚本调用配置文件
在列表中添加一条虚拟服务器、两条real server记录,指定服务端口为80
并且指定虚拟服务器的调度算法为论叫调度(rr)
c,ens33有VIP,ens37下有虚拟网关
d,在WEB1中ping 虚拟网关可以ping通
e,在LVS_master,使用curl验证
【4】热备验证
1,关闭LVS_master
2,在LVS_backup查看
VIP和虚拟网关自动绑定到LVS_backup上
调度规则也应用在了backup上
局域网上机器仍能正常访问
关闭web1中的web服务
[root@localhost ~]# systemctl stop httpd
集群中服务只剩下Web2了
开启Web1中的web服务
[root@localhost ~]# systemctl start httpd
集群中服务又恢复正常
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.198:80 rr
-> 10.0.0.51:80 Masq 1 0 0
-> 10.0.0.52:80 Masq 1 0 0