一、高可用集群的基本理论
1.基本概念
①:单点故障(Single Point of Failure)
硬件故障:设计缺陷、wear out(损耗)、自然灾害……
软件故障:设计缺陷 bug
②:健康状态监测
监测手段:基于协议层次监测 ip--->icmp
传输层 nmap......
应用层:获取关键性资源(力度精细,效率低)
监测频次:
状态判断:下线 ok--->fail--->fail--->fail
上线 fail---->ok---->ok
监测过于频繁就会消耗CPU内存资源
back server:
③:系统可用性
SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约)
指标 :99.9%, 99.99%, 99.999%,99.9999%
2.keepalive理论介绍
在高可用集群解决方案中,keepalived属于最为流行,轻量化的HA解决方案,需要经常辅助脚本进行运行工作。
HA解决方案:keepalived heartbeat corosync cman
高可用:active/backup 主节点和备节点,在主节点出现故障,能自动切换到备节点。
优点:轻量级、vrrp协议、基于脚本、可以实现指标99.9%, 99.99%, 99.999%,99.9999%。
高可用思路:①为了实现高可用,需要配置VIP,提供同一个访问接口地址。
②主节点出现故障,备节点必须第一时间将VIP抢占过来,备节点必须时刻监控主节点的健康状态。
③若不是负载均衡调度器,还需考虑共享资源的安全转移,而不仅仅是VIP。
④若主节点健康并恢复服务,备节点需要将VIP还给主节点。
⑤主节点需要定时向备节点通知自己的健康状态,让备节点实时了解主节点健康状态。
⑥主节点、备节点包括整个网络架构时间必须是精确同步,需要基于ntp服务进行同步时间。
原理:在网络中,是以vip方式做的,它不会针对性去找ip地址;只会以组播方式,keepalived一旦形成,就会产生一个vrrp实例组,基于发组播的方式监测实例状态;组播ip范围为D类地址
【注】:①如果两台服务器上同时有VIP,这种现象被称为脑裂。实战中只有一个vip,一旦发生单点故障就会进行迁移。
②nfs发生单点故障时,迁移时需要进行共享数据迁移;nfs需要基于keepalived 实现高可用:rsync_inotify、sernc;MySQL:pxc、MHA)
VRRP协议
VRRP协议:虚拟路由冗余协议
是针对路由器冗余的一种解决方案,目的是为了解决局域网中配置默认网关的单点失效问题,由于网关IP地址为唯一,将多个路由抽象为一个虚拟路由,使用一个IP地址。此IP地址不是物理IP地址,而是虚拟的IP地址,即VIP。在某个路由器出现故障情况下,不影响正常的路由工作。
VRRP说白了就是实现IP地址漂移的,是一种容错协议
keepalived高可用核心就是基于VRRP协议来实现
Keepalive架构体系
在Linux主机上以守护进程方式的实现
Keepalive架构体系图
原理:通过监测TCP(四层)、七层(Http)、加密协议(SSl)等,一旦发现不健康,就会发起系统调用system call或者发送邮件SMTP,通知vrrp stack 协议栈,进行vip抢占。而vrrp协议栈,和checkers(健康状态监测机制)是两个独立的机制,需要WatchDog进行看管
Keepalived是怎么样的架构体系:
Keepalived的架构体系是复杂的,我个人认为最核心的就是vrrp stack,它就是实现vrrp网络迁移的,但是为了实现vrrp网络迁移,我们要对它进行健康状态监测机制,这就是它内部核心模块checkers实现tcp、http、ssl、misc等等相关的状态监测机制;而它同时也会关联到IPVS wrapper实现IPVS内核模块的编写,从而实现lVS功能;同时健康状态监测机制要想关联vrrp协议栈,需要进行系统调用或者发送邮件的方式进行关联;另外万维组件就是Keepalived实现的I/O复用,包括内存管理单元、如何加载配置文件实现Keepalived的一些基本功能
用户空间核心组件:
vrrp stack:VIP消息通告,核心组件,实现vrrp功能,实现vip漂移
checkers:健康状态监测 Real Server,可以基于四层、七层、加密协议SSl
https://keepalived.org/doc/
http://keepalived.org/documentation.html
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成 IPVS 规则
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件(Control Plane):提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器(Scheduler-I/O):针对网络目的而优化的自己的线程抽象
内存管理组件(Memory Mngt):为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
3.keepalive安装和详细操作
keepalived安装
Keepalived程序由C语言开发,轻量、性能强大。
可以使用yum方式进行安装,也可以使用编译安装,区别不大,建议使用yum安装
yum info keepalived
yum -y install keepalived
/usr/sbin/keepalived keepalived主指令文件
/etc/keepalived/keepalived.conf keepalived主配置文件
/usr/lib/systemd/system/keepalived.service 相当于keepalived服务启停脚本
/usr/share/doc/keepalived-1.2.13/samples/ keepalived众多配置的模板
keepalived主配置文件详解
Global配置段
Vrrp配置段:vrrp_instance vrrp synchonization
LVS 配置段
Keepalived配置高可用前提
①:主机名和hosts中定义的主机名保持一致
②:各个主机节点时间同步
③:Iptables和firewalld需要能放行
配置文件部分参数解释:
router_id:每个keepalived主机唯一标识,建议使用当前主机名,如果多节点重名可能会影响切换脚本执行
vrrp_skip_check_adv_addr:对所有通告报文都检查,会比较消耗性能,启用此配置后,
如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict :严格遵守VRRP协议,启用此项后以下状况将无法启动服务
①无VIP地址
②配置了单播邻居
③在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置
vrrp_mcast_group4 224.0.0.18:指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18
vrrp_iptables:此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
Keepalived配置文件配置案例
①:配置主从keepalived主配置文件,完成在指定的网卡上绑定漂移IP
②:由于keepalived工作在抢占模式,配置如果需要手动调度为备节点,需降低优先级即可,另外在主节点和备节点的keepalived主配置文件中配置vrrp脚本,此脚本可以被keepalived实时调度
③:实现keepalived的双主模型
由于备份节点长时间处于备份状态,在某些生产环境,为了提高资源利用率,在某些情况可以新建instance,实现双主模型。
具体详细操作,鉴实验报告keepalived