keepalived基础

目录

1 高可用集群简介

1.1 高可用集群的定义

1.2 高可用集群类型

1.3 常见的HA集群

2 高可用与keepalived

2.1 keepalived简介

2.2 keepalived体系结构

2.3 VRRP协议介绍

原理总结

3 Keepalived部署

3.1 Keepalived 环境准备

3.2 Keepalived 相关文件

3.3 keepalived安装

 3.4 KeepAlived 配置说明

3.4.1 配置文件组成

 3.4.2 全局配置说明

3.4.3 配置虚拟路由器(实现master/slave的 Keepalived 单主架构)

 3.4.3.1 虚拟路由的通讯设定

 3.4.4 keepalived日志分离

​ 3.4.5 实现独立子配置文件


1 高可用集群简介

1.1 高可用集群的定义

高可用集群(High Availability Cluster,HA集群),简称HACluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。 高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。因此,对于用户而言,集群永远不会停机。

1.2 高可用集群类型

  • LB:Load Balance 负载均衡 --- LVS/HAProxy/nginx
  1. LVS(Linux Virtual Server)是基于 Linux 内核实现的四层负载均衡技术,具有高性能和高可靠性。它通过修改 IP 数据包的目的地址和端口来实现负载分发。
  2. HAProxy 是一款提供高可用性、负载均衡和基于 TCP 和 HTTP 应用的代理软件。它支持七层负载均衡,可以根据 HTTP 请求的内容进行更精细的流量分发。
  3. Nginx 不仅是一个优秀的 Web 服务器,也具备强大的负载均衡功能。在 http/upstream 中可以配置基于 HTTP 协议的负载均衡,而 stream/upstream 用于配置基于 TCP 协议的负载均衡。
  • HA:High Availability 高可用集群 --- 数据库、Redis
  1. 数据库:通过主从复制、数据备份与恢复、故障自动切换等技术来保障数据的可用性和业务的连续性。例如 MySQL 的主从架构,当主库出现故障,从库可以迅速切换为主库继续提供服务。
  2. Redis 也可以通过集群模式、主从复制等方式实现高可用性。比如 Redis Sentinel 可以监控 Redis 主从节点的状态,实现自动故障切换。
  • SPoF: Single Point of Failure,解决单点故障

单点故障是指系统中某个组件的故障会导致整个系统无法正常工作。解决单点故障就是通过冗余、备份、故障转移等策略消除这种风险。

  • HPC:High Performance Computing 高性能集群

将多个计算机通过高速网络连接起来,协同完成大规模计算任务。

通常用于科学计算、工程模拟、大数据分析等需要强大计算能力的领域。比如气象预测模型的计算、基因序列的分析等。通过并行计算、分布式存储等技术,高性能集群能够大幅提高计算效率,缩短计算时间。

1.3 常见的HA集群

高可用集群包括双机热备、双机互备、多机互备等,这类集群一般都由两个或两个以上节点组成。比较典型的双机热备结构图如下 :

心跳检测

为了实现负载平衡、高可用性和错误恢复,集群系统采用心跳检测技术。心跳检测的基本原理是通过固定频率的信号发送,来确保节点之间的通信链路是畅通的。 如果某个节点在一段时间内没有收到心跳信号,就可以判断该节点可能已经失效,从而采取相应的处理措施。 在心跳汇报时,通常会携带一些附加的状态信息和元数据,例如节点的负载情况、运行状态等,以便管理系统更好地了解整个分布式系统的健康状况。

2 高可用与keepalived

在生产环境中,我们通常要求业务稳定运行,这样才能避免不必要的损失。业务的高可用要求设备的宕机时间比较端、业务影响范围比较小,这样才能够实现业务稳定运行。对于生产环境而言,单台设备即便再怎么维护,也有不小的概率出现故障宕机,针对这种情况,我们希望实现一种方案,使得在生产系统中每一个设备都有备用的设备。当一个设备故障后,备用设备能够立即接替该设备正常工作,从而满足系统的高可用要求。
这种机制应该可以使得主用和备用设备之间进行健康检测,备用设备能够检测主用设备的运作情况,当主用设备正常运行时,备用设备应该继续进行检测;当主用设备发生故障时,备用设备应该立即接替主用设备进行工作。上述过程应该是自动的,无需人为干预,这样才能保证当系统发生宕机后故障恢复的迅速性。
一般而言,高可用方案有以下三种:
1、基于SHELL脚本实现高可用。
2、基于keepalived软件实现高可用。
3、基于Heartbeat软件实现高可用。

2.1 keepalived简介

keepalived时一款高可用软件,可以工作在三层(网络层)、四层(传输层)和五层(应用层)上,进行健康检测功能。
keepalived有两大核心功能:健康检测功能和VRRP冗余功能。keepalived借助了VRRP(Virtual Router Redundant Protocol,虚拟路由冗余协议)协议可以在主用设备和备用设备之间设置一个虚拟的IP地址,被称为VIP。主用设备对VIP进行ARP响应,处理目的IP地址为VIP的报文,当主用设备宕机后,keepalived软件自动对VIP进行切换,使得其中一个备用设备开始对VIP进行响应,处理响应的报文请求。
keepalived可以工作在类似三层、四层和五层的模式上,当keepalived工作在三层模式时,以IP的形式去进行健康检测,当keepalived工作在四层模式时,以IP+端口的形式去进行健康检测,当keepalived工作在五层模式时,以自定义脚本的方式去进行健康检测。

IP地址漂移

在集群系统中,除了每个节点自身的静态 IP 地址外,还有一个浮动 IP 地址(即VIP)。该地址并非固定不变,例如,在双机热备中,正常状态下浮动 IP 地址位于主节点,一旦主节点发生故障,浮动 IP 地址将自动切换至备用节点。因此,为了确保服务的持续性,在集群系统中必须使用浮动 IP 地址作为对外提供的服务 IP 地址。尽管节点自身的 IP 地址也可提供服务,但当节点失效时,服务将转移到另一个节点,而连接服务的 IP 地址仍为故障节点的 IP 地址,导致服务中断。

2.2 keepalived体系结构

官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html

用户空间核心组件:
vrrp stack:VIP消息通告

checkers:监测real server

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

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

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

2.3 VRRP协议介绍

vrrp协议,英文名称:Virtual Router Redundancy Protocol,中文名称:虚拟路由器冗余协议。vrrp出现就是为了解决静态路由的单点故障,vrrp是通过一种竞选协议机制来将路由任务交给某台vrrp路由器。

MASTER和BACKUP
       在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台物理的机器并不同时工作,而是由一台称为MASTER的负责路由工作,其他的都是BACKUP,MASTER并非一成不变,VRRP协议让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
       VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器有VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址:00-00-5E-00-01{VRID}。所有,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这周主从的切换时透明的。
       在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占式非常快速的(<1s),以保证服务的连续性。
出于安全性考虑,VRRP包使用了加密协议进行加密。

原理总结

VRRP 相关术语

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

VRRP 相关技术

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

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

安全认证:

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

工作模式:

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

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs 服务
官网: http://keepalived.org/
功能:

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

3 Keepalived部署

3.1 Keepalived 环境准备

角色IP(NAT)
KA1172.25.254.10
KA2172.25.254.20
webserver1172.25.254.110
webserver2172.25.254.120
  • 各节点时间必须同步:ntp, chrony
  • 关闭防火墙及SELinux
  • 各节点之间可通过主机名互相通信(非必须)
  • 建议使用/etc/hosts文件实现(非必须)
  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(非必须)

3.2 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

3.3 keepalived安装

# 在ka1和ka2上做
yum install keepalived -y

 3.4 KeepAlived 配置说明

3.4.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
 3.4.2 全局配置说明

这些在KA1和KA2上看到

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
1904650938@qq.com     #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
}
notification_email_from keepalived@timinglee.org     #发邮件的地址
smtp_server 127.0.0.1     #邮件服务器地址
smtp_connect_timeout 30     #邮件服务器连接timeout
router_id ka1.timinglee.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地址范围:
}


# 编辑完后开启服务(ka2先不用做,后面直接复制过去)
[root@ka1 ~]# systemctl  enable --now keepalived.service
3.4.3 配置虚拟路由器(实现master/slave的 Keepalived 单主架构
# ka1
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf


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


将在ka1做的内容直接复制到ka2上
[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf
The authenticity of host '172.25.254.20 (172.25.254.20)' can't be established.
ECDSA key fingerprint is SHA256:2Ret2cBhPX82L0+dP7RcH9eaY0A4Wo/vU9+yvs/L7dI.
ECDSA key fingerprint is MD5:9f:a2:a4:e5:5c:cf:d0:eb:ae:ed:f2:d3:20:69:42:14.
Are you sure you want to continue connecting (yes/no)? yes   # 输入yes     
Warning: Permanently added '172.25.254.20' (ECDSA) to the list of known hosts.
root@172.25.254.20's password:  # 输入ka2的用户密码(不显示出来)
keepalived.conf

查看:

在ka2上做点小小的变更

vim /etc/keepalived/keepalived.conf

改下面这三处:

 测试:

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

# ka2开启服务
[root@ka2 ~]# systemctl  enable --now keepalived.service

在webserver1上做下面这两步:
# 远程连接ka1
[root@webserver1 ~]# ssh -l root 172.25.254.10
# 关闭keepalived服务
[root@ka1 ~]# systemctl stop keepalived.service

 查看此时ka1主机的数据,此时172.25.254.20过来了:

在ka2上查看,发现此时VIP过来了:

在webserver1主机上再次打开服务:

[root@ka1 ~]# systemctl start keepalived.service

发现此时172.25.254.10又回来了:

 此时VIP又迁回去了

 3.4.3.1 虚拟路由的通讯设定

做完上面的东西,此时我们的KA是ping不通自己的VIP的,需要做以下设定

# ka1,ka2都要做

vim /etc/keepalived/keepalived.conf

加上这行

# 重启服务

systemctl restart keepalived.service

此时就能通讯了:

 3.4.4 keepalived日志分离
[root@ka1 ~]# vim /etc/sysconfig/keepalived
# 修改里面的最后一行成下面这句
KEEPALIVED_OPTIONS="-D -S 6"


[root@ka1 ~]#vim /etc/rsyslog.conf
local6.* /var/log/keepalived.log

 
[root@ka1 ~]# systemctl restart keepalived.service 
[root@ka1 ~]# systemctl restart rsyslog.service 


# 查看独立的日志文件
[root@ka1 ~]# tail -f /var/log/keepalived.log 
Aug 18 02:28:58 ka1 Keepalived_healthcheckers[50993]: Adding sorry server [192.168.200.200]:1358 to VS [10.10.10.2]:1358
Aug 18 02:28:58 ka1 Keepalived_healthcheckers[50993]: Removing alive servers from the pool for VS [10.10.10.2]:1358
Aug 18 02:28:58 ka1 Keepalived_healthcheckers[50993]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 18 02:28:58 ka1 Keepalived_healthcheckers[50993]: SMTP alert successfully sent.
Aug 18 02:28:59 ka1 Keepalived_healthcheckers[50993]: Timeout connecting server [192.168.201.100]:443.
Aug 18 02:28:59 ka1 Keepalived_healthcheckers[50993]: Check on service [192.168.201.100]:443 failed after 3 retry.
Aug 18 02:28:59 ka1 Keepalived_healthcheckers[50993]: Removing service [192.168.201.100]:443 from VS [192.168.200.100]:443
· · · · · ·
 3.4.5 实现独立子配置文件
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

· · · · · ·
#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
#    }
#}
#
include "/etc/keepalived/conf.d/*.conf" # 相关子配置文件的路径
· · · · · ·

创建子配置文件的存放点
[root@ka1 ~]# mkdir /etc/keepalived/conf.d
[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

# 把之前注释的东西粘贴上去
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
    }
}

# 重启服务
[root@ka1 ~]# systemctl restart keepalived.service

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值