基本概念
两大类服务
无状态(stateless)服务:服务请求间无依赖关系,不需要进行数据复制、同步,失败的请求可能需要重新发送到其他节点。
有状态(stateful)服务:这类服务单个动作可能包含多个请求,服务间的数据需要进行复制和同步来保证状态和一致性。如mysql、RabbitMq等。
两大类高可用模式
Active/Passive
o 单个主节点o 对与stateless的服务,通常会做负载均衡(如用HAProxy),请求有VIP来处理。
o 对于stateful的服务,当主节点上的服务down掉之后,从节点来接管。通常采用如Pacemaker+Corosync来监视这些服务,当主节点发生故障时,由从节点来接管
o 发生failover后,整个系统处于“speed bump”状态
Active/Active
o 多个主节点
o 对于stateless服务,和上面一种方式相同。
o 对于stateful 服务,服务是冗余的,同时所有的节点都有相同的状态,例如一个节点上的数据库更新会同时在其他节点上更新。
o 在failover后,整体系统处于“degraded”状态。
HA主要组件
下面以Redhat RHCS为例
1.集群基础设施(CMAN,DLM,Fencing)
提供基础功能,配置文件管理,membership管理,锁管理和fencing。
2.高可用服务管理(rgmanager)
提供服务faliover
3.集群管理工具(Pacemaker,CSS,Conga)
配置管理工具,用来设定、配置
管理与基础设施、服务管理组件、存储相关的HA软件介绍
Keepalived
- Keepalived是一个用C编写的路由软件,为linux系统和基础设施提供负载均衡和高可用。
- 负载均衡框架依赖于LVS(IPVS)内核模块来提供L4负载均衡。
- Keepalived用一个checkers集根据健康状态来动态自适应地维护和管理负载均衡服务器池。
- 另外,HA使用VRRP协议来实现,VRRP实现路由failover。
两个主要组件:
Health-checker负责健康检查,有以下几种检查模块:
• TCP_CHECK:运行在L4,使用TCP连接测试,如果无响应,那么远端主机被移出server pool。
• HTTP_GET:运行在L5,执行GET HTTP到指定URL,使用MD5算法来对比获取的结果。如果匹配不上,那么服务器会被移出server pool。
• SSL_GET:和HTTP_GET相同,但是使用SSL连接到远程web服务器。Same as HTTP_GET but uses a SSL connection to the remote webservers.
• MISC_CHECK: 可以使用自定义脚本来进行健康检查。这是一种比较好的方式来测试内部应用。如果脚本带有参数,需要用双引号。
VRRP是一中选择协议,这个协议负责动态分配一个虚拟路由到局域网中的一个VRRP路由器 。控制关联到虚拟路由器IP的VRRP路由称为Master,负责转发数据包到这些IP。当Master路由不可用时,VRRP可以动态failover。允许局域网的任何虚拟路由器IP都可以被当做第一跳路由。使用VRRp的好处是提供高可用,并不需要在每个主机上配置动态路由表或路由发现协议。VRRP和LVS是相互独立的,VRRP已经与Keepalived集成。VRRP的主要功能有Failover、VRRP实例同步、Failback、系统调用。
其他组件:
• SMTP通知:SMTP封装器使用异步流方式,可以使Keepalived发送邮件通知。
• IPVS framework:LVS核心接口,是整个负载均衡的基础,所有IPVS负载均衡方式都是通过LVS NAT,DR和TUN实现的。
• IPVS wrapper:用来发送设定的规则到内核ipvs代码。
• Netlink:VRRP部分的核心路由接口,负责VRRP VIP处理。提供高级路由机器他相关网络功能。
• MULTICAST:对于VRRP部分,广播被发送到一个MULTICAST组。
• IPCHAINS framework:IPVS使用netfilter call处理NAT规则。
![](https://i-blog.csdnimg.cn/blog_migrate/db316fa92a64d334683a2c8fd9a80f81.gif)
LVS
LVS是构筑在一个真实服务器集群上。集群整体架构对于终端用户是透明的,用户就好像访问一个单独的服务器。真实服务器和负载均衡器内部通过局域网或广域网连接。负载均衡器可以将请求分发给不同的真实服务器,来并行提供服务,可以使用IP负载均衡或应用级别的负载均衡技术。系统的可伸缩性可以通过增删服务器来实现。高可用方面,如果发现节点或服务失效,会重新配置系统继续提供服务。
![](https://i-blog.csdnimg.cn/blog_migrate/09059bc3432b036cd9de1e3cee40ebf0.png)
LVS 提供了三种 IP 级的负载平衡方法:Virtual Server via NAT 、 Virtual Server via IP Tunneling、 Virtual Server via Direct Routing。
Virtual Server via NAT 方法使用了报文双向重写的方法, Virtual Server via IP Tunneling采用的是报文单向重写的策略, Virtual Server via Direct Routing 采用的是报文转发策略。
HAProxy
HAProxy提供高可用、负载均衡及TCP和HTTP应用代理的解决方案。
- version 1.5 : the most featureful version, supports SSL, IPv6, keep-alive, DDoS protection, etc...
- version 1.4 : the most stable version for people who don't need SSL. Still provides client-side keep-alive
- version 1.3 : the old stable version for companies who cannot upgrade for internal policy reasons.
DRBD
Distributed Replicated Block Device (DRBD)是基于软件、无共享、服务器间块设备内容做镜像复制的、、存储解决方案。DRBD可以理解成基于网络的RAID-1。
DRBD镜像数据:
实时:当设备上的数据发生修改时连续复制。
透明地:将数据存储在镜像设备上的应用不会察觉数据其实存储在多台服务器上。
同步或异步:同步镜像,写入应用会在所有服务器都写完后才提示写入完成。异步镜像表示写入应用会在本地服务写完成后即提示写入完成,而写请求已经发送到集群中每台服务器。
DRBD核心功能是通过内核模块实现的。DRBD为虚拟块设备构成一个驱动,所以DRBD靠近系统I/O stack的底部。DRBD复制方案适用于任意应用的高可用。DRBD不支持在上层添加功能,如不能自动发现文件系统崩溃或添加文件系统(EXT3、XFS)主主集群能力。
DRDB用户空间管理工具:
drbdadm:DRBD高级管理工具,/etc/brdb.conf包含所有配置参数,drbdadm充当drbdsetup和drbdmeta的前端应用,向他们发送指令。
drbdsetup:可以让用户配置加载到内核中的DRBD模块。所有的配置参数都是通过命令行处理的,一般很少用到。
drbdmeta:可以让用户创建、dump、恢复及调整DRBD元数据结构,也很少使用。
DRBD资源角色
DRBD资源主要分为主要和次级。主要DRBD设备读写操作无限制,可以创建、挂载文件系统等。次要的DRBD设备从每个节点的设备接收更新,不允许完全访问。无法被应用使用,不管是读还是写,连只读也不允许的原因是保证缓存一致性。
工作模式
单主模式:只有一个主节点,可以使用任意文件系统。这种方式通常用在典型的failover类型的高可用集群。
双主模式:这种方式需要共享集群文件系统,如GFS、OCFS2,这种模式比较适合负载均衡集群。
复制模式
drbd有三种数据同步模式:异步,半同步,同步:
异步:当数据写到本地磁盘上,并且复制数据包已经被放到tcp发送缓冲区,就认为写入完成。当发生failover时可能会丢失数据。
半同步:内存同步复制,数据已经写到本地磁盘上,并且这些复制数据包已经送达其他节点。通常发生failover时也不会丢失数据。
同步:主节点已写入,从节点磁盘也写入后,才确定写操作完成。单点故障不会导致数据丢失。
在同步模式下只有主、从节点上两块磁盘同时损害才会导致数据丢失。在半同步模式下只有主节点宕机,同时从节点异常停电才会导致数据丢失。
Packemaker
Pacemaker是一个集群资源管理。它实现集群服务的高可用,通过使用消息和成员管理功能(OpenAIS或heartbeat)来发现并恢复节点或资源级别的故障。Pacemaker几乎可以做任何规模的集群,并有一个强大的依赖关系,能准确表达集群资源之间的关系(包括顺序和位置)。Pacemaker并不是Heartbeat的分支,它是CRM(v2资源管理)的延续,CRM原本是为Heartbeat开发的,但后来成为了一个独立的项目。
stonithd:HeartBeat Fencing子系统。
lrmd:本地资源管理进程,为支持的资源类型提供通用接口,直接和资源代理(脚本)交互。
pengine: 策略引擎,基于当前状态和配置计算集群的下一个状态,产生一个包含动作和依赖关系列表的转换图。
cib:集群信息库,包含所有集群选项、节点、资源的定义,以及他们之间的关系,同步更新到所有集群节点。
crmd:集群资源管理进程,主要是PEngine和LRM的消息代理,还会选择一个协调集群活动(包括启停资源)的leader。
openais:OpenAIS消息和成员层。用Corosync替代。
heartbeat:Heartbeat消息层,Heartbeat可替代OpenAIS。
ccm: Consensus Cluster Membership简称,Heartbeat的成员层。
Corosync:一个群组通信系统,是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。OpenAIS从openais0.90开始独立成两部分,一个是Corosync;另一个是AIS标准接口Wilson。Corosync包含OpenAIS的核心框架用来对Wilson的标准接口的使用、管理。它为商用的或开源性的集群提供集群执行框架。