一.高可用集群
1.1.高可用集群的类型
LB:Load Balance 负载均衡
HA:High Availability 高可用集群 数据库、
Redis SPoF: Single Point of Failure,解决单点故障
HPC:High Performance Computing 高性能集群,解决单个主机算力不足的问题
1.2.系统可用性
A = MTBF / (MTBF+MTTR)
MTBF:在线时间
MTTR:平均故障处理时间
1.3.系统故障
硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素
软件故障:设计缺陷 bug
1.4 实现高可用
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active--> HEARTBEAT--> active
1.5.VRRP:Virtual Router Redundancy Protocol
虚拟路由冗余协议,解决静态网关单点风险
物理层:路由器、三层交换机
软件层:keepalived
1.5.1.VRRP 相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器: 1.master:主设备 2.backup:备用设备 3.priority:优先级
1.5.2 VRRP 相关技术
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全认证:
1.无认证
2.简单字符认证:预共享密钥
3.MD5
工作模式: 主/备:单虚拟路由器 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
二.keepalived
2.1.keepalived是什么
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
功能:
1.基于vrrp协议完成地址流动
2.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
3.为ipvs集群的各RS做健康状态检测
4.基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.2.keepalived架构
用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测real server
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成IPVS规则
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
2.3.Keepalived 环境准备
各节点时间必须同步:ntp, chrony
关闭防火墙及SELinux
各节点之间可通过主机名互相通信:非必须
建议使用/etc/hosts文件实现:非必须
各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
2.4.keepalived 相关文件
软件包名:keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
配置文件示例:/usr/share/doc/keepalived/
Unit File:/lib/systemd/system/keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived
2.5.Keepalived 实验环境配置
dnf install keepalived -y
systemctl start keepalived
2.5.1.实验环境配置
主机 | ip | vip |
KA1 | 172.25.254.10 | 172.25.254.100 |
KA2 | 172.25.254.20 | 172.25.254.100 |
realserver1 | 172.25.254.110 | 172.25.254.100 |
realserver2 | 172.25.254.120 | 172.25.254.100 |
realserver1和realserver2安装httpd并启动服务:
[root@realserver1 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# systemctl enable --now httpd
[root@realserver2 ~]# yum install httpd -y
[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# systemctl enable --now httpd
测试:
说明环境完好,可以进行下一步实验
2.5.2.虚拟路由配置
在KA1和KA2中安装keepalived:
yum install keepalived -y
全局设定:
vim /etc/keepalived/keepalived.conf
vip设定:
启动服务:
systemctl enable --now keepalived.service
测试:
同理KA2也要设定VIP
快捷方法:
scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf
修改文件
注意:优先级不能相同
systemctl enable --now keepalived.service
抓包测试:
虚拟路由的通讯设定:
在KA1和KA2中添加
重启服务:
systemctl restart keepalived.service
测试:
注意:
这两个要开一定都开或者都注释
2.5.3.keepalived日志分离
进入日志中修改(范围0~7)
重启服务
[root@ka1 ~]# systemctl restart keepalived.service
修改日志中的内容并重启服务:
[root@ka1 ~]# vim /etc/rsyslog.conf
[root@ka1 ~]# systemctl restart rsyslog.service
测试:
2.5.4.实现独立子配置文件
当生产环境复杂时, /etc/keepalived/keepalived.conf
文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件
创建文件编辑文件:
mkdir -p /etc/keepalived/conf.d
vim /etc/keepalived/conf.d/172.25.254.100.conf
在/etc/keepalived/keepalived.conf修改文件
重启服务:
systemctl restart keepalived.service
三.keepalived实验
3.1.抢占模式和非抢占模式
3.1.1.非抢占模式 nopreempt
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP,并将之前的注释
KA1:
KA2:(只需添加nopreempt)
重启KA1和KA2,查看vip:
只有当KA2服务关闭后,KA1才会有vip
3.1.2.抢占延迟模式 preempt_delay
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP
如图:为延迟5s,KA1和KA2都需设定
测试:原本在KA2上的vip回到了KA1
注意:做完此实验后最好将配置修改回去
3.2.VIP单播配置
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
KA1:
KA2:
重启服务
注意:以下两个参数一定要注释!!!
抓包测试:
3.3. Keepalived 通知脚本配置
3.3.1.邮件通知
登录QQ邮箱,点击账号与安全
点击安全设置,生成授权码
编辑mail.rc
注意:填写自己邮箱,password为授权码
发送邮件:
echo hello world | mail -s test 1952265563@qq.com
测试:
3.3.2编写脚本
创建mail.sh
完成后,给脚本加权限
chmod +x /etc/keepalived/mail.sh
在keepalived.conf添加调用方法
测试:
3.4.双主模式:
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。 master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率
虚拟路由:
重启服务,查看VIP:
停止KA2的服务:
3.5.实现IPVS的高可用性
3.5.1.实现单主的 LVS-DR 模式
在realserver1和realserver2上进行配置:
ip add add 172.25.254.100/32 dev lo
创建arp.conf并编写:
测试命令是否生效:
[root@realserver2 ~]# sysctl --system
同理,realserver1也要配置
安装ipvsadm:
yum install ipvsadm -y
修改keepalived配置:
重启:
测试:
当关闭一台真机时,
测试: