KeepAlived可以解决nginx、LVS等各种服务的高可用。
集群可以分为三类:
1.LB:Load Balance 负载均衡
LVS/HAProxy/nginx(http/upstream, stream/upstream)
2.HA:High Availability 高可用集群
数据库、Zookeeper、Redis
SPoF: Single Point of Failure,解决单点故障
3.HPC:High Performance Computing 高性能集群
实现高可用:
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
一个节点会面临单点失败的问题,所以准备两个节点,彼此之间监控对方的状态。节点之间通过心跳线HEARTBEAT连接,相互通讯判断对方的健康性。一旦其中一个挂了,就由另一个来提供服务。
- active/passive 主/备
- active/active 双主
- active –> HEARTBEAT –> passive
- active <–> HEARTBEAT <–> active
HA Cluster实现方案
VRRP:Virtual Router Redundancy Protocol
VRRP协议(虚拟路由器冗余协议)是keepalived的一个核心组件,借鉴了物理路由器上的技术,后来被引入到linux,解决静态网关单点风险。
- 物理层:路由器、三层交换机
- 软件层:keepalived
VRRP 网络层硬件实现
上图两个路由器(左R1,右R2)都有各自的IP(201.1.1.1和201.1.1.2),公司内部的机器要和外部相连需要通过路由器。公司内部机器指向两个不同的路由器可以实现一定程度上的负载均衡,但是仍然解决不了单点失败的问题,如果其中一台路由器坏了,与之相连的机器就会上不了网。而且把所有机器都连上两个路由器,让数据包轮流走不同的网关也不太现实。在这种情况下,我们利用VRRP协议虚拟出一个新的地址(201.1.1.3),这个地址就叫做VIP(虚拟地址)。上图两个物理路由器一起祖成一个虚拟路由器。 让所有内部机器的网关都指向同一个虚拟地址。虚拟地址不是固定在某个路由器上的,它可能运行在R1上,也可能运行在R2上。当VIP运行在R1上,内部机器就通过R1上网,一旦R1坏了VIP会切换到R2上去运行,这时候内部机器就通过R2上网,解决了路由器的高可用问题。
VRRP 相关术语
- 虚拟路由器:Virtual Router
- 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
- VIP:Virtual IP
- VMAC:Virutal MAC (00-00-5e-00-01-VRID)
- 物理路由器:
master:主设备 backup:备用设备 priority:优先级
VRRP 相关技术
通告:心跳,优先级等;周期性 工作方式:抢占式,非抢占式(生产中用非抢占式更稳定)
安全认证(防止误操作):
- 无认证
- 简单字符认证:预共享密钥
- MD5
工作模式:
- 主/备:单虚拟路由器
- 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
KeepAlived架构
KeepAlived分成用户空间和内核空间。IPVS是LVS的核心组件,IPVS wrapper可以把LVS的规则通过KeepAlived写入到LVS的内核空间中,来控制LVS的调度策略集群实现。
用户空间核心组件
vrrp stack:VIP消息通告 checkers:监测real server system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件 IPVS wrapper:生成IPVS规则 Netlink Reflector:网络接口 WatchDog:监控进程
控制组件
提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器
针对网络目的而优化的自己的线程抽象
内存管理组件
为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限