当前位置:文档之家› 通过QDisk增强Red Hat Cluster Suite的仲裁机制

通过QDisk增强Red Hat Cluster Suite的仲裁机制

通过QDisk增强Red Hat Cluster Suite的仲裁机制(Quorum)

https://www.doczj.com/doc/5c2379394.html,/luosong253/blog/i t em/9a950bc82d56981e7e3e6f5d.html

https://www.doczj.com/doc/5c2379394.html,/jswd_01.htm

QDisk支持少数量集群环境,Red Hat Enterprise Linux 4.4 以上及5.0以上才支持QDisk。

问题提出:多个节点失败使整个集群不正常

假设你配置好你的WEB服务环境,Red HatClustering能够通过多台机器提供可扩展的性能以及一个节点失败,集群会自动切换服务到另一节点。但有时候事情并不是想像的那样,甚至更坏。比如,一个四节点的集群环境,一旦两个节点故障,整个集群就会挂起,停止服务。这并不是我们希望的情况。

本文就是解释如何使用QDisk工具来发挥共享存储优势,达到你的应用运行连续性要求。

什么是Quorum, quorate, QDisk?

集群(clustering)是一个“聚集”问题,它基于成员能力,它还具有民主特征并通过投票来决定下一步的行为。例如重启一台挂起的机器等。对于一个完全的民主的环境,超过半数的选票是必须的。所以Quorum就是集群存在的最少个数。这样对于一个3节点的集群,最少需要2个节点激活才有效。一个6节点集群最少需要4个节点激活,以此类推,公式一般就是集群至少有(n/2+1)

个节点数就会建立Quorate状态,也就存在Quorum(仲裁),集群才能工

作。

RedHat Cluster Suite 在Enterprise Linux2.1使用共享磁盘分区来协调集群状态,IP网络作为备份。在Enterprise Linux3切换IP网络作为主要协调集群状态而共享磁盘分区作为备份。在Enterprise Linux 4和5,Cluster Suite结合了GFS(全局文件系统)使用IP网络作为协调机制,不再需要Quorum分区。这样集群也可以在没有SAN共享盘阵下运行,再加上基于IP网络的仲裁具有更好的更扩展性,尤其在大规模集群节点环境中(大于16个节点)但是当集群节点没有那么多的时候,比如9个节点的集群,虽说失去足够多的节点来破坏Quorum的机会很少,但是只要4个以上的节点失败,整个集的Quorum就没有了,集群也就不能正常工作。但对于3-4个节点的案例,只要2台机器故障,整个集群就会有问题,这种案例又很多。当然你可以通过增加冗余的机器来增加

Quorum计数,但这样太不现实,尤其是如果你本身就配置了SAN存储情况下。所以一种替代的方法,我们可通过已有的SAN共享存储的一小块分区来支持Quorum。

Quorum Disk (QDisk) (仲裁机制)

为了解决小规模集群存在的Quorum问题,Red Hat Cluster Suite参照RHEL3下面的cluster的Quorum机制,引入了Qdisk,但和RHEL 3 下面工作原理有些不同,下面图示它的工作原理。

QDisk使用一个小于10MB的共享磁盘分区,Qdiskd进程运行在集群的所有节点上,定期评估自身的健康情况,然后把它的状态信息放入到指定的共享磁盘分区。每qdiskd接着查看其他节点的状态,并传递信息给其他节点QDisk分区。在正常情况下,集群的Quorum就是每个节点计数再加上QDisk分区的计数和。如上面例子,总共quorum计数是7,每个节点计数为1,QDisk为3。这样,在一个节点A上,QDisk经过几次偿试都不能访问它的共享磁盘分区,那么运行在另一节点B上的qdiskd进程会请求节点A被隔离,这样会重启节点A并重新加入集群中。

Heuristics(试探)选项来增加可靠性

作为一个选项,一个或更多的试探方法可以增加到qdisk的配置中,试探就是测试能否访问qdisk分区,一个典型的测试方法包括能够访问到路由/网关。如果试探失败,QDisk默认会重启节点使其进入正常工作状态。minimum_score 指出试探成功计数。

在集群数据库(如Oracle RAC)中使用DLM 和QDisk

我们进一步来学习如何设置QDisk,分布式锁管理(DLM)已经被认证支持OracleRAC10gR2,通过DLM消除了额外锁管理器的需求,减少成本投入。QDisk 确保任一节点失败RAC仍然可以持续运行。使用DLM替换GULM操作非常简单(可以参考Oracle Real Application Clusters GFS:Oracle RAC GFS )。

现在,参照上面的图示我们建一个四节点的集群,这意味着总共quorum为7,每个节点为1,quorum分区为3。该分区必须为裸设备分区(raw devices),不会被clvm所管理。

初始化QDisk

设置一个Quorum磁盘分区也非常简单,首先,建立一个共享的quorum分区,第二,设置集群配置。本例使用11MB分区/dev/sdi1,可以通过cat

/proc/partitions 或用parted查看。建议10MB的分区。

[root@et-virt09 ~]# cat /proc/partitions

major minor #blocks name

8 0 71687325 sda

8 1 104391 sda1

8 2 71577607 sda2

: :

8 128 55587840 sdi

8 129 11248 sdi1

8 130 ******** sdi2

8 144 53483520 sdj

8 145 53483504 sdj1

[root@et-virt05 ~]# parted /dev/sdi

GNU Parted 1.8.1

Using /dev/sdi

Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p

Model: EQLOGIC 100E-00 (scsi)

Disk /dev/sdi: 56.9GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Number Start End Size Type File system Flags

1 16.4kB 11.5MB 11.5MB primary

2 11.5MB 56.9GB 56.9GB primary

接下来mkqdisk命令可以用可准备quorum分区,它将会初始化16个区-集群允许QDisk使用的最大尺寸。简单的指定设备及唯一卷标名就可以了。卷标会被cluster.conf使用。运行的结果可以通过"mkqdisk -L"来查看。

[root@et-virt08 ~]# mkqdisk -c /dev/sdi1 -l rac_qdisk

mkqdisk v0.5.1

Writing new quorum disk label 'rac_qdisk' to /dev/sdi1.

WARNING: About to destroy all data on /dev/sdi1; proceed [N/y] ? y Initializing status block for node 1...

Initializing status block for node 2...

: : :

Initializing status block for node 16...

[root@et-virt08 ~]# mkqdisk -L

mkqdisk v0.5.1

/dev/sdi1:

Magic: eb7a62c2

Label: rac_qdisk

Created: Thu Dec 6 14:40:07 2007

Host: https://www.doczj.com/doc/5c2379394.html,

集群配置

你可以通过Conga来配置QDisk的使用。

quorum分区指定投票数为3,该值是一个少于集群节点数的值。这意味着只需一个节点加上quorum分区就捅有quorum,集群就会正常工作。另外卷标要输入,不是设备名,设备名有可能会在重启后发生变化,但卷标方式不会发生改变。做为例子,没有加入“试探” 选项。其缺省值为1。注意,QDisk每3秒执行一次评估,TKO值为23,代表允许23次失败共计69秒。这意味着如果一个节点不能连接到qdisk区,它会被标为失败的quorum磁盘,会被集群隔离。这样会留出足够的时间允许RAC在一个节点失败后作出反应,本例RAC超时设为60秒。

RAC使用“自隔离”, Red Hat Cluster随后再隔离并重启失败的节点。

同样地,cman下的deadnode_timeout(这个参数是rhel5的,这个教程是rhel4 , rhel5 要加一条参数 135秒)设为135秒,1.5倍于qdisk 的超时时间,135秒后,cman将发出fence(隔离)指令并重启故障节点。对于非RAC的情况,其值一般不用修改。你可以直接在/etc/cluster/cluster.conf 配置文件中修改。通过ccs_tool更新所有节点。

如果要缩短其时间,其他参数也会缩短。

另外要注意的是expected_nodes="7",这包括qdisk分区的3在内。

name="Oracle-RAC1">

name="wti_fence" passwd="password"/>

post_join_delay="3"/>

编辑、修改cluster.conf文件

[root@et-virt05 cluster]# cp cluster.conf cluster.conf.new

[root@et-virt05 cluster]# vi cluster.conf.new

[root@et-virt05 cluster]# ccs_tool update cluster.conf.new

两个节点集群情况

两个节点的集群也是常见的,但是quorum在这里做为一个特例,因为(n/2+1),当两个节点时,其值为2,如果按常规就无法正常工作。所以一般情况,集群中一个节点失败,另一个节点就会接管。但是,有一种临界情况,如果两节点间网络出现故障,两节点会互相

认为对方失败,这种情况就是通常所说的“裂脑”,每个节点都会去fence另一节点,这样会形成两节点不断互相重启现象。通过Qdisk就可以避免这种情况的发生。“试探”选项可以用来评估网络连接是否正常。典型的配置就是ping一个路由或网关。如下例:

注意:如果不带QDisk的两节点cluster,在cluster.conf中需要two_node="1"和expected_votes="1"。

带QDisk, expected_count应该为“3”,two_node 为

“0”(或者去掉two_node字段)

结束语

集群是一种高可用性、可扩展性技术,Qdisk提供了一种在小规模集群下更有效的保护集群完整性的方法。

min_score < score必须

votes 票数interval 次数tko 时间间隔

才两个节点应该给一个权重votes="1"就够了,(1+1+1)/2 +1>=2 集群还是能正常运作的了。这里面qdisk的故障投票时间为:3X10=30s。

scorer > min_score

注意了这几个项之后,就可以解决了。

相关主题
文本预览
相关文档 最新文档