企业部分实战---LVS+Keepalived实现高可用负载均衡
- 一、Keepalived概述
- 二、LVS概述
- 三、LVS实现负载均衡
- 四、LVS+keepalived实现负载均衡健康监测
一、Keepalived概述
keepalived是一个类似于layer3,4,5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。Layer4主要以TCP端口的状态来决定服务器工作正常与否。
如webserver的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
二、LVS概述
LVS集群采用IP负载均衡技术,属于IP层的交换(L4)具有很好的吞吐率。调度器分析客户端到服务器的IP报头信息,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。主要包含四大部分:
负载调度器(loadbalancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。当客户请求到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;
服务器池(serverpool),是一组真正执行客户请求的服务器,执行的任务有WEB、MAIL、FTP和DNS等。服务器池的结点数目是可变的,当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载;
后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务;
Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统中每个结点的状况。
LVS+keepalived架构图
三、LVS实现负载均衡
实验环境:
#若在虚拟环境中需执行此步骤创建两个新的虚拟机,VMWARE可忽略此步骤
真实主机:
cd /var/lib/libvirt/images/
ls
qemu-img create -f qcow2 -b rhel7.6.qcow2 server3
qemu-img create -f qcow2 -b rhel7.6.qcow2 server4
实现步骤:
server1:
pcs cluster disable --all
pcs cluster stop --all
systemctl status pcsd
systemctl disable --now pcsd
ssh server2 systemctl disable --now pcsd
在server3和server4设置相同的配置
server3:
hostnamectl set-hostname server3
cd /etc/yum.repos.d/
vim dvd.repo
yum install httpd
systemctl enable --now httpd
systemctl start httpd
cd /var/www/html/
echo server3> index.html
ip addr add 172.25.12.100/24 dev eth0
yum install -y arptables
arptables -A INPUT -d 172.25.12.100 -j DROP
arptables -A OUTPUT -s 172.25.12.100 -j mangle --mangle-ip-s 172.25.12.3
server4:
hostnamectl set-hostname server4
cd /etc/yum.repos.d/
vim dvd.repo
yum install httpd
systemctl enable --now httpd
systemctl start httpd
cd /var/www/html/
echo server4> index.html
ip addr add 172.25.12.100/24 dev eth0
yum install -y arptables
arptables -A INPUT -d 172.25.12.100 -j DROP
arptables -A OUTPUT -s 172.25.12.100 -j mangle --mangle-ip-s 172.25.12.4
arptables-save > /etc/sysconfig/arptables #将策略保存到/etc/sysconfig/arptables文件中
server2:
curl server3
curl server4
yum install ipvsadm -y
ip addr add 172.25.12.100/24 dev eth0
ipvsadm -A -t 172.25.12.100:80 -s rr
ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g
ipvsadm -a -t 172.25.1.100:80 -r 172.25.12.4:80 -g
ipvsadm -ln
测试:
curl 172.25.12.100
负载均衡(轮询机制)实现
四、LVS+keepalived实现负载均衡健康监测
1.实验目的
上个实验中实现了负载均衡。本实验中我们将结合keepalived实现负载均衡高级群的健康监测,即在一真实主机的apache关闭后,主机可以监测到,并不再访问这台关闭apache的主机。
2.实验环境
五台虚拟机:westos1为主机,server1、server2为VS调度,server3、server4为RS真实主机。
3.实验步骤
1)环境搭建
server1、server2:
ipvsadm -C 清除IPVS中的IP,因为IPVS的配置会与keepalived冲突
ipvsadm -ln
ip addr del 172.25.12.100/24 dev eth0
yum install keepalived -y
vi /etc/keepalived/keepalived.conf 编写此文件相当于用配置文件的方式实现负载均衡
server1和server2配置文件基本相同
server1 keepalived.conf:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.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 eth0
virtual_router_id 121 #注意:此处的id最好不要重复
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.12.100
}
}
virtual_server 172.25.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.12.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.12.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重启服务进行测试:
systemctl restart keepalived.service
tail -f /var/log/messages
ipvsadm -ln 执行此命令后发现ip已配置完毕
2) 健康检测
RS真实主机健康检测,关闭server3的httpd服务 systemctl stop httpd
在真机中进行测试:
curl 172.25.12.100
发现主机已知晓3的服务关闭,并且主机策略已不存在server3,并发送邮件给了server1、server2
再开启server3中的httpd,并在主机中检测,发现已恢复正常
3)DS健康检测
关闭server1中的keepalived服务
[root@server1 ~]# systemctl stop keepalived.service
此时在server2中:
tail -f /var/log/messages
发现server2已接管server1
在主机中探测RS发现不收任何影响,即keepalived解决了DS的单点故障