最值得收藏的高可用集群keeplived知识详细总结

一、高可用集群

1.1 集群类型

  • LB:Load Balance 负载均衡

LVS/HAProxy/nginx(http/upstream, stream/upstream)

  • HA:High Availability 高可用集群

数据库、Redis

  • SPoF: Single Point of Failure,解决单点故障

HPC:High Performance Computing 高性能集群

1.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%

1.3 系统故障

硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素

软件故障:设计缺陷 bug

1.4 实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间) 解决方案:建立冗余机制。

  • active/passive 主/备
  • active/active 双主
  • active --> HEARTBEAT --> passive
  • active HEARTBEAT active

1.5  VRRP:Virtual Router Redundancy Protocol

虚拟路由冗余协议,解决静态网关单点风险

  • 物理层:路由器、三层交换机
  • 软件层:keepalived

1.5.1 相关术语

  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIP:Virtual IP
  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:
    • master:主设备
    • backup:备用设备
    • priority:优先级

1.5.2 VRRP 相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式

安全认证:

  • 无认证
  • 简单字符认证:预共享密钥
  • MD5

工作模式:

  • 主/备:单虚拟路由器
  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)

二、Keepalived 部署

2.1 keepalived 简介

Keepalived 是一个用 C 语言编写的路由软件。该项目的主要目标是 为 Linux 的负载均衡和高可用性提供简单而强大的工具 系统和基于 Linux 的基础设施。负载均衡框架依赖于众所周知的 以及广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载均衡。Keepalived 实现了一组检查器 根据 他们的健康。另一方面,高可用性是通过VRRP协议实现的。VRRP 是一种 用于路由器故障切换的基本模块。此外,Keepalived 还实现了一套 连接到VRRP有限状态机,提供低级和高速协议 相互 作用。为了提供最快的网络故障检测, Keepalived 实现 BFD 协议。 VRRP状态转换可以考虑BFD提示来驱动快速状态转换。 Keepalived 框架可以单独使用,也可以一起使用,以 提供有弹性的基础设施。

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务。

官网:Keepalived for Linux

功能:

  • 基于vrrp协议完成地址流动
  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

2.2 keepalived 架构

官方文档:

Keepalived 用户指南 — Keepalived 1.4.3 文档

Keepalived 针对 Linux

  • 用户空间核心组件:

        vrrp stack:VIP消息通告

        checkers:监测real server system

        call:实现 vrrp 协议状态转换时调用脚本的功能

        SMTP:邮件组件

        IPVS wrapper:生成IPVS规则

        Netlink Reflector:网络接口

        WatchDog:监控进程

  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.3 Keepalived 环境准备

  • 各节点时间必须同步:ntp, chrony
  • 关闭防火墙及SELinux
  • 各节点之间可通过主机名互相通信:非必须
  • 建议使用/etc/hosts文件实现:非必须
  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须

2.4 Keepalived 相关文件

软件包名: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 Keepalived 安装

[root@KA1 ~]# dnf install keepalived -y

[root@KA1 ~]# systemctl start keepalived

2.6 KeepAlived 配置说明

2.6.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.6.2  配置语法说明

帮助:

man keepalived.conf

全局配置:

! Configuration File for keepalived
global_defs {
   notification_email {
       2796285750@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
       timiniglee-zln@163.com
   }
   notification_email_from keepalived@ouqisheng.org #发邮件的地址
   smtp_server 127.0.0.1 #邮件服务器地址
   smtp_connect_timeout 30 #邮件服务器连接timeout
   router_id ouqisheng.org #每个keepalived主机唯一标识
                           #建议使用当前主机名,但多节点重名不影响
  
 vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能
                          #启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检
                          #查,默认值为全检查
  
  
   vrrp_strict #严格遵循vrrp协议
                 #启用此项后以下状况将无法启动服务:
                 #1.无VIP地址 
                 #2.配置了单播邻居 
                 #3.在VRRP版本2中有IPv6地址
                 #建议不加此项配置
  
 vrrp_garp_interval 0 #报文发送延迟,0表示不延迟
 vrrp_gna_interval 0 #消息发送延迟
 vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围: 
  
}

配置虚拟路由器:

vrrp_instance VI_1 {
   state MASTER
   interface ens33 #绑定为当前虚拟路由器使用的物理接口,如:ens33,可以和VIP不在一
个网卡
    
   virtual_router_id 100 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一
   #否则服务无法启动
   #同属一个虚拟路由器的多个keepalived节点必须相同
   #务必要确认在同一网络中此值必须唯一
    
   priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254
   #值越大优先级越高,每个keepalived主机节点此值不同
   
   advert_int 1 #vrrp通告的时间间隔,默认1s
   authentication { #认证机制
       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,默认32
       172.25.254.110/24 dev ens33
       172.25.254.120/24 dev ens33 label ens33:1
   }
}

启用keepalived日志功能:

[root@KA1 ~]# vim /etc/sysconfig/keepalived

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

查看日志

[root@ka1 ~]#tail -f /var/log/keepalived.log  

2.6.3 实现独立子配置文件

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理。

将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件。

格式:

include /path/file

1、把以下语句加入配置文件中

[root@KA1 ~]# vim /etc/keepalived/keepalived.conf

2、创建子配置文件,并把配置内容写入

[root@KA1 ~]# mkdir /etc/keepalived/conf.d

[root@KA1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

3、检验是否生效

三、Keepalived应用实例

实现MASTR/BACKUP的Keepalived单主架构icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141141510?spm=1001.2014.3001.5501Keepalived抢占模式和非抢占模式icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141142524?spm=1001.2014.3001.5501Keepalived的VIP单播配置icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141184164?spm=1001.2014.3001.5501Keepalived 通知脚本配置icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141137878?spm=1001.2014.3001.5501Keepalived+LVS实现IPVS的高可用icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141175946?spm=1001.2014.3001.5501Keepalived+Haproxy实现高可用icon-default.png?t=N7T8https://blog.csdn.net/weixin_63657273/article/details/141174561?spm=1001.2014.3001.5501

keepalived是一种用于实现高可用性的软件,主要用于在集群中检测服务的状态,并根据检测结果进行VIP(虚拟IP)的漂移。当keepalived进程异常时,会触发VIP漂移,将VIP转移到备用节点上,以确保网站的可用性。然而,如果keepalived进程正常,但是nginx服务发生故障,就可能导致VIP不漂移,从而导致网站无法访问。为了解决这个问题,可以自己编写一个脚本来检查nginx服务的状态,如果异常,则可以通过kill掉keepalived进程来实现VIP的漂移,或者重新启动nginx服务。下面以keepalived重新启动nginx为例进行说明: 1. 首先,需要安装keepalived软件。在proxy1和proxy2两个节点上执行以下命令进行安装: ``` yum install keepalived -y ``` 2. 然后,需要在每个keepalived节点上进行配置。以proxy1节点为例,编辑keepalived的配置文件: ``` vim /etc/keepalived/keepalived.conf ``` 在配置文件中添加以下内容: ``` ! Configuration File for keepalived global_defs { router_id test111 # router_id后面的名称可以自定义 } vrrp_instance nginx_test { state MASTER interface ens33 # interface后面的名称为实际网卡名 virtual_router_id 51 priority 100 # 优先级,数值越大,优先级越高,在主备竞选时,优先级高的节点将竞选为主节点 advert_int 1 authentication { # 同一组keepalived认证 auth_type PASS auth_pass 1111 } virtual_ipaddress { # 虚拟IP,可以设置为网站的访问IP 192.168.1.100 } } ``` 保存并退出配置文件。 通过上述步骤,我们就可以实现keepalived高可用性,当nginx服务发生故障时,通过重新启动nginx服务或者kill掉keepalived进程来实现VIP的漂移,确保网站的可用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new不出对象来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值