Cluster membership,实际就是说GAB能及时更新每个端口的“Node map”,然后其他的进程或内核模块可以询问GAB,以得到当前的Membership。看下面这个输出:
# gabconfig -a | grep “Port a” Port a gen 7e6e7e04 membership ;1
这里的分号“;”是一个占位符,表示Node 0本来是在Cluster里面的,但现在它挂了,所以给它留个位置,等它恢复正常后,仍然在这个位置填上0,表示0号Node回来了。
GAB的Group Membership功能,由GAB自身提供,当一个VCS Cluster启动时,GAB自己会注册并占用一个端口,就是端口“a”。GAB通过这个端口来为其他模块提供服务,并且也用于所有Node的GAB模块 进行状态同步。其它模块通过GAB的端口a,可以向GAB询问当前的Membership状态。比如had,必须通过GAB获取当前的 Membership,如果Membership发生了改变,则它进行相应的处理,例如对ServiceGroup做Faiover。
GAB可以管理多个Membership,但是端口“a”上的membership,是特殊的,因为它代表的是Cluster Node Membership,出现在任何其他membership里的Nodes,都必须先出现在端口a上,因为这个membership表示每个物理的 Node是否处于Cluster中,如果物理Node都不在,那么其他端口上也不可能出现这个Node了。并且,端口a上的Node map由GAB亲自注册并维护。端口名称“a”本身,也表现出其特殊地位。这个Membership因此又有一个特殊的名字,叫做“seed
membership”,相对应这个名称,GAB初始化端口a的过程,就叫做”seeding“。
7.Cluster Membership的初始化过程
1. 准备好2个node的cluster,集群正常运行 # gabconfig -a GAB Port Memberships
===============================================================
Port a gen 71f501 membership 01 Port b gen 71f505 membership 01 Port d gen 71f504 membership 01 Port f gen 71f50e membership 01 Port h gen 71f507 membership 01 Port o gen 71f504 membership 01 Port v gen 71f50a membership 01 Port w gen 71f50c membership 01
2. shutdown其中一个,然后reboot另外一个,预计这个reboot的node启动之后,无法seeding,因为另一个node彻底down掉,达不到预定node数量。node启动后,GAB端口a没有打开 # gabconfig -a GAB Port Memberships
===============================================================
3. 然后观察had的运行状况,had在运行,但它不会执行任何HA相关的管理功能 # ps -ef|grep had
root 3369 1 0 23:58:56 ? 0:00 /opt/VRTSvcs/bin/had root 3531 1 0 23:59:08 ? 0:00
/opt/VRTSvcs/bin/hashadow
4. 然后在node上执行 gabconfig -c -x,对它进行手工seeding,它会启动一个不完整的Cluster,即只有1个Node的cluster。端口a的node map中没有”;“号占位符,表示这个Cluster只有一个Node # gabconfig -c -x # gabconfig -a GAB Port Memberships
=============================================================== Port a gen ab2801 membership 0
5. 等1分钟,再看GAB端口,随着seed membership的建立,其他的软件模块都会相应地向GAB注册自己的端口,并开始工作: # gabconfig -a GAB Port Memberships
=============================================================== Port a gen ab2801 membership 0 Port b gen ab2806 membership 0 Port d gen ab2805 membership 0 Port f gen ab280c membership 0 Port h gen ab2804 membership 0 Port o gen ab2803 membership 0 Port v gen ab2808 membership 0 Port w gen ab280a membership 0
6. 将那台shutdown的机器启动起来,新启动的Node可以自动加入Cluster。因为重启Node的过程中,会尝试自动Seeding,这时候的Node数量,已经满足要求。
# gabconfig -a GAB Port Memberships
=============================================================== Port a gen ab2802 membership 01 Port b gen ab2807 membership 01 Port d gen ab2806 membership 01 Port f gen ab280d membership 01 Port h gen ab2805 membership 01 Port o gen ab2804 membership 01 Port v gen ab2809 membership 01 Port w gen ab280b membership 01
五、Fencing
1.Fencing模块的功能
集群node上都有一个内核模块叫做”vxfen“,它负责仲裁。在5.1以及之前的版本,Fencing模块只能通过一组叫做coordinate disk的共享磁盘来进行仲裁(从Storage Foundation 5.1开始,Fencing也可以使用第三方IPS服务器进行仲裁了)。

