一、为什么要用keepalived
LVS通过IP、MAC地址对后端服务器进行调用,但调用中缺少监听功能,所以我们在其中引入了Haproxy;Haproxy首先能够完善监听功能,在此基础上,支持七层网络,通过七层报文对数据进行分析,从而实现动静分离(ACL),与此同时,Haproxy同时缺少主机备份功能,为了达成高集群的效果,引入了Keepalived。
二、VRRP协议
如图所示,配置两台路由器组,各自有一个IP,一旦一方出现问题,会将IP迁移到另一台路由器上,两台路由器组会通过VRRP协议发送组播,组播地址在收到信息(Heartbeat)后判断是否存在问题,若存在问题,则将IP进行迁移。
抢占模式非抢占模式:顾名思义,两台路由器组,哪方抢占模式,哪方取走双方IP
安全认证:MD5、无认证、共享密钥
工作模式:主/备(一台使用一台闲置) 主/主(两台都有VIP,负责不同业务,互为主备)
三、keepalived组件与架构
用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测
real server system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成IPVS规则
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
四、环境准备
1.配置网络
2.查询selinux与防火墙是否关闭
其他三台类似
3.给两台服务器配置httpd(下载完记得开启)
[root@realserver1 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver2 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.120 > /var/www/html/index.html
最后访问确认
五、虚拟路由配置
1.安装keepalived
[root@ka1 ~]# yum install keepalived -y
[root@ka2 ~]# yum install keepalived -y
2.安装完毕后,查询keepalived相关配置文件
[root@ka1 ~]# rpm -ql keepalived
/etc/keepalived ->配置目录
/etc/keepalived/keepalived.conf ->主配置文件
/etc/sysconfig/keepalived ->对启动进程进行设定
/usr/lib/systemd/system/keepalived.service ->启动服务的脚本
/usr/sbin/keeplived ->执行的命令
3.进入主配置文件进行配置
global 全局设置
vrrp 虚拟路由做设定
配置完成后重启,查询VIP
同样对ka2进行配置,对ka1复制即可
复制后打开文件,对其中属性进行修改即可
priority设为80(优先级小于ka1)
对224.0.0.18进行抓包查询
此时只有10没有20 是因为优先级 把10关了(模拟故障)就可以看到20
此时20也有了VIP
再把10的打开,发现20的VIP没了,抓包得到的报文又回到了10
同样,查看10的ip 发现vip又回到10了
此时ka1有vip,但是ping不通
查询网关发现,报文传输过来全部被丢弃
为了ping通,需要在参数配置里,加入vrrp_iptables
此时再ping 就已ping通
ping通的另一种方法就是将vrrp_strict与vrrp_iptables同时注释掉(一同在或一同无)都可以ping通
六、日志分离
进入日志文件(/etc/sysconfig/keepalived)并进行编辑
重启后进入rsyslog文件配置
此时cat查看
七、实现独立子配置文件
环境复杂时,文件内容过多不宜管理
可利用include指令实现包含子配置文件
使用include 会自动读取目录下的.conf文件从而实现子配置文件管理
创建文件并进行编辑,编辑后重启,查看vip是否存在
说明include划分使用成功
八、抢占与非抢占模式
1.非抢占模式
两台ka1、ka2配置时加入nopreempt,同时将两台状态都改为BACKUP
而后重启设置,vip在ka2主机上。
将ka2停止后,vip又回到了ka1上
这就很好的诠释了非抢占模式的概念(即vip搁置在其中,哪台先启动哪台先拥有且不会因为优先级等等进行抢夺)
2.延迟抢占模式
设置延迟时间为5s
将ka1停止后,vip到ka2上
此时重新打开ka1,vip并没有立即回到ka1上,而是在延时5s后回到
九、VIP单播配置
打开配置,在ka1中添加如下单播配置
同样,20与其相反
但是,此时开始抓包,并未有任何反应
打开网卡配置查看,发现连vip都没了
然后查看文件(确保配置无误)、防火墙设置、selinux设置等等,发现并没有问题
最后查找相关资料,发现必须要同时把这两个相关配置注释掉才可以
此时再进行相关查询,发现一切正常
十、邮件通知
下载安装包
在qq邮箱里生成授权码
编辑配置,输入个人账号信息
而后发送邮件,打开邮箱发现已收到
编写脚本
加权限
打开主配置文件,添加如下配置
执行脚本
[root@ka1 ~]# /etc/keepalived/mail.sh fault
十一、双主架构
编辑双主配置
ka1:
ka2:
配置完成后,重启查看
由图可知 eth0:1的主在ka1 eth0:2的主在ka2
stop掉ka2的keepalive后,发现eth0:2在ka1中出现
十二、单主LVS-DR模式
ka1进入编辑文档进行配置
ka2进行配置编辑
rs1配置
进入/etc/sysctl.d/arp.conf目录下
[root@realserver1 ~]# sysctl --system
[root@realserver1 ~]# sysctl -p
rs2同理
[root@realserver2 ~]# sysctl --system
[root@realserver2 ~]# sysctl -p
十三、利用keepalived实现haproxy高可用
1.对两台服务器进行http搭建
2.对ka1ka2进行配置文件编辑
[root@ka1 ~]# vim /etc/sysctl.conf
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg
进入keepalived配置文件进行编辑
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
最后重启
同样,对ka2进行配置
[root@ka2 ~]# vim /etc/sysctl.conf
[root@ka2 ~]# sysctl -p
下载haproxy
[root@ka2 ~]# yum install haproxy -y
[root@ka2 ~]# vim /etc/haproxy/haproxy.cfg
编写脚本
[root@ka2 ~]# vim /etc/keepalived/haproxy.sh
加权
最后进入keepalived文件进行编辑配置
完成后重启,配置完毕
[root@ka2 ~]# systemctl restart keepalived.service