如何将有问题节点从Linux集群中脱离出来


在之前有关数据中心高可用性系列的文章中,我们讲了如何搭建Linux高可用的架构。同时也让你知道“shoot the other node in the head(使出现问题的节点从集群环境中脱离,简称:STONITH)”技术对于确保在Linux集群中共享存储集成的重要性。在本篇中,你将会学到如何实施“split brain detection(分脑检测,简称:SBD)”STONITH,作为一个使用共享磁盘设备的STONITH程序,可以方便的在大部分环境中进行实施。

目前针对STONITH,有许多不同的程序可被使用。SBD STONITH的优势在于部署的方便性和可靠性。唯一的要求是Linux环境中必须有共享存储。典型意义上说,就是需要一个“光纤存储网络——storage area network”(英文简称:SAN)。如果你没有一个SAN网络,你也可以使用Linux的iSCSI功能来搭建,有关iSCSI的介绍将会在之后的系列中详细阐述。

在SBD STONITH里,Linux集群的节点们使用心跳机制来保持互相之间的信息更新。如果集群中的一个节点发生错误,一条有关此节点的错误记录就会被写下并发送到共享的存储设备。当文件系统资源安全的切换到Linux集群的另一个节点上之后,此节点就必须接受这条错误信息并自己关闭自己。

SBD STONITH是一个简单但有效的方法用来确保在Linux集群环境中数据和其他节点的集成,但是要实现这个功能的前提条件是必须能够进入SAN环境。接下去的步骤描述了如何搭建SBD STONITH环境。

1.首先,你必须创建一个小的逻辑单位(LUN)卷。理论上1MB就足够了,但是为了安全起见,最好的办法是创建一个至少一柱(一般为8MB)的SBD。接下来,你需要找到这个LUN设备独一无二的设备名称,因为这个将会被集群中的节点们看到。典型意义上来说,你会使用multipath –l命令在Linux集群中的一个节点来找出这个LUN所使用的独一无二的设备名称。

2.现在作为root用户,从众多节点中的一个命令行开始,你需要标记你刚刚创建的SBD设备的LUN,使用sbd -d <devicename> create 命令。这条命令会将SBD的信息写入设备,所以不管你使用哪个设备名称,只要你能从那个节点看到这个设备就行。确保当使用此设备工作时,你工作的设备名称不会改变。那就意味着你应该使用/dev/disk/by-id 在一开始来命名设备名称。虽然这些名字又长又丑,但是至少他们不会改变。你可以使用ls-l 命令来查阅“简单的”设备名称。所以定义这个设备/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000 作为SBD STONITH 设备, 使用sbd -d /dev//disk/by-id/scsi-149455400000000000000000003000000250600000f000000 来创建。

4.此时,你可以使用sbd -d /dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000 dump 命令来查看哪些被写入了此设备。这给予了你类似下文的一份输出