Keepalive高可用集群的实验项目
1 keepalived 简介
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
官网:http://keepalived.org/
功能:
1.基于vrrp协议完成地址流动
2.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
3.为ipvs集群的各RS做健康状态检测
4.基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
1.核心架构组件
控制平面:
- VRRP Stack:实现VRRP协议(虚拟路由冗余协议)的核心组件
- Checkers:健康检查模块,监控后端服务状态
- SMTP通知:状态变更时的邮件通知机制
数据平面:
- IPVS (IP Virtual Server):Linux内核的L4负载均衡器
- Netlink接口:与内核通信,管理VIP和路由
2.核心配置文件
2.1 配置文件组成部分
配置文件:/etc/keepalived/keepalived.conf
配置文件组成
- GLOBAL CONFIGURATION
Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等 - VRRP CONFIGURATION
VRRP instance(s): 定义每个vrrp虚拟路由器 - LVS CONFIGURATION
Virtual server group(s)
Virtual server(s): LVS集群的VS和RS
2.2全局配置
! Configuration File for keepalivedglobal_defs {notification_email {timiniglee-zln@163.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个}notification_email_from keepalived@KA1.timinglee.org #发邮件的地址smtp_server 127.0.0.1 #邮件服务器地址smtp_connect_timeout 30 #邮件服务器连接timeoutrouter_id KA1.timinglee.org #每个keepalived主机唯一标识#建议使用当前主机名,但多节点重名不影响vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能#启用此配置后,如果收到的通告报文和上一个报文是同一#个路由器,则跳过检查,默认值为全检查vrrp_strict #严格遵循vrrp协议#启用此项后以下状况将无法启动服务:#1.无VIP地址#2.配置了单播邻居#3.在VRRP版本2中有IPv6地址#建议不加此项配置vrrp_garp_interval 1 #免费 ARP(Gratuitous ARP)报文时间间隔#免费 ARP用于通知网络中其他设备,某 IP地址对应的 MAC 地址发生了变化#帮助网络设备更新 ARP 缓存,确保数据能正确转发到新的主节点vrrp_gna_interval 1 #用于配置发送 Gratuitous NA(免费邻居通告)报文的时间间隔#通知网络中其他设备,某 IPv6 地址对应的链路层地址(MAC 地址)发生了变化#帮助网络设备更新邻居缓存(NeighborCache)#确保 IPv6 数据包能正确转发到新的主节点vrrp_mcast_group4 224.0.0.44 #指定组播IP地址范围:}
2.3配置虚拟路由器
vrrp_instance VI_1 {state MASTERinterface eth0 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一个网卡virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一#否则服务无法启动#同属一个虚拟路由器的多个keepalived节点必须相同#务必要确认在同一网络中此值必须唯一priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254#值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #vrrp通告的时间间隔,默认1sauthentication { #认证机制auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)uth_pass 1111 #预共享密钥,仅前8位有效#同一个虚拟路由器的多个keepalived节点必须一样}virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>172.25.254.100 #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32172.25.254.101/24 dev eth1172.25.254.102/24 dev eth2 label eth2:1}accept #开启vip 对外响应ping包,注意此处功能需要关闭vrrp_strict#默认使用nftab策略禁用ping包响应,nft list ruleset 显示策略中即可看到}
2.4启用keepalived日志功能
2.5 启用子配置文件
在全局配置下添加include语句,指定子配置文件路径
3 实现master/slave的 Keepalived 单主架构
3.1配置主从机器的虚拟路由设置
主机配置
从机配置
配置后端两台服务配置,主从keepalive配置是一样的
配置完成后效果
当MASTER主机宕机时,BACKUP机会抢占VIP晋升为MASTER机不会中断服务。当设置成非抢占模式时,两台都必须为BACKUP机。
4.VIP单播设置
将keepalived中的组播设置注释,添加单播配置。
测试单薄是否连通
5.实现 master/master 的 Keepalived 双主架构
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。
master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率
另一台的配置
实现了master/master配置,提高了资源利用率
6.配置虚拟服务(并完善双主配置)
6.1 后端web服务
配置MASTER服务,BACKUP配置与其一模一样。
因为我们负载均衡模式用的是直连路由模式,我们要将两台realserver的arp禁用
给两台后端server添加上vip
查看keepalived MASTER的ipvsadm配置
测试http服务的可用性。
6.2 双主机数据库服务
keepalived相关配置,主从机配置都一样。重启服务。
配置完成后查看轮询规则
务器,开启mariadb服务,并修改对应的id来区别访问的不同后端。
给后端服务添加上对应的vip
测试服务时候部署成功
7. 实现其它应用的高可用性 VRRP Script
keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能
7.1 编写vrrp脚本
编写相关脚本,使当haproxy服务在运行时,keepalived1为主机,当服务关闭时,实现主机从keepalived1变到keepalived2
脚本内容
脚本作用:当haproxy运行时运行脚本状态为0 ,当服务关闭时运行脚本状态为1
7.2编辑keepalive设置
7.3测试结果
抢占vip
当MASTER机的haproxy服务坏掉时,会自动减少优先级,将MASTER机临时变为另一台保证服务的可用性