目录
1.5 VRRP:(Virtual Router Redundancy Protocol)
5. master/master 的 Keepalived 双主架构
一、高可用集群
可以解决单个主机出现的问题
1.1集群类型
-
LB:(Load Balance )负载均衡
-
LVS/HAProxy/nginx(http/upstream, stream/upstream)
-
HA:(High Availability )高可用集群
数据库、Redis
-
SPoF: Single Point of Failure,解决单点故障
-
HPC:(High Performance Computing )高性能集群
1.2 系统可用性
SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能
等方面所达成的双方共同认可的协议或契约)
A = MTBF / (MTBF+MTTR)
99.95%:(60*24*30)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计指标 :99.9%, 99.99%, 99.999%,99.9999%
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)
-
物理路由器:
-
master:主设备
-
backup:备用设备
-
priority:优先级
-
1.5.2 VRRP 相关技术
-
通告:心跳,优先级等;周期性
-
工作方式:抢占式,非抢占式
-
安全认证:
-
无认证
-
简单字符认证:预共享密钥
-
MD5
-
工作模式:
-
主/备:单虚拟路由器
- 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
二、Keepalived 部署
2.1 keepalived 简介
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
-
功能:
-
基于vrrp协议完成地址流动
-
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
-
为ipvs集群的各RS做健康状态检测
-
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.2 Keepalived 架构
官方文档:
Keepalived User Guide — Keepalived 1.4.3 documentation
图:
-
用户空间核心组件:
-
vrrp stack:VIP消息通告
-
checkers:监测real server
-
system call:实现 vrrp 协议状态转换时调用脚本的功能
-
SMTP:邮件组件
-
IPVS wrapper:生成IPVS规则
-
Netlink Reflector:网络接口
-
WatchDog:监控进程
-
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
-
IO复用器:针对网络目的而优化的自己的线程抽象
-
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
2.3 配置文件语法
查看配置文件的帮助
man keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.200/24 dev eth0 label eth0:1
}
}
2.3 Keepalived 环境准备
主机4台
realserver1 172.25.254.110
realserver2 172.25.254.120
KA1 172.25.254.11
KA2 172.25.254.21
VIP 客户端发出的 172.25.254.200/241.
1. 配环境
给主机克隆7.9(依据自己电脑配置-几核来设定,本实验,防止卡,我都设计为1)
1.1 配置IP地址+主机名字
1.2 检查环境:确保每一台
1.3 相关服务配置 ---配虚拟路由的VIP
现在在 110与120主机上装 apache服务(测试还是使用web)
[root@realserver1 ~]# yum install httpd -y
[root@realserver2 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
安装服务在ka1与ka2上keeplived
[root@ka1 ~]# yum install keepalived -y
打开主配置文件 配置+全局 配虚拟路由的VIP 在配置文件里
出现问题,清空日志,在启动,在查看,排错
重启生效
同理ka2,可以直接考配置文件
在启动
此时20拿不到VIP
检查 ,用抓包命令,测试
此时那不到20,抢占原则,优先级原因
出现20,可以去110服务上远程登录ka1关闭keepalived服务
重启ka1服务
1.4 VIP通信
此时在110上 ping VIP 说不通的
现在让Ping通,让vip通信
-
放法一:配置文件修改 注意9版本加上没有用
在ping ,则通
- 方法二: 都关闭
1.5 日志独立
默认是混合的
[root@ka1 ~]# vim /etc/sysconfig/keepalived
重启+配置日志文件
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# ll /var/log/keepalived.log
1.6 实现独立子文件配置
- 在ka1上 编辑配置文件 主配置文件
[root@ka1 ~]# vim /etc/keepalived//keepalived.conf
- 创建一个目录
[root@ka1 ~]# vim /etc/keepalived//keepalived.conf
[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d
# 在编辑
[root@ka1 ~]# vim /etc/keepalived//keepalived.conf
#重启
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]#
- 相关子配置文件
三、Keepalived 企业应用示例
1. 抢占模式和非抢占模式
- 默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,这样会使vip在KA主机中来回漂移,造成网络抖动,
- 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色
- 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
1.1非抢占
对ka1与ka2上配置文件
重启:
此时VIP在ka1上,只有当ka2 down ka1上才能拿到
down ka1
看ka2
停止ka2后ka1开启就有了
1.2 抢占 延迟
- 抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回
- preempt_delay 指定抢占延迟时间为,默认延迟300s
重启:
重启后
2. VIP单播
组播换单播
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
注意:启用 vrrp_strict 时,不能启用单播
ka1
ka2
抓包测试
[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.11 and dst 172.25.254.21
停下ka1的
则看到ka2上 ,重启则没有
当ka1关闭,ka2上又了,开启后,默认的是抢占模式,ka1上又有了
3. 邮件配置
3.1安装邮件发送工具
[root@ka1 ~]# yum install mailx -y
[root@ka2 ~]# yum install mailx -y
3.2 生成授权码
此时发不了,因为没有文件分发系统,则需要配置相关文件,配置需要网页授权码
[root@ka1 ~]# vim /etc/mail.rc
4. 邮件通知脚本配置
4.1 编辑脚本
[root@ka1 ~]# vim /etc/keepalived/mail.sh
4.2 加权限
4.3 脚本调用
编辑配置文件
4.4 剩余节点 ---ka2
先配置邮件文件
[root@ka2 ~]# vim /etc/mail.rc
脚本
4.6 测试
[root@ka1 ~]# systemctl restart keepalived.service
先让ka2处于关闭状态,重启ka1,在重启ka2
开ka2
此时关掉ka1,ka2为master
(关闭是收不到,服务都down掉咯)
5. master/master 的 Keepalived 双主架构
5.1 实战
5.1.1 实现单主的LVS-DR
- 配主机 sever1和2的网卡 准备web服务器并使用脚本绑定VIP至web服务器lo网卡
- 配置文件
配置内容如下
- 再ka1和ka2上装ipvsadm 服务,方便看效果
- 写脚本
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
配置脚本
-
重启动
查看+清策略
- 客户端访问
- 关闭ka1,还是可以访问
6. 实现其它应用的高可用性 VRRP Script
VRRP Script 脚本配置
6.1 实战案例:利用脚本实现主从角色切换
-
自定义监控源脚本
- 权限
-
定义vrrp_script
进入vim /etc/keepalived/keepalived.conf
- 调用
重启后,创建一个文件,则ka1,优先级变70了,ka2上会出现200vip (优先级70<80)
删除文件后,优先级又恢复100 ,此时重启ka2,ka2上没有了vip
7. keepalived与haproxy搭配实现高可用
-
装haproxy
[root@ka1 ~]# yum install haproxy -y
- 还原环境,lvs与haproxy冲突,关闭lvs服务
- 简单配置
此时需要设置内核参数 两台都需要做
- 写haproxy脚本
- 在ka1与ka2中配置keepalived脚本
- 配置haproxy
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg
同理ka2
- 启动两台的keepalived与haproxy服务