keepalived实现高可用

01 高可用keepalived入门

1、高可用基本概述

1.1 什么是高可用

  • 简单理解:两台机器启动着相同的业务系统,当有一台机器宕机,另外一台服务器能快速的接管,对于访问的用户是无感知的。
  • 专业理解:高可用是分布式系统架构设计中必要的一环,主要目的, 减少系统不能对外提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。高可用参考URL

1.2 高可用使用什么工具

  • 通常服务的高可用采用 keepalived 软件实现;

1.3 高可用是如何实现的

  • keepalived 软件,是基于 VRRP 协议实现的。
  • VRRP 虚拟路由冗余协议,主要用于解决单点故障问题(所谓的单点故障,指的是当一个对外的业务系统发生故障,会直接造成整个集群瘫痪)。

1.4 VRRP诞生背景

例如:公司的网络是通过网关转换进行上网的(如下图所示),那如果该路由器故障了,网关将无法转发报文,此时所有人都将无法上网,这么时候怎么办呢?
image.png

解决方案1:增加一个 Backup 路由,然后修改用户PC的网关指向为Backup,但这里有两个问题

  • 1、如果需要修改的PC数量特别多会非常麻烦。
  • 2、一旦用户将指向都修改为Backup,那Master如果恢复了该如何处理,是改回来还是继续使用?

image.png

解决方案2:直接将 Backup网关的IP地址与Master网关的IP地址配置为一样的不就可以了吗? (如下图所示)
image.png
其实这种方式也不行:
因为PC在第一次通信时,是通过ARP广播的方式获取到Master网关的Mac地址和IP地址,同时PC还会将Master网关对应IPMAC地址存储至ARP缓存表中;
所以当PC与网关进行通信时,会直接读取ARP缓存表中的MAC地址与IP地址,进行数据包转发,这也就意味着当Master网关故障,就算我们将Backup网关的IP地址修改为与Master一样的IP,最终PC的数据包还是会转发给Master,不会转发给 Backup。(除非PCARP缓存表过期,在次发起ARP广播的时候才能正确获取BakcupMac地址与对应的IP地址。或者手动清理ARP缓存表)

1.5 VRRP实现原理

那如何才能做到出现故障自动转移,此时VRRP就应运而生;
VRRP其实是通过软件或硬件的形式在MasterBackup外层增加一个虚拟MAC地址(简称VMAC)、以及虚拟IP地址(简称VIP);
那么在这种情况下,当PC请求VIP的时候,无论是Master处理还是Backup处理,PC仅会在ARP缓存表中记录VMACVIP的对应关系。
image.png
VRRP初始状态:假定VIP和VMAC目前绑定在MASTER的节点上

  • 1、当用户访问这个 VIP 时,会获取对应IP的MAC,而后请求会被送往Master节点;
  • 2、因此,用户的所有请求都会送往Master节点;
  • 3、而后由Master节点路由给互联网;

VRRP故障切换:如果Master节点发生故障,VRRP会进行如下操作:

  • 1、将移出Master节点上的VIP地址;
  • 2、将VIP重新绑定到可用的Backup节点上;
  • 3、通知客户端VIP的VMAC发生了变化,确保所有未来的数据包都能正确送达新的主节点;

2、高可用Keepalived

2.1 Keeplaived基本介绍

Keepalived 基于 vrrp协议实现,原生设计是为了实现ipvs服务的高可用,也就是LVS;

  • 通过 vrrp 协议,可以完成地址漂移技术;
  • vip 地址所在的节点生成 ipvs 规则(需要在Keepalived配置文件中定义);
  • ipvs 集群的 RS 节点做健康状态检测;

2.2 Keepalived核心组件

  • vrrp stack:用来实现 vrrp 协议重要组件之一;
  • Netlink接口:设置和删除网络接口上的虚拟IP地址;
  • ipvs wrapper:使用getsocksetsock来建立IPVS规则;
  • checkers:监测RS节点的方式,支持tcp、http、ssl等;
  • system call:支持启动额外系统脚本的功能;
  • SMTP:为当发生角色状态转换时,发送事件通知邮件;
  • WatchDog:监控进程
  • 控制组件:配置文件分析器
  • 内存管理组件

image.png
1、首先VRRP会通过NetLink创建VIP,
2、然后使用ipvs wrapper为对应的VIP建立LVS负载均衡转发规则,建立后通过Checkes对其进行健康检查;
3、如果自带的检查规则无法满足,可以使用system call自行定义检查脚本;
4、WatchDog实时监测着Checkers和VRRPStack的状态,如果keepalived出现了故障,发生了切换,可以通过SMTP通知给管理人员。

2.3 Keepalived核心概念

  • 虚拟路由器:由一个Master路由器和多个Backup路由器组成;

  • Master路由器:虚拟路由器中承担报文转发任务的路由器;

  • Backup路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器;

  • VRID:虚拟路由器的标识,由相同 VRID 的一组路由器构成一个虚拟路由器;

  • 组播:组播是有特定的成员,是一种可控的广播,组播成员需要加入“组播组”才能收到该组播的信息。

  • 虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个IP地址;

  • 虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址;

  • 优先级:VRRP根据优先级来确定虚拟路由器中每台路由器的地位;

  • 抢占式:如果Master故障,Backup自动接管,当Master恢复了会将VIP地址抢回来;

  • 非抢占式:如果Master故障,Backup自动接管,当Master恢复则自动转为Backup,不会抢占VIP

image.png

2.3 Keeplaived应用场景

之所以需要使用 Keepalived,通常是因为我们的业务系统需要保证 7x24 小时不DOWN机;

  • 比如公司内部 OA 系统,每天公司人员都需要使用,则不允许Down机;
  • 比如公司对外发布的业务系统(哈啰单车),每天有大量的用户使用,是不可以出现故障的;

也就是说作为企业的业务系统,要保证随时随地都可以使用,不可以中断
注意:同地域实现高可用,如何该地域出现了断电,任然是会造成整体不可用。

3、Keeplaived安装配置

3.1 环境准备

系统环境角色主机名称eth0eth1
RockyLinux9Masterproxy01.newy.net10.0.0.5172.16.1.5
RockyLinux9Backupproxy02.newy.net10.0.0.6172.16.1.6
RockyLinux9VIP地址10.0.0.10

3.2 安装Keepalived

Master 以及 Backup 节点分别安装 Keepalived

[root@lb01 ~]# yum install keepalived -y
[root@lb02 ~]# yum install keepalived -y

3.3 配置Master

1、编辑Master角色的Keepalived配置文件

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {     
    router_id lb01                  # 当前物理设备的标识名称
    vrrp_mcast_group4 224.0.0.18    # 组播地址,default 224.0.0.18  
}

vrrp_instance VI_1 {
    state MASTER                    # 角色状态;
    interface eth0                  # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 50            # 当前虚拟路由标识,VRID;
    priority 200                    # 当前物理节点在虚拟路由中的优先级;
    advert_int 1                    # vrrp通告时间间隔,默认1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过8位字符;
    }
    virtual_ipaddress {
        10.0.0.10 dev eth0         # VIP地址
    }
}

2、启动Keepalived

[root@lb01 ~]# systemctl start keepalived

3.4 配置Backup

1、编辑Backup角色的Keepalived配置文件

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
    router_id lb02
    vrrp_mcast_group4 224.0.0.18
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.10
    }
}

2、启动Keepalived

[root@lb02 ~]# systemctl start keepalived

3.5 地址漂移测试

检查 keepalivedVIP 地址能否在两个节点间实现漂移;

1、在 Master 上检查是否有VIP,如果有,则停止Keepalived


[root@lb01 ~]# ip addr |grep 10.0.0.10
    inet 10.0.0.10/32 scope global eth0
    
[root@lb01 ~]# systemctl stop keepalived

2、检查Backup节点是否有VIP地址

[root@lb02 ~]# ip addr |grep 10.0.0.10
    inet 10.0.0.10/32 scope global eth0

3、此时启动 Master 上的 Keepalived,会发现 VIP 被强行抢占;

[root@lb01 ~]# systemctl start keepalived

[root@lb01 ~]# ip addr |grep 10.0.0.10
    inet 10.0.0.10/32 scope global eth0

3.6 客户端验证

1、验证发生故障时,是否会自动更新客户端的ARP信息

# 默认VIP的MAC是MAster节点
[root@node02 ~]# arp -a
? (10.0.0.10) at 52:54:00:65:4c:5d [ether] on eth0


# 关闭Master后会发现MAC地址切换到Backup节点
[root@node02 ~]# arp -a
? (10.0.0.10) at 52:54:00:ea:ea:bb [ether] on eth0

2、使用tcpdump抓包,查看Keepalived地址切换过程

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


# 正常情况下Master会发送组播信息
18:55:55.639965 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20
18:55:56.723410 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20
18:56:02.140594 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20

# 当Master故障会组播通知其优先级为0
18:56:04.968775 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 0, authtype simple, intvl 1s, length 20

# 此时Backup优先级高于Master,因此地址会被Backup接管
18:56:05.629475 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:06.713036 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:07.796505 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:08.879985 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值