一、高可用集群
Keepalived是一个用于实现Linux系统高可用性的软件,主要用于构建VRRP(Virtual Router Redundancy Protocol)虚拟路由器冗余协议和健康检查服务。Keepalived可以监控网络服务的运行状态,并在检测到故障时自动切换到备用服务器,以此来提供服务的连续性和高可用性。
在一个典型的Keepalived高可用集群中,通常会包含以下组件:
- Master节点:这是主服务器,负责提供主要的服务。它持有VIP(Virtual IP Address)并响应所有客户端请求。
- Backup节点:这是备用服务器,它监视Master节点的状态。如果Master节点发生故障,Backup节点会接管VIP,继续提供服务。
- VRRP协议:Keepalived通过VRRP协议来管理Master和Backup之间的角色切换。VRRP允许多个路由器使用一个IP地址作为默认网关,当Master路由器失效时,Backup路由器可以无缝地接管这个角色。
- 健康检查:Keepalived支持多种健康检查机制,包括但不限于HTTP、TCP、UDP等,用于监控服务是否正常运行。如果检测到服务不可用,Keepalived可以触发相应的动作,如重启服务或切换到Backup节点。
- 配置文件:Keepalived的配置文件通常位于/etc/keepalived/keepalived.conf,其中包含了VRRP实例的定义、健康检查的设置以及网络接口的配置等信息。
- 日志记录:Keepalived会记录它的活动和状态变化,这对于故障排查和维护是非常重要的
为了实现一个高可用的Keepalived集群,你需要在每个参与节点上安装Keepalived软件,配置相应的VRRP实例,设置健康检查策略,并确保网络通信正常。通常还需要配置防火墙规则以允许VRRP通告和其他必要的网络流量。
Keepalived不仅限于Web服务器,还可以用于数据库服务器、邮件服务器等各种关键业务系统的高可用性部署。它是一个非常灵活和强大的工具,可以根据具体需求进行定制化配置
1.集群类型
- LB:Load Balance 负载均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream)
- HA:High Availability 高可用集群 数据库、Redis
- SPoF: Single Point of Failure,解决单点故障
- HPC:High Performance Computing 高性能集群
2.系统可用性
SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能 等方面所达成的双方共同认可的协议或契约)
A = MTBF / (MTBF+MTTR)
99.95%:(60*24*30)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计
指标 :99.9%, 99.99%, 99.999%,99.9999%
3.系统故障 硬件故障
设计缺陷:wear out(损耗)、非人为不可抗拒因素
软件故障:设计缺陷 bug
4.实现高可用
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active HEARTBEAT active
5.VRRP
Virtual Router Redundancy Protocol 虚拟路由冗余协议,解决静态网关单点风险
物理层:路由器、三层交换机
软件层:keepalived
VRRP 相关术语
- 虚拟路由器:Virtual Router
- 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
- VIP:Virtual IP
- VMAC:Virutal MAC (00-00-5e-00-01-VRID)
- 物理路由器:
master:主设备
backup:备用设备
priority:优先级
二、Keepalived 的详细部署
在做keepalive实验的时候,我们需要做好一些环境准备,常见的环境部署如下,由于我用的是rhel7,所以selinux的关闭方式和企业9有所不同
需要做好的环境准备如下:
- 各节点时间必须同步:ntp, chrony
- 关闭防火墙及SELinux
- 各节点之间可通过主机名互相通信:非必须
- 建议使用/etc/hosts文件实现:非必须
- 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
实验准备
KA1:ip 172.25.254.10 主机名ka1.karl.org
KA2: ip 172.25.254.20 主机名ka2.karl.org
其中KA1和KA2的VIP通过keepalived配置文件获取,例如在抢占模式下,优先级高的获得VIP,当优先级高的主机宕机之后,KA2会接取VIP,当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 但其实这样会使vip在KA主机中来回漂移,造成网络抖动,建议设置成非抢占模式
VIP:172.25.254.100
Realserver1: ip 172.25.254.110 主机名 reserver1.karl.org
Realserver2:ip 172.25.254.120 主机名realserver2.karl.org
两台rs安装好http服务,并输入东西到默认发布目录
4 echo realserver1 - 172.25.254.110
5 echo realserver1 - 172.25.254.110 > /var/www/html/index.html
6 systemctl enable --now httpd.service
7 curl 172.25.254.110
8 curl 172.25.254.120
在ka1,ka2上安装keepalived服务:
yum install keepalived.x86_64 -y
由于两台ka之间是通过组播相互确认存活情况的,所以我们配置好keepalive配置文件进行tcpdump实验,其中vitual_ipaddress板块便是确定VIP具体的值
vim /etc/keepalived/keepalived.conf
.....
global_defs {
notification_email {
1487994142@qq.com
}
notification_email_from keepalived@karl.org
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka1.karl.org
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:1
}
}
此时ka1配置好之后,有一个小技巧,可以帮助我们节省重复配置ka2的时间:
cp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf
之后我们把ka2的vrrp_instance VI_1中的state 由MASTER 改成BACKUP,priority 改成 80即可,保存并重启keepalive
在ka1上使用ifconfig命令,可以查看到VIP
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.254.100 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:0c:29:98:63:e0 txqueuelen 1000 (Ethernet)