LVS+KeepAlived高可用部署实战

1. 构建高可用集群

1.1 什么是高可用集群

高可用集群(High Availability Cluster,简称HA Cluster),是指以缩小服务中断工夫为目标得服务器集群技术。它通过爱护用户得业务程序对外部间断提供的服务,把因为软件,硬件,认为造成的故障对业务得影响升高到最小水平。总而言之就是保障公司业务7*24小时不宕机

1.2 高可用衡量标准

掂量集群的可用性(HA)高下,能够从MTTF(均匀无故障工夫)和MTTR(均匀故障培修工夫)进行考量,公式为:HA=MTTF/(MTTF+MTTR)*100%,具体衡量标准能够参考下表

根本可用性2个999%年度宕机工夫:87.6小时
较高可用性3个999.9%年度宕机工夫:8.8小时
具备故障主动复原4个999.99%年度宕机工夫:53分钟
极高可用性5个999.999%年度宕机工夫:5分钟
1.3 高可用保障

对集群中的服务器进行负载平衡、衰弱监测,并在服务器呈现故障时能进行故障转移,主动切换到失常服务器是高可用保障的必要伎俩。

1.3.1 负载平衡

常见的负载平衡伎俩如下:

硬件负载平衡,如F5

软件负载平衡,如nginx、haproxy、lvs

几种软件负载平衡技术比拟

技术长处毛病
nginx能够针对http利用做一些分流的策略; 对网络稳定性的依赖十分小 装置和配置简略,测试不便 能撑持几万的并发量 可作为动态网页和图片服务器仅反对http、https和Email协定 只反对通过端口进行衰弱检测
haproxy反对通过URL进行衰弱检测 单纯做负载平衡,效率高于nginx 反对TCP的负载平衡,能够对mysql集群负载不反对POP/SMTP协定 不反对HTTP cache性能 多过程模式反对不够好 重载配置须要重启过程
lvs抗负载能力强,工作在网络4层,性能最好 配置性比拟低 工作稳固 只散发申请,无流量产生,保障IO性能 利用范畴比拟广不反对正则表达式解决 不能做动静拆散 大型网站施行简单 没有专门用于windows的版本
1.3.2 衰弱监测和主动切换

常见的衰弱监测和主动切换软件有keepAlived和heartBeat,其二者比照如下:

Keepalived应用更简略:从装置、配置、应用、保护等角度上比照,Keepalived都比Heartbeat要简略

Heartbeat性能更弱小:Heartbeat尽管简单,但性能更弱小,配套工具更全,适宜做大型集群治理,而Keepalived次要用于集群倒换,根本没有治理性能

1.4 高可用拓扑图

2. 软件负载平衡技术LVS

2.1 LVS简介
2.1.1 什么是lvs

LVS是Linux Virtual Server的简写,在1998年5月由章文嵩博士成立。

工作在OSI模型的四层,基于IP进行负载平衡。

在linux2.2内核时,IPVS就曾经以内核补丁的模式呈现。

从2.4版本当前,IPVS曾经成为linux官网规范内核的一部分。

2.1.2 lvs官网材料链接

a. lvs我的项目介绍 http://www.linuxvirtualserver...

b. lvs集群的体系结构 http://www.linuxvirtualserver...

c. lvs集群中的IP负载平衡技术 http://www.linuxvirtualserver...

d. lvs集群的负载调度 http://www.linuxvirtualserver...

e. lvs中文站点 http://zh.linuxvirtualserver.org

2.2 lvs拓扑
2.2.1 lvs术语

LVS服务器(DS)

集群中节点服务器(RS)

虚构IP地址(VIP),用于向客户端提供服务的IP地址(配置于负载均衡器上)

实在服务器的IP地址(RIP), 集群中节点服务器的IP地址

负载均衡器IP地址(DIP),负载均衡器的IP地址,物理网卡上的IP

客户端主机IP地址(CIP),终端申请用户的主机IP地址

2.2.2 工作原理和拓扑图

LVS负载平衡调度技术是在linux内核中实现的,应用配置LVS时,不是间接配置内核中的IPVS,而是通过IPVS的管理工具IPVSADM来治理配置,LVS集群负载均衡器承受所有入站客户端的申请,并依据算法来决定由哪个集群的节点来解决申请。

2.3 lvs的三种工作模式
2.3.1 NAT模式

NAT(Network Address Translation)模式是基于NAT技术实现的。在此模式中,LVS服务器既要解决申请的接入,又要解决申请的响应。因而存在较大的性能瓶颈。

2.3.2 DR模式

DR(Direct Routing)模式是LVS的默认工作模式,也叫间接路由模式。只解决申请的接入,不解决申请的响应。因而性能高,瓶颈小。

2.3.3 TUN模式

TUN(Tunneling)模式须要服务器反对IP隧道(IP tunneling,是路由器把一种网络层协定封装到另一个协定中以跨过网络传送到另一个路由器的处理过程)技术,限度较大,个别不必。

2.4 LVS调度算法
2.4.1 动态调度算法
调度算法说 明
RRroundrobin轮询调度
WRRWeighted RR加权轮询调度
SHSoure Hashing源地址哈希调度
DHDestination Hashing指标地址哈希调度
2.4.2 动静调度算法
调度算法说 明
LCLeast Connections最小连接数调度
WLCWeighted LC加权最小连接数调度 *(默认
SEDShortest Expection Delay初始连贯高权重优先
NQNerver Queue 第一轮平均分配,后续SED
LBLCLocality-Based LC 动静的DH算法
LBLCRLBLC with Replication 带复制性能的LBLC
FOWeighted Fail Over,linux内核4.15后新增的调度算法
OVFOverflow-connection,linux内核4.15后新增的调度算法

2.5 lvs根本命令
对于lvs的操作,次要是通过ipvsadm软件实现,罕用的lvs操作命令如下:
2.5.1 集群服务治理
命令说 明
ipvsadm -A -t IP -s 调度算法此命令用来增加一个lvs策略,IP指VIP,调度算法是12种调度算法的一种
ipvsadm -C此命令用来革除一个lvs策略
ipvsadm -S此命令用来保留一个lvs策略
ipvsadm -R此命令用来加载一个lvs策略
ipvsadm -L此命令用来查看策略
2.5.2 集群RS治理
命令说 明
ipvsadm -a -t IP1 -r IP2 -m\g\i增加一台RS,IP1指VIP,IP2指RIP,-m\g\i中m是NAT,g是DR,
ipvsadm -d -t IP1 -r IP2此命令用来删除一台RS,IP1指VIP,IP2指RIP
2.6 lvs实战
2.6.1 NAT模式实战

NAT实战拓扑图

NAT模式实现

依照下面的拓扑图,进行NAT实战,步骤如下:

A. 筹备4台linux虚拟机,并确定每台虚拟机的角色,为了不便辨别,能够对每台虚拟机设置新的主机名,比方 LVS服务器能够设置主机名为lvs,设置形式如下

#设置主机名hostnamectl set-hostname lvs#断开近程连贯logout#从新连贯即可看到主机名曾经更改

而后对四台虚拟机别离进行配置如下:

RS1和RS2配置

1) 配置网卡为NAT模式

2) 下载安装httpd服务,命令如下

yum install -y httpd

3) 设置首页内容(RS2把内容改为this is RS2)

echo this is RS01 > /var/www/html/index.html

4) 启动httpd

systemctl start httpd

5) 在RS1和RS2上测试拜访,能输入 this is RS01或this is RS02即为胜利

[root@rs01 ~]# curl localhostthis is RS01

6) RS1设置动态IP为192.168.116.131,RS2设置动态IP为192.168.116.132。

RS1和RS2指定网关为192.168.116.130,子网掩码255.255.255.0

7) 查看网关是否失效

[root@rs01 html]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         192.168.116.130 0.0.0.0         UG    100    0        0 ens33192.168.116.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

LVS服务器配置

1) 装置ipvsadm

yum install -y ipvsadm

2) 设置双网卡

仅主机网卡一块,IP配置为192.168.5.131,此IP是承受内部申请的VIP

NAT网卡一块,IP配置为192.168.116.130,此IP是与后端RS服务器通信的DIP

3) 配置ip_forward转发

vi /etc/sysctl.conf#增加如下内容并保留退出net.ipv4.ip_forward = 1#执行如下命令使批改失效sysctl -p

4) 应用ipvsadm进行负载平衡配置

#指定负载80端口的VIP,并指定调度策略为轮询[root@lvs01 ~]# ipvsadm -A -t 192.168.5.131:80 -s rr#增加两台RS,并指定负载平衡工作模式为NAT[root@lvs01 ~]# ipvsadm -a -t 192.168.5.131:80 -r 192.168.116.131 -m[root@lvs01 ~]# ipvsadm -a -t 192.168.5.131:80 -r 192.168.116.132 -m#查看上述配置是否失效[root@lvs01 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.5.131:80 rr  -> 192.168.116.131:80           Masq    1      0          0           -> 192.168.116.132:80           Masq    1      0          0 

client虚拟机配置和测试

配置网卡为仅主机模式,IP为192.168.5.130,网关无需配置即可。

在client上测试负载平衡成果,如下:

[root@client ~]# curl 192.168.5.131this is RS02[root@client ~]# curl 192.168.5.131this is RS01[root@client ~]# curl 192.168.5.131this is RS02[root@client ~]# curl 192.168.5.131this is RS01
NAT模式存在的问题-->LVS性能瓶颈
2.6.2 DR模式实战
小贴士: ARP(Address Resolution Protocol)地址解析协定,是依据IP地址获取物理地址(MAC)的一个 TCP/IP协定。主机发送信息时将蕴含指标IP地址的ARP申请播送到局域网络上的所有主机,并接管返 回音讯,以此确定指标的物理地址;收到返回音讯后将该IP地址和物理地址存入本机ARP缓存中并 保留肯定工夫,下次申请时间接查问ARP缓存以节约资源。

DR模式拓扑图

DR模式实现

通过比照NAT模式和DR模式的拓扑图能够发现,须要让LVS和RS在同一个网段,并且在两个RS服务器上也须要绑定VIP。所以DR模式试验能够在方才的根底上进行,步骤如下:

1) 在RS1和RS2上进行如下ARP克制操作,并配置VIP到lo网卡上,如下:

#arp克制echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce#配置VIP到lo网卡  这里的子网掩码须要4个255[root@rs01 html]# ifconfig lo:9 192.168.116.134 netmask 255.255.255.255[root@rs01 html]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.131  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:20:b6:01  txqueuelen 1000  (Ethernet)        RX packets 1262  bytes 105801 (103.3 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 582  bytes 70559 (68.9 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 50  bytes 5310 (5.1 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 50  bytes 5310 (5.1 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo:9: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 192.168.116.134  netmask 255.255.255.255        loop  txqueuelen 1000  (Local Loopback)
留神:RS1和RS2在之前进行NAT模式试验时设置了网关为LVS的DIP,这里进行DR试验时须要把网关删除

2) 在LVS服务器上敞开之前的ens37网卡(留神:你的网卡名称可能不是这个)

ifdown ens37ifconfig ens37 down

3) 在lvs的ens33网卡上绑定VIP192.168.116.134

[root@lvs01 ~]# ifconfig ens33:9 192.168.116.134/24[root@lvs01 ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.130  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::3264:bc00:653f:77b2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)        RX packets 717  bytes 62082 (60.6 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 244  bytes 37732 (36.8 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.134  netmask 255.255.255.0  broadcast 192.168.116.255        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 0  bytes 0 (0.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 0  bytes 0 (0.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4) 在lvs服务器上清空LVS策略,并从新设置DR模式策略

#查看策略[root@lvs01 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.5.131:80 rr  -> 192.168.116.131:80           Masq    1      0          0           -> 192.168.116.132:80           Masq    1      0          0         #清空策略[root@lvs01 ~]# ipvsadm -C#再次查看策略[root@lvs01 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

设置DR策略

#设置规定[root@lvs01 ~]# ipvsadm -A -t 192.168.116.134:80 -s rr#增加RS[root@lvs01 ~]# ipvsadm -a -t 192.168.116.134:80 -r 192.168.116.131 -g[root@lvs01 ~]# ipvsadm -a -t 192.168.116.134:80 -r 192.168.116.132 -g#查看策略[root@lvs01 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.116.134:80 rr  -> 192.168.116.131:80           Route   1      0          0           -> 192.168.116.132:80           Route   1      0          0

5) 批改client服务器配置,更改应用NAT网卡,并设置IP为192.168.116.133

6) 在client测试成果

[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01

7) 在LVS服务器上查看调度状况

[root@lvs01 ~]# ipvsadm -LncIPVS connection entriespro expire state       source             virtual            destinationTCP 01:30  FIN_WAIT    192.168.116.133:45810 192.168.116.134:80 192.168.116.131:80TCP 01:31  FIN_WAIT    192.168.116.133:45812 192.168.116.134:80 192.168.116.132:80TCP 01:32  FIN_WAIT    192.168.116.133:45814 192.168.116.134:80 192.168.116.131:80TCP 01:30  FIN_WAIT    192.168.116.133:45808 192.168.116.134:80 192.168.116.132:80
2.6.3 四个问题

a. 如果后端某台RS服务器挂了会呈现什么问题?

b.如果LVS服务器挂了会呈现什么问题?

` c. 如何获知RS服务器状态?

d. 如何进行故障转移、主动切换?

3. KeepAlived

3.1 keepAlived简介

Keepalived的作用是检测服务器状态,如果有一台web服务器宕机,或工作呈现故障,Keepalived将检测到,并将有故障的服务器从零碎中剔除,同时应用其余服务器代替该服务器的工作,当服务器工作失常后Keepalived主动将服务器退出到服务器群中。

3.2 keepAlived次要特点
3.2.1 健康检查
查看形式说 明
tcp_check工作在第4层,keepalived向后端服务器发动一个tcp连贯申请,如果后端服务器没有响应或超时,那么这个后端将从服务器池中移除
http_get工作在第5层,向指定的URL执行http申请,将失去的后果用md5加密并与指定的md5值比拟看是否匹配,不匹配则从服务器池中移除;此外还能够指定http返回码来判断检测是否胜利。HTTP_GET能够指定多个URL用于检测,这个一台服务器有多个虚拟主机的状况下比拟好用。
misc_check用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内
ssl_get和http_get类似,不同的只是用SSL连贯
smtp_check次要用于邮件系统SMTP协定的检测
3.2.2 故障迁徙

VRRP协定

在事实的网络环境中。主机之间的通信都是通过配置动态路由或者(默认网关)来实现的,而主机之间的路由器一旦产生故障,通信就会生效,因而这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协定。

VRRP协定是一种容错的主备模式的协定,保障当主机的下一跳路由呈现故障时,由另一台路由器来代替呈现故障的路由器进行工作,通过VRRP能够在网络产生故障时通明的进行设施切换而不影响主机之间的数据通信

故障迁徙原理

在 Keepalived 服务失常工作时,主 Master 节点会一直地向备节点发送(多播的形式)心跳音讯,用以通知备 Backup 节点本人还活着,当主 Master 节点产生故障时,就无奈发送心跳音讯,备节点也就因而无奈持续检测到来自主 Master 节点的心跳了,于是调用本身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点复原时,备 Backup 节点又会开释主节点故障时本身接管的 IP 资源及服务,复原到原来的备用角色。

3.3 keepAlived原理

Keepalived工作在TCP/IP参考模型的三层、四层、五层,其原理如下:

工作层说 明
网络层Keepalived通过ICMP协定向服务器集群中的每一个节点发送一个ICMP数据包(有点相似与Ping的性能),如果某个节点没有返回响应数据包,那么认为该节点产生了故障,Keepalived将报告这个节点生效,并从服务器集群中剔除故障节点。
传输层Keepalived在传输层里利用了TCP协定的端口连贯和扫描技术来判断集群节点的端口是否失常。 比方对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口产生异样,而后强制将这些端口所对应的节点从服务器集群中剔除掉。
利用 层Keepalived的运行形式更加全面化和复杂化,用户能够通过自定义Keepalived工作形式。 例如:能够通过编写程序或者脚本来运行Keepalived,而Keepalived将依据用户的设定参数检测各种程序或者服务是否失常,如果Keepalived的检测后果和用户设定的不统一时,Keepalived将把对应的服务器从服务器集群中剔除。

3.4 分布式选主策略
3.4.1 仅设置priority

在一个一主多备的Keepalived集群中,priority值最大的将成为集群中的MASTER节点,而其余都是BACKUP节点。在MASTER节点产生故障后,BACKUP节点之间将进行“民主选举”,通过对节点优先级值priority和weight的计算,选出新的MASTER节点接管集群服务。

3.4.2 设置priority和weight

weight值为负数时

在vrrp_script中指定的脚本如果检测胜利,那么MASTER节点的权值将是weight值与priority值之和;如果脚本检测生效,那么MASTER节点的权值放弃为priority值

MASTER 节点vrrp_script脚本检测失败时,如果MASTER节点priority值小于BACKUP节点weight值与priority值之和,将产生主、备切换。

MASTER节点vrrp_script脚本检测胜利时,如果MASTER节点weight值与priority值之和大于BACKUP节点weight值与priority值之和,主节点仍然为主节点,不产生切换。

weight值为正数时

在vrrp_script中指定的脚本如果检测胜利,那么MASTER节点的权值仍为priority值,当脚本检测失败时,MASTER节点的权值将是priority值与weight值之差

MASTER节点vrrp_script脚本检测失败时,如果MASTER节点priority值与weight值之差小于BACKUP节点priority值,将产生主、备切换。

MASTER节点vrrp_scrip脚本检测胜利时,如果MASTER节点priority值大于BACKUP节点priority值时,主节点仍然为主节点,不产生切换。

weight设置规范

对于weight值的设置,有一个简略的规范,即weight值的绝对值要大于MASTER和BACKUP节点priority值之差。由此可见,对于weight值的设置要十分审慎,如果设置不好,主节点产生故障时将导致集群角色选举失败,使集群陷于瘫痪状态。

4. LVS+keepAlived实战

4.1 实战拓扑

为了测试lvs的高可用,这里须要减少一台lvs服务器,需在此服务器上安装ipvsadm。
4.2 keepAlived装置和配置
4.2.1 装置keepAlived

在两台lvs服务器上都须要装置keepAlived,装置命令如下:

yum install -y keepalived

keepAlived装置实现后,在/etc/keepalived目录下有一个keepalived.conf配置文件,内容如下:

! Configuration File for keepalivedglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL   vrrp_skip_check_adv_addr   vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}#下面的配置无需关注,重点关注和批改上面的配置vrrp_instance VI_1 {    state MASTER#标识以后lvs是主,依据理论lvs服务器布局确定,可选值MASTER和BACKUP    interface eth0#lvs服务器提供服务器的网卡,依据理论服务器网卡进行批改    virtual_router_id 51#lvs提供的服务所属ID,目前无需批改    priority 100#lvs服务器的优先级,主服务器最高,备份服务器要低于主服务器    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    #virtual_ipaddress用于配置VIP和LVS服务器的网卡绑定关系,个别须要批改    #示例: 192.168.116.134/24 dev ens33 label ens33:9    virtual_ipaddress {        192.168.200.16        192.168.200.17        192.168.200.18    }}#配置lvs服务策略,相当于ipvsadm -A -t 192.168.116.134:80 -s rr,个别须要批改virtual_server 192.168.200.100 443 {    delay_loop 6    lb_algo rr#配置lvs调度算法,默认轮询    lb_kind NAT#配置lvs工作模式,能够改为DR    persistence_timeout 50#用于指定同一个client在多久内,只去申请第一次提供服务的RS,为查看轮询效                               果,这里须要改为0    protocol TCP#TCP协定    #配置RS信息,相当于ipvsadm -a -t 192.168.116.134:80 -r 192.168.116.131 -g    real_server 192.168.201.100 443 {        weight 1#以后RS的权重        SSL_GET {#SSL_GET健康检查,个别改为HTTP_GET            #两个url能够删除一个,url内的内容改为path /和status_code 200,digest删除            url {              path /              digest ff20ad2481f97b1754ef3e12ecd3a9cc            }            url {              path /mrtg/              digest 9b3a0c85a887a256d6939da88aabd8cd            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}#上面的配置理论是两组lvs服务的配置,含意和下面的lvs服务配置统一。如果用不到,上面的配置能够全副删除virtual_server 10.10.10.2 1358 {    delay_loop 6    lb_algo rr     lb_kind NAT    persistence_timeout 50    protocol TCP    sorry_server 192.168.200.200 1358    real_server 192.168.200.2 1358 {        weight 1        HTTP_GET {            url {               path /testurl/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl2/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl3/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 192.168.200.3 1358 {        weight 1        HTTP_GET {            url {               path /testurl/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334c            }            url {               path /testurl2/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334c            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}virtual_server 10.10.10.3 1358 {    delay_loop 3    lb_algo rr     lb_kind NAT    persistence_timeout 50    protocol TCP    real_server 192.168.200.4 1358 {        weight 1        HTTP_GET {            url {               path /testurl/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl2/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl3/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 192.168.200.5 1358 {        weight 1        HTTP_GET {            url {               path /testurl/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl2/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            url {               path /testurl3/test.jsp              digest 640205b7b0fc66c1ea91c463fac6334d            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}
4.2.2 配置keepAlived

基于上述配置文件和实战拓扑图及服务器布局,对两台lvs服务器别离批改keepalived.conf配置如下:

lvs主服务器

! Configuration File for keepalivedglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL   vrrp_skip_check_adv_addr   #vrrp_strict   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.116.134/24 dev ens33 label ens33:9    }}virtual_server 192.168.116.134 80 {    delay_loop 6    lb_algo rr    lb_kind DR    persistence_timeout 0    protocol TCP    real_server 192.168.116.131 80 {        weight 1        HTTP_GET {            url {              path /              status 200             }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 192.168.116.132 80 {        weight 1        HTTP_GET {            url {              path /              status 200             }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}

lvs备份服务器

! Configuration File for keepalivedglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL   vrrp_skip_check_adv_addr   #vrrp_strict   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.116.134/24 dev ens33 label ens33:9    }}virtual_server 192.168.116.134 80 {    delay_loop 6    lb_algo rr    lb_kind DR    persistence_timeout 0    protocol TCP    real_server 192.168.116.131 80 {        weight 1        HTTP_GET {            url {              path /              status 200             }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 192.168.116.132 80 {        weight 1        HTTP_GET {            url {              path /              status 200             }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}
留神:配置文件中的key和大括号之间肯定要有空格
4.2.3 启动keepAlived

在两台lvs服务器上别离启动keepAlived,命令如下:

service keepalived start
4.3 高可用测试
4.3.1 测试环境查看

上述步骤执行结束后,能够在lvs主服务器和备份服务器别离执行ifconfig命令,能够查看到VIP被绑定到了主服务器,如下:

[root@lvs01 ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.130  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::3264:bc00:653f:77b2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)        RX packets 1574  bytes 135506 (132.3 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 840  bytes 96383 (94.1 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.134  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 0  bytes 0 (0.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 0  bytes 0 (0.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这样,就能够在客户端申请VIP192.168.116.134来进行测试。

4.3.2 测试负载平衡

在客户端发动申请,测试负载平衡,如下:

[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01
4.3.3 测试RS高可用

敞开一台RS后(这里能够应用ifconfig 网卡名 down命令临时敞开网卡),客户端持续发动申请,查看是否能够失常拜访,如下:

[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134

会发现,此时客户端能够失常拜访,但只有RS2在提供服务。这阐明,keepAlived检测到了RS1服务器异样,将其剔除了。

此时再启动RS1服务器,客户端持续拜访,会发现响应后果如下,keepAlived检测到RS1服务器恢复正常,又将其退出服务列表了。

[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02
4.3.4 测试LVS高可用

这里次要进行两个测试:

测试lvs主服务宕机

应用ifconfig 网卡名 down命令,敞开主服务器网卡,此时主服务器不能提供服务。察看备份服务器是否将VIP绑定到本人,以及客户端是否能够持续失常拜访。如下:

敞开主服务器网卡

[root@lvs01 keepalived]# ifconfig ens33 down

察看备份服务器,会发现VIP曾经绑定过去了。这里理论是keepAlived检测到了主服务器的异样,而做出的故障转移和主动切换。

[root@lvs02 ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.135  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::3264:bc00:653f:77b2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:3a:95:05  txqueuelen 1000  (Ethernet)        RX packets 1891  bytes 167840 (163.9 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 830  bytes 77459 (75.6 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.134  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:50:56:3a:95:05  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 6  bytes 528 (528.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 6  bytes 528 (528.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

察看客户端是否能够持续失常拜访

[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02[root@client ~]# curl 192.168.116.134this is RS01[root@client ~]# curl 192.168.116.134this is RS02

测试lvs主服务器复原

上述测试通过后,能够开启主服务器网卡,让其可能提供服务,而后察看VIP是否会回到主服务器。

开启主服务器网卡

ifconfig ens33 up

查看主服务器和备份服务器

主服务器

[root@lvs01 ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.130  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::3264:bc00:653f:77b2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)        RX packets 2323  bytes 219033 (213.8 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1953  bytes 189317 (184.8 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.134  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:50:56:38:1d:eb  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 7  bytes 616 (616.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 7  bytes 616 (616.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

备份服务器

[root@lvs02 ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.116.135  netmask 255.255.255.0  broadcast 192.168.116.255        inet6 fe80::3264:bc00:653f:77b2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::cc13:177d:ec0:60d2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b105:ad45:a07e:f946  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:3a:95:05  txqueuelen 1000  (Ethernet)        RX packets 2182  bytes 197998 (193.3 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1117  bytes 100885 (98.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 6  bytes 528 (528.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 6  bytes 528 (528.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

会发现,VIP从新绑定到了主服务器。

本文由传智教育博学谷 - 狂野架构师教研团队公布,转载请注明出处!

如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源