VCS中HAD、LLT、GAB、FENCING苹果电脑如何截图各模块工作原理简介
摘要: | 本文详细介绍了VCS中HAD、LLT、GAB、FENCING各模块工作原理,描述了集群节点通讯、集群成员关系建立、fencing的工作过程,对集群分裂及脑裂进行了深入分析。 |
内容: | |
| |
VCS中HAD、LLT、GAB、FENCING各模块工作原理简介
一、 VCS模块简介
HAD: High Availability Daemon,是一个后台程序,VCS用来管理Cluster配置信息,响应用户命令,跟踪VCS AGENT传来的各种resource状态变化。
LLT: 是VCS底层的传输协议,同时也负责监控Cluster节点的心跳信息。
GAB: Group membership / Atomic Broadcast。 是一个用于管理Cluster成员组成,并在Cluster节点间进行原子广播的内核模块。
I/O Fencing: I/O Fencing 使用一种类似投票的机制,来防止Cluster分裂成两个或多个子群集,它保证在网络异常时,只有一个Cluster可以幸存下来。另外,I/O Fencing还利用SCSI-3协议的persistent rervation来保护共享磁盘上的数据。
写稿庐山古诗
二、 HAD
High Availability Daemon,是一个后台程序,VCS用来管理Cluster配置信息,响应用户命令,跟踪VCS AGENT传来的各种resource状态变化。并保持每个Node的状态同步,关于状态同步,有个专门的名称,叫做:“replicated state machine”,zaramanHAD就是这样一个machine。在每个Node上,都有一个HAD进程在运行。
h110121:/->ps -ef|grep had
root 3905 1 0 Feb 16 ? 0:00 /opt/VRTSvcs/bin/hashadow
root 3855 1 0 Feb 16 ? 1:13 /opt/VRTSvcs/bin/had
在每个Node上,VCS用户命令,VCS Agent,GUI等组件,通过一个VCS特有的通信协议(叫Inter Process Messaging – IPM)直接与本机上的HAD通信(intra-system communication)。
以AGENT为例,它和本机的HAD通信的情形如下:
水的反义词如果用户在某个Node上通过命令或GUI,进行了操作,从而VCS的状态(例如配置信息改
变了),或者某个AGENT检测到了 resource状态变化,则命令,或者GUI,或者AGENT,通过IPM将这些变化发送给本地的HAD。然后HAD要负责将这些变化通过网络通知给其 他Node的HAD进程,并且要保证其他节点都正确接收了这些信息,然后其他Node上的HAD进程会在各自的Node上,应用这些变化。由于每个 Node都运行着相同版本的HAD,因此每个Node上的HAD只需要简单地执行与首先发送通知消息的那个Node相同的代码序列。
前面简略地提及,本地命令,GUI,AGENT通过IPM,与本地HAD通信,统称”intra-system communication”。
更加简略地提及:“HAD要负责将这些变化通过网络通知给其他Node的HAD进程”。通过网络,这个说得太过简略了,实际上这一部分,比想象中复杂得多,因为这忽然就涉及到了复杂的网络通信,并且引出了另外两大模块: GAB 和 LLT。Node之间通过网络进行的通信,统称为“inter-system communication”。
三、 LLT
Low Latency Transport protocol,是一个协议。但实际上LLT这个名字在VCS的语境中,包含的内容还要多一些。
1. LLT是一个网络协议
LLT从OSI模型的角度来看,是处于第三层,VCS用LLT代替了IP协议,将其用于VCS Cluster内部节点之间进行网络通信的协议。LLT的特点是高效,低延迟。
在我们说到LLT时,往往指的并不是一个协议,人们都喜欢描述一些实际看得见,摸得着的东西,所以,LLT从物理上来说,是“一 个内核模块(llt) 一个用户进程(lltd)”。llt内核模块实现了LLT协议,而lltd,作为一个操作系统进程,则会定期调用llt内核模块的 功能,发送心跳信息给其它Node(同时也从其他Node接收心跳信息并保存其它Node的心跳状态)。
2. LLT的两大功能:
网络传输:在VCS环境中,GAB调用LLT的功能进行实际的网络传输。当然,这是在内核中发生的内部调用。通过LLT进行的网络传输,为什么是 高效的呢? 因为宫寒怎么办好呢LLT在配置时,允许同时为LLT协议绑定多张网卡(准确的说法其实应该是“绑定多个网络链接”,也可以用“link”这个单词来表示链接的意思), 多个网卡对于LLT来说,是对等的地位,是可以进行负载均衡和容错的冗余连接。LLT将数据平均分布在每个网络链路上,如果某个link挂掉了,则使用剩 余的link来传输数据。LLT最多也只能支持8个links。
一片红叶
监控心跳: LLT负责监控每个Node的心跳,并负责通知GAB的Membership功能,以便处理这个一些丢失心跳的家伙。
具 体地说,就像HAD一样,每个Node上都有一个lltd进程一直在运行。每半秒钟,lltd要通过绑定的links发送自己的心跳信号给其它Node。 LLT模块是知道Cluster中有哪些Node的,它通过unicast单波方式向其他节点逐一发送心跳信号(这里有个问题,将在下文说明)。
心跳信号,大概是这样定义的:
a. 每半秒钟,在每个LLT链接上发送一次
b. 每个Node上运行的LLT模块,会跟踪每个其他Node(学名叫Peer)在每条LLT链路上的心跳信息
c. LLT将每个Node的心跳状态信息通知自己Node上的GAB模块的Membership功能
d. GAB接受到心跳状态信息后,根据该状态信息,决定是否对Membership进行改变
说明一下前面提及的问题:当配置VCS的时候,我们只提供了IP地址或者主机名,作为一个第三层协议的LLT,在以太网中需要知道目标Node的 MAC地址才能正确发送数据帧。而MAC地址并没有在安装的时候提供,也没有被安装程序通过ARP协议自动检测并写入配置文件,那么LLT如何发送数据帧 到目标Node呢?实际是这样的:LLT通过数据链路层的广播协议 – 即通过交换机发送一个广播数据帧(目标mac地址为全“1”,ffff.ffff.ffff的帧)进行
广播,数据帧中包含Cluster ID(而Cluster ID是安装产品的时候指定的,并且每个Cluster是唯一的),然后局域网中所有拥有同一个Cluster ID的其它Node上的LLT模块,会应答,这样,Node就知道自己Cluster的Node中有哪些Node,以及每个Node的每个link的 mac地址了)。
3. 心跳信号的传递过程:
LLT为什么不能替换IP协议? LLT在VCS环境中确实可以很高效地传输数据,但它被设计为只在同一个局域网内工作的协议,而不能被路由,因此无法广泛使用作为通用传输协议。正因为 LLT只专注于服务VCS以及Veritas的其他产品,因此它才能高效地集成在VCS产品中。
LLT配置的一些考虑: LLT的link可以被指定为两种模式其中之一:
High priority link:歌和老街 用于传输心跳及其他所有Cluster内部通信信息。
Low priority link: 正常情况下,只用于传输心跳信息,以及状态信息,传输频率是正常频率的50%,如果其他的High priority都挂掉了,则使用第一个有效的Low priority link来传输所有的Cluster内部通信信息。一旦某一条High priority link恢复正常,则马上切换回去。