超详细!一文带你了解高可用集群KEEPALIVED!

Keepalived 是一款基于 VRRP 协议的高可用性解决方案,主要用于解决单点故障问题,提高系统可用性。它通过将多个服务器组成一个集群,并使用虚拟 IP 地址进行访问,从而实现服务的高可用性。

一、高可用集群

1.1 集群类型

  • LB (负载均衡): 通过分配请求到多个服务器,提高系统性能和可用性。
  • HA (高可用性): 通过冗余机制,确保系统在发生故障时仍能正常提供服务。
  • HPC (高性能计算): 通过将多个计算节点连接在一起,提高计算能力。

1.2 系统可用性

  • SLA (服务等级协议): 定义服务质量和性能指标。
  • A (可用性): 系统正常运行时间与总运行时间的比率。
  • MTBF (平均故障间隔时间): 系统发生故障的平均间隔时间。
  • MTTR (平均修复时间): 系统从发生故障到恢复正常运行的平均时间。

1.3 系统故障

  • 硬件故障: 设计缺陷、损耗、自然灾害等。
  • 软件故障: 设计缺陷、bug 等。

1.4 实现高可用

  • 冗余机制: 建立多个服务器,互为备份。
  • 主/备模式: 一台服务器为主,其他服务器为备。
  • 双主模式: 两台服务器同时提供服务,互为备份。

1.5 VRRP

  • 虚拟路由冗余协议: 解决静态网关单点风险。
  • 工作方式: 抢占式、非抢占式。
  • 安全认证: 无认证、简单字符认证、MD5。
  • 工作模式: 主/备、主/主。

二、Keepalived 部署

2.1 简介

  • Keepalived 是 VRRP 协议的软件实现。
  • 功能: 地址流动、IPVS 规则生成、RS 健康状态检测、脚本调用。

2.2 架构

  • 用户空间核心组件: VRRP stack、checkers、system call、SMTP、IPVS wrapper、Netlink Reflector、WatchDog。
  • 控制组件: 解析 keepalived.conf 配置文件。
  • IO 复用器: 网络优化。
  • 内存管理组件: 内存管理功能。

2.3 环境准备

实验环境
主机名IPVIP角色
KA1172.25.254.10172.25.254.100主节点(MASTER)
KA2172.25.254.20172.25.254.100备份节点(BACKUP)
realserver1172.25.254.110172.25.254.100真实服务器
realserver2172.25.254.120172.25.254.100真实服务器
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# systemctl enable --now httpd

[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# systemctl enable --now httpd

  • 各节点时间同步。
  • 关闭防火墙和 SELinux。

  • 主机名通信。
  • root 用户 SSH 互信。

2.4 相关文件

  • 软件包名: keepalived
  • 主程序文件: /usr/sbin/keepalived
  • 主配置文件: /etc/keepalived/keepalived.conf
  • 配置文件示例: /usr/share/doc/keepalived/
  • Unit File: /lib/systemd/system/keepalived.service
  • Unit File 的环境配置文件: /etc/sysconfig/keepalived

2.5 安装

在ka1和ka2中安装

[root@ka1 ~]# yum install keepalived -y
[root@ka1 ~]# systemctl enable --now keepalived.service
[root@ka1 ~]# systemctl start keepalived

[root@ka2 ~]# yum install keepalived -y
[root@ka2 ~]# systemctl enable --now keepalived.service
[root@ka2 ~]# systemctl start keepalived

2.6 配置说明

2.6.1 配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件组成:

  • Global definitions: 全局定义,如邮件配置、router_id、VRRP 配置、多播地址等。
  • VRRP instance(s): 定义每个 VRRP 虚拟路由器。
  • LVS CONFIGURATION: 定义 LVS 集群的 VS 和 RS。

2.6.2 配置语法说明

  • 使用 man keepalived.conf 查看帮助文档。
  • 使用 systemctl restart keepalived 重启服务使新配置生效。

2.6.2.1 全局配置

  • notification_email: 故障切换时发送邮件的目标邮箱。
  • notification_email_from: 发送邮件的地址。
  • smtp_server: 邮件服务器地址。
  • smtp_connect_timeout: 邮件服务器连接超时时间。
  • router_id: Keepalived 主机的唯一标识。
  • vrrp_skip_check_adv_addr: 跳过检查重复通告报文。
  • vrrp_strict: 严格遵循 VRRP 协议。
  • vrrp_garp_interval: 报文发送延迟。
  • vrrp_gna_interval: 消息发送延迟。
  • vrrp_mcast_group4: 组播 IP 地址范围。

2.6.2.2 配置虚拟路由器

  • state: 主机状态,MASTER 或 BACKUP。
  • interface: 物理接口。
  • virtual_router_id: 虚拟路由器标识。
  • priority: 优先级。
  • advert_int: VRRP 通告时间间隔。
  • authentication: 认证机制。
  • virtual_ipaddress: 虚拟 IP 地址。

测试
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

2.6.2.3 虚拟路由的通讯设定

测试

2.6.2.4 启用 Keepalived 日志功能,日志分离

  • 修改 /etc/rsyslog.conf 文件,添加日志记录规则。
  • 重启 Keepalived 和 rsyslog 服务。
[root@ka1 ~]# vim /etc/sysconfig/keepalived
[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# vim /etc/rsyslog.conf
[root@ka1 ~]# systemctl restart rsyslog.service

查看日志

[root@ka1 ~]# cat /var/log/keepalived.log

2.6.2.5 实现独立子配置文件

  • 将不同集群的配置放在独立的子配置文件中。
  • 使用 include 指令包含子配置文件。
[root@ka1 ~]#  mkdir /etc/keepalived/conf.d
[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# systemctl restart keepalived.service

三、Keepalived 企业应用示例

3.1 master/slave 的 Keepalived 单主架构

3.1.1 MASTER配置

3.1.2 BACKUP配置

3.1.3 抓包查看

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

3.2 抢占模式和非抢占模式

 3.2.1   preempt 默认模式

高优先级主机恢复后抢占低优先级主机。

 3.2.2 1 非抢占模式nopreempt

高优先级主机恢复后不抢占低优先级主机。

注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP

3.2.3 1 抢占模式preempt_delay

抢占延迟模式,高优先级主机恢复后延迟一段时间再抢占。

注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

3.3 VIP 单播配置

  • 使用单播代替多播,减少网络流量。
  • 需要在所有节点设置对方主机的 IP 地址。

抓包查看单播效果

3.4 Keepalived 通知脚本配置

  • 当 Keepalived 状态变化时,自动触发脚本执行。
  • 脚本类型: master、backup、fault、通用、stop。
  • 脚本调用方法: 在 vrrp_instance 语句块中添加 notify_xxx 指令。
  • 创建通知脚本: 使用 Bash 脚本,根据状态发送邮件或其他通知。
vim /etc/mail.rc

发送测试邮件

[root@ka1 ~]# echo hello world | mail -s test 2592251929@qq.com

3.5 master/master 的 Keepalived 双主架构

  • 将多个 VIP 分别运行在不同的 Keepalived 服务器上,实现并行提供服务。

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值