带你10分钟全面了解keepalived

一、keepalived在架构中的作用

RS1与RS2都有相同的业务和相同的配置当你访问时会出现流量分摊不均的

情况就需要用到LVS或者haproxy

LVS是四层调度通过ip端口等进行调度 速度快 性能要求低

haproxy可以提供后端的健康检测,当某个服务器坏了就可以不调度 ,支持7层 可以分析报文对数据进行分析,实现动静分离 

当haproxy的主机挂掉时,整个集群访问失败,稳定性就比较低 为了解决这个问题!提出keepalived(保证vip的稳定性) 

(1)实现高可用
提升系统高用性的解决方案:降低 MTTR- Mean Time To Repair( 平均故障时间 )
解决方案:建立冗余机制
active/passive /
active/active 双主
active --> HEARTBEAT --> passive       HEARTBEAT 心跳   让确保是否存活
active <--> HEARTBEAT <--> active
 (2)HEARTBEAT 心跳

用到了VRRP协议  VRRP协议 :虚拟路由冗余协议

虚拟路由冗余协议 , 解决静态网关单点风险
VRRP 相关术语
虚拟路由器: Virtual Router
虚拟路由器标识: VRID(0-255) ,唯一标识虚拟路由器
VIP Virtual IP
VMAC Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
master :主设备
backup :备用设备
priority :优先级
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全认证:
无认证
简单字符认证:预共享密钥
MD5
工作模式:
/ 备:单虚拟路由器
/ 主:主 / 备(虚拟路由器 1 ),备 / 主(虚拟路由器 2

二、keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs 服务
(1)功能
基于 vrrp 协议完成地址流动
vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 )
   
ipvs 集群的各 RS 做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持 nginx haproxy 等服务
(2)Keepalived 架构
如图所示:
用户空间核心组件:
vrrp stack VIP 消息通告
checkers :监测 real server
system call :实现 vrrp 协议状态转换时调用脚本的功能
SMTP :邮件组件
IPVS wrapper :生成 IPVS 规则
Netlink Reflector :网络接口
WatchDog :监控进程
控制组件:提供 keepalived.conf 的解析器,完成 Keepalived 配置
IO 复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

三、keepalived 环境准备

在rhel7.9的环境中准备四台主机 分别为KA1   KA2   realserver1 realserver2

首先在我的母盘中进行链接克隆四台主机(这里小编建议大家可以先配置母盘的基本环境这样实验更加轻松哟!)

架构如图所示:

这里可以更改一下主机名 利用 systemctl set-hostname 主机名

(1)编写配置网络的脚本

vim vmset.sh

 (2)分别在四台主机上运行脚本

注意我的网卡设备是ens33 在运行脚本前可以使用ifconfig 查看一下

1.KA1主机:

 bash vmset.sh ens33 172.25.254.10 ka1.xl.com

2.KA2主机:

bash vmset.sh ens33 172.25.254.20 ka2.xl.com   

3.realserver1主机:

bash vmset.sh ens33 172.25.254.110 web1.xl.com   

4.realserver2主机:

bash vmset.sh ens33 172.25.254.120 web2.xl.com   

(3)关闭所有防火墙以及selinux

关闭防火墙:

systemctl stop firewalld

systemctl mask firewalld

禁用selinux

grubby --update-kernel ALL --args selinux=0

重启主机生效

(4)配置本地仓库

四台主机都需要配置仓库 建议现在母盘配置好

挂载: mkdir /rhel7

mount /dev/sr0 /rhel7

可以做开机自动挂载

vim /etc/rc.d/rc.local  编辑这个文件

写入:mount /dev/sr0 /rhel7

(5)配置 KA1与KA2主机

下载keepalived服务

yum install keepalived -y  

(6)配置rs1与rs2

1.下载httpd服务

yum install httpd -y

rs1:echo web1-172.25.254.110 > /var/www/html/index.html

rs2:echo web2-172.25.254.120>/var/www/html/index.html

2.启动服务:

systemctl enable --now httpd

3.测试一下环境是否ok!

在KA1的主机上测试一下:

curl 172.25.254.110

curl 172.25.254.120

此时实验环境就已经配置成功啦!

四、虚拟路由的配置

(1)全局配置

1.进入到keepalived的主配置文件:

vim /etc/keepalived/keepalived.conf 

(2)虚拟路由配置

2.KA1:

进入到keepalived的主配置文件:

vim /etc/keepalived/keepalived.conf 

KA2:

3.进入到keepalived的主配置文件:

vim /etc/keepalived/keepalived.conf 

改一下优先级

4.重启服务

systemctl enable --now   keepalived.service 

5.测试一下:用抓包命令来测试一下

tcpdump -i ens33 -nn host 224.0.0.18

让后将KA1的keepalived的服务停止 

KA2就来了

此时VIP就移动到了KA2上

在启动KA1keepalived的服务(默认是抢占模式!

所以你重启KA1 keepalived服务时 VIP会回到KA1上!

此时虚拟路由就配置完成啦!

五:keepalived虚拟路由的通讯设定

目的:为了让VIP能够通信

默认情况下ping 172.25.254.100 是ping不通的

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

vim /etc/keepalived/keepalived.conf 

(1)方法一:注释vrrp_strict

(2)方法二:开启vrrp_strict 并开启vrrp_iptables

编辑完成后退出保存!

重启服务 systemctl restart keepalived.service

(3)测试:

结果:

iptables -nL

ping 172.25.254.100 此时就可以ping通啦

此时实验就结束啦!

六、keepalived的日志分离

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

(1)vim /etc/sysconfig/keepalived.conf 

输入:

KEEPALIVED_OPTIONS="-D  -S  6 "     这里的范围0-7

(2)vim /etc/rsyslog.conf

添加:

local6 *                      /var/log/keepalived.log

重启服务

systemctl restart rsyslog.service

结果图:

七、keepalived的独立子配置文件

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

vim /etc/keepalived/keepalived.conf 

将要分离的部分注释掉

然后添加:

include. " /etc/keepalived/conf. d/* . conf"

2.vim /etc/keepalived/conf.d/172.25.254.200.conf

最后启动服务

systemctl restart keepalived.service

如果能重启服务说明配置文件没有问题

八、非抢占式模式与延迟抢占模式

非抢占模式:
默认为抢占模式 preempt ,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色,
这样会使 vip KA 主机中来回漂移,造成网络抖动,
建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色 非抢占模块下, 如果原主机 down , VIP 迁移至的新主机 , 后续也发生 down , 仍会将 VIP 迁移回原主机。
抢占延迟模式:
即优先级高的主机恢复后,不会立即抢回 VIP ,而是延迟一段时间(默认 300s )再抢回 VIP
(1)非抢占模式

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

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

vim /etc/keepalived/keepalived.conf 

KA1:

 KA2:

重启服务   systemctl restart keepalived.service 

测试结果:当重启keepalived时候就挂掉了 所以抓包效果图 首先回答的是KA2

当在把KA2停止服务时才会回到KA1

这个就是非抢占式的效果(简单解释当VIP不会因为优先级回到谁的手上只要当一台主机挂掉时才会将vip移到另外一台主机)

(2)延迟抢占模式

1.设定抢占延迟为5秒

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

vim /etc/keepalived/keepalived.conf 

测试结果:

将KA1的keepalived停用

systemctl stop keepalived.service

此时VIP在ka2这里

在KA1重启keepalived服务

systemctl restart keepalived.service

等5秒后利用ifconfig查看一下

此时KA2的VIP就消失到KA1上去了

此时这个实验就结束啦!

九:单播模式的设定

(1)配置keepalived主配置文件

1.进入到keepalived的主配置文件:(KA1与KA2都需要配置)

vim /etc/keepalived/keepalived.conf 

KA1:

KA2:

重启服务   systemctl restart keepalived.service 

(2)测试:

在KA1上抓包:

tcpdump -i ens33  -nn src host  172.25.254.10 and dst 172.25.254.20

KA2上抓包

tcpdump -i ens33  -nn src host  172.25.254.20 and dst 172.25.254.10

十、keepalived-邮件通知

(1)下载环境需要发邮件的工具

  yum install mailx -y

   在rhel7.9中是不需要下载的

(2)配置邮件服务器

打开QQ邮箱点击账号与安全

点击安全设置

点击生成授权码

KA1:

vim /etc/mail.rc 进入配置文件后

echo hello world | mail -s test 1975180502@qq.com 测试一下

测试结果:

KA2:

vim /etc/mail.rc 进入配置文件后

echo test | mail -s test 1975180502@qq.com 测试一下

测试结果:

(3)实现 Keepalived 状态切换的通知脚本

KA1与KA2都要配置,配置内容相同

1.写脚本 

vim /etc/keepalived/mail.sh 

2.添加执行权限:

chmod + x /etc/keepalived/mail.sh

3.脚本调用方法:

KA1与KA2都要配置

进入到keepalived的主配置文件中:

vim /etc/keepalived/keepalived

添加:

notify_master "/etc/keepalived/mail.sh master"
 notify_backup "/etc/keepalived/mail.sh backup"
 notify_fault "/etc/keepalived/mail.sh fault"

测试:

KA1与KA2:

先测试脚本能不能执行!

bash /etc/keepalived/mail.sh fault

结果:

先将KA1的keepalived的服务关闭,然后在启动服务

在将KA2的keepalived的服务关闭,然后在启动服务

命令:关闭:systemctl stop keepalived.service 

           开启:systemctl restart keepalived.service 

结果:

此时这个实验就结束啦!!
 

十 一、keepalived双主模式

master/slave 的单主架构,同一时间只有一个 Keepalived 对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master 的双主架构,解决此问题。
(1)master/master 的双主架构:
即将两个或以上 VIP 分别运行在不同的 keepalived 服务器,以实现服务器并行提供 web 访问的目的,提高 服务器资源利用率。

进入到keepalived的主配置文件中:

vim /etc/keepalived/keepalived

1.KA1:

重启服务:systemctl restart keepalived.service 

2.KA2:

  重启服务:systemctl restart keepalived.service 

(2)测试:

KA1:

KA2:

十 二、keepalived-ipvs的设定

(1)准备web服务器并使用脚本绑定VIPweb服务器lo网卡
RS1和RS2
1.下载httpd服务
yum install httpd -y

rs1:echo web1-172.25.254.110 > /var/www/html/index.html

rs2:echo web2-172.25.254.120>/var/www/html/index.html

2.KA1与KA2
添加环回
 ip a a 172.25.254.100/32  dev lo
vim /etc/sysctl.d/arp.conf  进入到这个文件编辑
(2)永久关闭ARP响应

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl --system

(3)配置keepalived

KA1:与KA2

vim /etc/keepalived/keepalived.conf

(4)测试

测式结果:

下载 yum install ipvsadm  -y 

ipvsadm -C    清除一下策略

重启服务:

systemctl restart keepalived.service 

ipvsadm -Ln 查看一下

此时自动生成新策略

访问VIP:

此时停止RS1的httpd服务

systemctl stop httpd

查看对比图 此时RS1的策略消失

停止KA2的keepalived服务

ifconfig查看一下:

此时KA2的VIP移动到KA1

此时实现就结束啦!

十 三、keepalived-vrrp脚本控制vip

keepalived 利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先 动态调整,从而实现其它应用的高可用性功能

在KA1的主机上进行这个实验

(1)编写脚本

vim /etc/keepalived/test.sh

写入

#!/bin/bash
[ -f "/mnt/lee" ]

加权限

chmod +x /etc/keepalived/test.sh 

(2)测试一下脚本:

sh /etc/keepalived/test.sh 

echo $?

(3)在keepalived中定义
vim /etc/keepalived/keepalived.conf

vrrp_instance  VI_1模块中添加

(4)配置完成后,测试

1.将之前测试创建的目录删除 rm -rf /mnt/lee

2.重启服务 systemctl restart keepalived.service

3.ifconifg

4.创建目录  touch /mnt/lee

5.在KA2上ifconfig查看一下

此时KA1的VIP就移动到KA2上了

此时实验就结束啦!

十 四、keepalived+haproxy的高可用集群

(1)KA1与KA2都要下载haproxy服务
yum install haproxy -y
(2)写脚本(KA1)

当发现haproxy挂掉时

vim /etc/keepalived/test.sh 

(3)配置keepalived文件(KA1)

将keeplived 里面的东西注释掉 

 vim /etc/keepalived/keepalived.conf

(4)在两个ka1ka2两个节点启用内核参数

进行远程监控(本机没有这个IP也能正常启动)

vim /etc/sysctl.conf
添加:net.ipv4.ip_nonlocal_bind=1
sysctl -p 让文件生效

(5)配置haproxy(KA1与KA2都要配置)

vim /etc/haproxy/haproxy.cfg


启动haproxy 服务

systemctl enable --now haproxy

查看端口

netstat - antlupe  | grep haproxy

(6)在RS1/RS2的主机上删除lo


ip a d 172.25.254.100/32 dev lo


(7)ARP响应

vim /etc/sysctl.d/arp.conf

sysctl --system

(7)测试一下网络环境是否搭建好

在KA1 上访问RS1与RS2

在本地访问一下 172.25.254.100



 

(8)测试:

在本地执行循环

do ;curl 172.25.254.100;sleep1;done

将KA1haproxy 挂掉

systemctl stop haproxy

此时可以看到三秒后 重新开始运行
ifconfig

KA1的VIP移到KA2的上面

重启服务后就会回到KA1上

systemctl restart haproxy

小结一下:
在做这些实验的过程中,遇到了把VIP搞没了的情况,我是因为在keepalived的主配置文件中 写文件时多写了一个 } (花括号) 所以在后面几个实验时 一定要注意括号 以及添加的位置!
到这里我的分享就结束啦!!!
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值