一、VEEP:Virtual Router Redundancy Protocol
1.1.VRRP介绍
虚拟路由冗余协议,用来解决静态网关单点风险。
物理层:路由器、三层交换机
软件层:keepalived
1.2.VRRP相关术语
虚拟路由器:Virtual Router
虚拟路由标识:VRID
VIP:Virtual IP
VMAC:Virtual Mac
物理路由器:
- master:主设备
- backup:备用设备
- priority:优先级
1.3.VRRP相关技术
- 通告:心跳,优先级等;周期性
- 工作方式:抢占式,非抢占式
- 安全认证:
无认证
简单字符认证:预共享密钥
MD5
- 工作模式:
- 主/备:单虚拟路由器
- 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
二、keepalived
2.1.简介
Keepalived是一款开源的、基于Linux的网络服务高可用性和负载均衡工具,它主要用于实现VIP(Virtual IP)漂移,确保在主服务器故障时能自动切换到备用服务器,从而提供不间断的服务。其核心功能包括VRRP(Virtual Router Redundancy Protocol)协议的实现和健康检查,为网络服务提供了强大的冗余备份机制。
Keepalived的核心组件主要有两部分:
1. VRRP模块:VRRP是虚拟路由器冗余协议,用于在网络中创建虚拟路由器,当主路由器失效时,备份路由器能够接管其IP地址,保持网络连接不中断。Keepalived实现了VRRP标准,通过心跳检测来监控路由器状态,确保服务高可用性。
2. LVS(Linux Virtual Server)模块:LVS是Linux内核中的一个负载均衡模块,它允许将多台服务器组织成集群,对外表现为单一的高性能服务器。Keepalived可以配合LVS进行健康检查,根据服务器的实际状态动态调整流量分配,实现负载均衡。
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务。
功能:
- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持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环境准备
主机名 | ip | vip |
ka1 | 172.25.254.10 | 172.25.254.100 |
ka2 | 172.25.254.20 | 172.25.254.200 |
server1 | 172.25.254.110 | 无 |
server2 | 172.25.254.120 | 无 |
test | 172.25.254.131 | 无 |
- 各节点时间必须同步:ntp, chrony
- 关闭防火墙及SELinux
- 各节点之间可通过主机名互相通信:非必须
- 建议使用/etc/hosts文件实现:非必须
- 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
2.4.keepalived企业应用示例
2.4.1.keepalived的全局配置
yum install keepalived -y #安装keepalived
vim /etc/keepalived/keepalived.conf #keepalived的配置文件
设置VIP为172.25.254.100
可以在ka1中看到VIP:
当ka1挂掉后,可以在ka2中看到VIP:
2.4.2.keepalived的日志功能
编辑keepalived日志配置文件:
vim /etc/sysconfig/keepalived
编辑系统日志配置文件:
vim /etc/rsyslog.conf
将keepalived的日志都放在/var/log/keepalived.log
查看该日志文件:
2.4.3.keepalived实现子独立配置文件
新建子配置文件目录:/etc/keepalived/conf.d
mkdir /etc/keepalived/conf.d
进入主配置文件编辑修改:将主配置文件的注释掉,并添加子配置文件路径,将注释掉的内容复制到子配置文件。
vim /etc/keepalived/keepalived.conf
编辑子配置文件:
vim /etc/keepalived/conf.d/172.25.254.100.conf
查看IP:VIP依然生效
2.4.4.非抢占模式
配置文件:两台keepalived
测试:当ka1挂掉后重新上线,VIP依然在ka2主机。
2.4.5.抢占延迟模式
配置文件:两个keepalived主机
测试:当ka1挂掉重新上线后,过10sVIP会回到ka1主机上。
2.4.6.VIP单播配置
配置文件:ka1
ka2
测试:
2.4.7.实现keepalived状态切换的邮件通知
配置邮件客户端:qq邮箱
1、进入qq邮箱账号与安全
2、获取授权码
- 修改ka1,ka2邮件配置文件:
vim /etc/mail.rc
写自己的qq邮箱
- 编写ka1,ka2通知邮箱脚本:
vim /etc/keepalived/mail.sh
- 修改ka1,ka2的主配置文件:
vim /etc/keepalived/keepalived.conf
测试:模拟ka1故障和上线会收到邮件通知
三、keepalived实战案例
3.1.实现单主的 LVS-DR 模式
配置两台后端server:
两台server都要下载apache并写入内容
yum install httpd
#server1
echo webserver1:172.25.254.110 > /var/www/html/index.html
#server2
echo webserver2:172.25.254.120 > /var/www/html/index.html
添加vip:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
配置keepalived
查看策略:
模拟故障,停掉ka1检测:流量全部流向ka2
3.2.利用脚本实现主从角色切换
创建脚本:
vim /etc/keepalived/test.sh
配置keepalived:
创建文件:
touch /mnt/gyj
检测:
3.4.实现HAProxy高可用
下载haproxy:
yum install haproxy -y
在ka1、ka2先配置haproxy
vim /etc/haproxy/haproxy.cfg
在ka1、ka2中启用内核参数:
vim /etc/sysctl.conf
sysctl -p
在ka1中编辑脚本:
[root@ka1 ~]# vim /etc/keepalived/test.sh
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh
在ka1配置keepalived:
vim /etc/keepalived/keepalived.conf
测试:停掉ka1后,后端访问不受影响