高可用集群Keepalived

1.1keepalived介绍

1.1.1keepalived 简介

  Keepalived利用 VRRP 协议实现 Linux 系统的高可用性。它能在主服务器故障时自动将网络服务切换到备用服务器,保证服务连续性。其特点有高可用性、负载均衡、健康检查、配置灵活、易于集成且开源,常用于保障网络服务如 DNS、HTTP 等的高可用及实现负载均衡和故障转移。

1.1.2VRRP工作模式

  • 三种状态

    • Initialize状态:
      • 这是节点启动VRRP时的初始状态。在Initialize状态下,节点会读取配置信息,并准备加入VRRP组。之后,节点会根据配置的优先级和其他因素,决定自己是成为Master还是Backup
    • Master状态:
      • 在VRRP组中,只有一个节点处于Master状态,负责处理所有的网络流量。Master节点定期发送VRRP通告消息,以通知其他节点其状态,并保持其作为主节点的地位。
    • Backup状态:
      • Backup节点是处于待命状态的节点,它们不处理网络流量,除非Master节点发生故障。Backup节点监听Master节点的VRRP通告消息,如果超过设定的时间没有收到通告,它们会认为Master节点可能已经故障,并开始选举过程以选择新的Master节点。
  • 选举机制

    • 抢占模式
      • 在抢占模式下,如果一个优先级更高的节点加入VRRP组,即使当前已经有Master节点,它也会立即抢占Master状态。
      • 这种模式适用于动态环境,其中节点的优先级可能会根据系统负载或其他因素变化,需要灵活地调整Master节点。
      • 抢占模式可能会导致更频繁的状态切换,但可以确保始终由优先级最高的节点处理网络流量
    • 非抢占模式
      • 在非抢占模式下,一旦一个节点被选举为Master,它会保持Master状态,直到它自己主动放弃或发生故障。
      • 即使有另一个优先级更高的节点加入VRRP组,也不会自动抢占Master状态。这可以防止频繁的切换,提高系统的稳定性。
      • 通常在非抢占模式下,优先级高的节点会在配置上被设置为Master节点,以避免不必要的选举。

1.1.3Keepalived 架构

将整个体系结构分层用户层和内核层

  • Scheduler I/O Multiplexer

I/O复用分发调用器,负责安排Keepalived所有的内部的任务请求

  • Memory Management

内存管理机制,提供了访问内存的一下通用方法Keepalived

  • Control Plane

控制面板,实现对配置文件的编译和解析,Keepalived的配置文件解析比较特殊,它并不是一次解析所有模块的配置,而是只有在用到某模块时才解析相应的配置

  • Core components

Keepalived的核心组件,包含了一系列功能模块,主要有watch dog、Checkers、VRRP Stack、IPVS wrapper、Netlink Reflector

vrrp stack:VIP消息通告

checkers:监测

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

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

2.1Keepalived部署

2.1.1实验环境搭建

KA1ip:172.25.254.10     vip:172.25.254.100           
KA2ip:172.25.254.20     vip:172.25.254.100     
realserverip:172.25.254.110
realserver    ip:172.25.254.120

安装Keepalived

[root@ka1 ~]# yum install keepalived -y

[root@ka2 ~]# yum install keepalived -y

2.1.2Keepalived配置

以master/slave的 Keepalived 单主架构为例:

Keepalived帮助:

[root@ka1 ~]# man keepalived.conf

全局配置,如下图:

ka1配置:

虚拟路由配置,如图:

启动 keepalived

[root@ka1 ~]# systemctl enable --now keepalived

可以看到eth0的子接口上vip配置成功

ks2配置:

虚拟路由配置,如图:

因为ka2的优先级比ka1低,所以此时因为抢占模式,vip在ka1上

抓包测试:

2.1.3启用keepalived日志功能

修改/etc/sysconfig/keepalived下的配置:

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

修改/etc/rsyslog.conf下的配置:

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

重启服务:

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

接着查看日志,显示配置成功:

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

2.1.4实现独立子配置文件

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

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

新建配置文件:

[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d

编辑/etc/keepalived/conf.d/172.25.254.100.conf文件:

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

写入配置:

重启服务:
 

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

再次查看vip,发现运行正常:

2.1.5非抢占模式和延迟抢占

非抢占模式:

编辑文件/etc/keepalived/keepalived.conf 

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

对ka2进行配置:

注意:两台主机都要修改为BACKUP

测试:

对ka1进行重启,会发现vip在ka2上,即便是ka1的优先级比ka2高也没影响,在非抢占模式下,谁先开机谁先拿到vip除,除非拿到vip的机器dowm状态,否则vip一直在同一台机器上。

延迟抢占:

两台主机都是:BACKUP

ka1:

ka2:

测试:
会发现ka1刚开始没有vip,在5s之后会拿到vip

2.1.6VIP单播配置

  默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

ka1:

ka2:

测试:

2.1.7Keepalived 通知脚本配置

2.1.7.1 通知脚本类型

1.当前节点成为主节点时触发的脚本

  • notify_master <STRING>|<QUOTED-STRING>

2.当前节点转为备节点时触发的脚本

  • notify_backup <STRING>|<QUOTED-STRING>

3.当前节点转为“失败”状态时触发的脚本

  • notify_fault <STRING>|<QUOTED-STRING>

4.通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

  • notify <STRING>|<QUOTED-STRING>

5.当停止VRRP时触发的脚本

  • notify_stop <STRING>|<QUOTED-STRING>

2.1.7.2 创建通知脚本

[root@ka2 ~]# chmod +x /etc/keepalived/mail.sh

给/etc/keepalived/mail.sh一个可执行的权限

[root@ka2 ~]# chmod +x /etc/keepalived/mail.sh 

 2.1.7.3邮件配置

安装邮件发送工具:

[root@ka2 ~]# yum install mailx -y

 拿到授权码:

对/etc/mail.rc文件进行配置:

[root@ka2 ~]# vim /etc/mail.rc

给予权限:

[root@ka2 ~]# chmod +x /etc/mail.rc 

在 vrrp_instance VI_1 语句块的末尾进行配置:

测试:

[root@ka2 ~]# echo test message |mail -s test 邮箱

2.1.8 Keepalived 双主架构

    master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。

ka1:

虚拟路由1,为主

虚拟路由2,为从

修改组为200,优先级为80vip为172.25.254.200,在eth0的子接口2上

ka2:

虚拟路由1,为从

虚拟路由2,为主

优先级改为100,其余与ka1配置相同

测试:

查看ka1/2此时的vip状况:

ka1:

ka2:

当停用ka2的keepalived服务:

[root@ka2 ~]# systemctl stop keepalived

ka2的vip状况如图:

ka1有两个vip

2.1.9实现IPVS的高可用性

2.1.9.1 IPVS相关配置

1、virtual server (虚拟服务器)的定义格式

virtual_server IP port #定义虚拟主机IP地址及其端口

virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群 virtual_server group string #使用虚拟服务器组

2、虚拟服务器配置

virtual_server IP port { #VIP和PORT
delay_loop <INT> #检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #定义调度方法
lb_kind NAT|DR|TUN #集群的类型,注意要大写
persistence_timeout <INT> #持久连接时长
protocol TCP|UDP|SCTP #指定服务协议,一般为TCP
sorry_server <IPADDR> <PORT> #所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT> { #RS的IP和PORT
weight <INT> #RS权重
notify_up <STRING>|<QUOTED-STRING> #RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定义当前主机健康状
态检测方法
}
}

#注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

3、应用层监测

HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #判断上述检测机制为健康状态的响应码,一般为 200
}
connect_timeout <INTEGER> #客户端请求的超时时长, 相当于haproxy的timeout server
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #向当前RS发出健康状态检测请求时使用的源地址
bind_port <PORT> #向当前RS发出健康状态检测请求时使用的源端口
}

4、TCP监测

TCP_CHECK {
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER> #客户端请求的超时时长
#等于haproxy的timeout server
}

2.1.9.2 实战案例1:实现单主的 LVS-DR 模式

realserver:(web1与web2配置相同)

#安装阿帕奇

[root@realserver ~]# yum install httpd -y  

#对网站内容进行编辑

[root@realserver ~]# echo 172.25.254.110 - web1 > /var/www/html/index.html 

#启动httpd

[root@realserver ~]# systemctl enable httpd --now 

#临时添加vip到回环网卡

[root@realserver ~]# ip addr add 172.25.254.100/32 dev lo

查看换回配置:

对/etc/sysctl.d/arp.conf文件进行配置:

加载配置文件:

[root@realserver ~]# sysctl --system

keepalived:(ka1与ka2配置相同)

编辑/etc/keepalived/keepalived.conf 文件

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

 vip:172.25.254.100

web1:172.25.254.110

web2:172.25.254.120

重启keepalived:

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

[root@ka2 ~]# systemctl restart keepalived.service

安装ipvsadm

[root@ka1 ~]# yum install ipvsadm -y

[root@ka2 ~]# yum install ipvsadm -y

测试:

2.2.1 实现其它应用的高可用性 VRRP Script

2.2.1.1 VRRP Script 配置

定义脚本 :

  • vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定 义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。 通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至 低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
}

调用脚本

  • track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script。

track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}

2.2.1.2 实战案例:利用脚本实现主从角色切换

创建脚本:

[root@ka1 ~]# vim /mnt/check_rin.sh

编辑/etc/keepalived/keepalived.conf文件

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

提权:

[root@ka1 ~]# chmod +x /mnt/check_rin.sh 

测试:

在/mnt/创建文件rin

[root@ka1 ~]# touch /mnt/rin

 vip实现漂移

2.2.1.3 实战案例:实现HAProxy高可用

ka1/2:

安装 haproxy :

[root@ka1 ~]# yum install haproxy -y

编辑/etc/haproxy/haproxy.cfg 文件

[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg 

在两个ka1和ka2两个节点启用内核参数

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

编写脚本:

[root@ka1 ~]# vim /etc/keepalived/scripts/haproxy.sh

提权:

[root@ka1 ~]# chmod  +X /etc/keepalived/scripts/haproxy.sh

配置ka:

ka1:

ka2:

停止ka1:

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

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rinleren

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

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

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

打赏作者

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

抵扣说明:

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

余额充值