一、keepalived在架构中的作用
RS1与RS2都有相同的业务和相同的配置当你访问时会出现流量分摊不均的
情况就需要用到LVS或者haproxy
LVS是四层调度通过ip端口等进行调度 速度快 性能要求低
haproxy可以提供后端的健康检测,当某个服务器坏了就可以不调度 ,支持7层 可以分析报文对数据进行分析,实现动静分离
当haproxy的主机挂掉时,整个集群访问失败,稳定性就比较低 为了解决这个问题!提出keepalived(保证vip的稳定性)
(1)实现高可用
(2)HEARTBEAT 心跳
用到了VRRP协议 VRRP协议 :虚拟路由冗余协议
二、keepalived 简介
(1)功能
(2)Keepalived 架构
![](https://i-blog.csdnimg.cn/direct/b830eacbb35e49df8248cd48b94b089d.png)
三、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
如果能重启服务说明配置文件没有问题
八、非抢占式模式与延迟抢占模式
(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双主模式
(1)master/master 的双主架构:
进入到keepalived的主配置文件中:
vim /etc/keepalived/keepalived
1.KA1:
重启服务:systemctl restart keepalived.service
2.KA2:
重启服务:systemctl restart keepalived.service
(2)测试:
KA1:
KA2:
十 二、keepalived-ipvs的设定
(1)准备web服务器并使用脚本绑定VIP至web服务器lo网卡
rs1:echo web1-172.25.254.110 > /var/www/html/index.html
rs2:echo web2-172.25.254.120>/var/www/html/index.html
![](https://i-blog.csdnimg.cn/direct/4863d548d80843ccbe6ac7b9dccc79c2.png)
(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
(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
在KA1的主机上进行这个实验
(1)编写脚本
vim /etc/keepalived/test.sh
写入
![](https://i-blog.csdnimg.cn/direct/bf2d1a04c1bd469abfeccf8874ccd1a3.png)
加权限
chmod +x /etc/keepalived/test.sh
(2)测试一下脚本:
sh /etc/keepalived/test.sh
echo $?
(3)在keepalived中定义
在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)在两个ka1和ka2两个节点启用内核参数
进行远程监控(本机没有这个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