RHCS(三)之quorum机制测试(阶段三、四、结论)

阶段三:我们这次试一下非正常退出

模拟宕机方法:

方法一:虚拟机挂起

方法二:echoc>/proc/sysrq-trigger

恢复所有节点(略)

[[email protected] ~]# cman_tool status

……

Nodes: 4

Expected votes: 8

Total votes: 8

Node votes: 2

Quorum: 5 

……

=====Step1:对web3节点进行模拟故障=====

[[email protected] ~]# ssh [email protected] ‘echo c>/proc/sysrq-trigger‘

Sep 22 22:40:18 web1openais[4253]: [TOTEM] The token was lost in the OPERATIONAL state.

#在这之前没有收到web3节点退出的信息,对比阶段二关机状态的日志。

Sep 22 22:40:18 web1 openais[4253]: [TOTEM] Receive multicast socketrecv buffer size (320000 bytes).

Sep 22 22:40:18 web1 openais[4253]: [TOTEM] Transmit multicast socketsend buffer size

……

Sep 22 22:40:30 web1 openais[4253]: [SYNC ] This node is within theprimary component and will provide service.

Sep 22 22:40:30 web1 openais[4253]: [TOTEM] entering OPERATIONAL state.

Sep 22 22:40:30 web1 openais[4253]: [CLM  ] got nodejoin message 192.168.1.201

Sep 22 22:40:30 web1 openais[4253]: [CLM  ] got nodejoin message 192.168.1.202

Sep 22 22:40:30 web1 openais[4253]: [CLM  ] got nodejoin message 192.168.1.204

Sep 22 22:40:30 web1 openais[4253]: [CPG  ] got joinlist message from node 1

Sep 22 22:40:30 web1 openais[4253]: [CPG  ] got joinlist message from node 2

Sep 22 22:40:30 web1 openais[4253]: [CPG  ] got joinlist message from node 4

Sep 22 22:40:35 web1fenced[4272]: fencing node "web3.rocker.com"

Sep 22 22:40:35 web1fenced[4272]: fence "web3.rocker.com" failed

Sep 22 22:40:40 web1fenced[4272]: fencing node "web3.rocker.com"

Sep 22 22:40:40 web1fenced[4272]: fence "web3.rocker.com" failed

Sep 22 22:40:45 web1fenced[4272]: fencing node "web3.rocker.com"

Sep 22 22:40:45 web1fenced[4272]: fence "web3.rocker.com" failed

#我们用了手动fence设备,当集群发现web3节点失联的时候,向管理员申请fenceweb3节点

我们先来看看节点状态

[[email protected] ~]# clustat

Cluster Status for mycluster @ Mon Sep 22 22:42:33 2014

Member Status: Quorate #集群可用

Member Name                                     ID   Status

------ ----                                     ----------

web1.rocker.com                                     1 Online,rgmanager

web2.rocker.com                                     2 Online,Local, rgmanager

web3.rocker.com                                     3 Offline

web4.rocker.com                                     4 Online,rgmanager

Service Name                           Owner (Last)                           State

------- ----                           ----- ------                           -----

service:myservice                      web3.rocker.com                        started  

#但是资源还没有进行转移!

看看quorum

[[email protected] ~]# cman_tool status

……

Nodes: 3

Expected votes: 8

Total votes: 6

Node votes: 2

Quorum: 5  #区别在这里

#Totalvotes改了,意味这web3节点投票失败,然而quorum没有改变。

……

测试一下

=====Step2:web3节点手动fence=====

[[email protected] ~]# fence_ack_manual -n web3.rocker.com

Warning:  If the node"web3.rocker.com" has not been manually fenced

(i.e. power cycled or disconnected from shared storage devices)

the GFS file system may become corrupted and all its data

unrecoverable!  Please verifythat the node shown above has

been reset or disconnected from storage.

Are you certain you want to continue? [yN] y

can‘t open /tmp/fence_manual.fifo: No such file or directory

[[email protected] ~]# touch /tmp/fence_manual.fifo

[[email protected] ~]# fence_ack_manual -n web3.rocker.com -e

Warning:  If the node"web3.rocker.com" has not been manually fenced

(i.e. power cycled or disconnected from shared storage devices)

the GFS file system may become corrupted and all its data

unrecoverable!  Please verifythat the node shown above has

been reset or disconnected from storage.

Are you certain you want to continue? [yN] y

done

#fence成功

#tail /var/log/message

Sep 22 22:52:25 web1 fenced[4272]: fence "web3.rocker.com"overridden by administrator intervention

再看节点状态

[[email protected] ~]# clustat

Cluster Status for mycluster @ Mon Sep 22 22:54:47 2014

Member Status: Quorate

Member Name                                     ID   Status

------ ----                                     ----------

web1.rocker.com                                     1 Online,Local, rgmanager

web2.rocker.com                                     2 Online,rgmanager

web3.rocker.com                                     3 Offline

web4.rocker.com                                     4 Online,rgmanager

Service Name                           Owner (Last)                           State

------- ----                           ----- ------                           -----

service:myservice                      web2.rocker.com                        started

#资源发生转移了

测试

看看quorum

[[email protected] ~]# cman_tool status

……

Nodes: 3

Expected votes: 8

Total votes: 6

Node votes: 2

Quorum: 5  #quorum不变,因为expectedvote也没变

……

=====step3:继续踢!现在用虚拟机web2挂起=====

Sep 22 22:57:14 web1 openais[4253]: [TOTEM] The token was lost in the OPERATIONAL state.

Sep 22 22:57:14 web1 openais[4253]: [TOTEM] Receive multicast socketrecv buffer size (320000 bytes).

Sep 22 22:57:14 web1 openais[4253]: [TOTEM] Transmit multicast socketsend buffer size (221184 bytes).

Sep 22 22:57:14 web1 openais[4253]: [TOTEM] entering GATHER state from2.

……

Sep 22 22:57:26 web1 openais[4253]:[CMAN ] quorum lost, blocking activity

……

Sep 22 22:57:26 web1 openais[4253]: [TOTEM] entering OPERATIONAL state.

Sep 22 22:57:26 web1 openais[4253]: [CLM  ] got nodejoin message 192.168.1.201

Sep 22 22:57:26 web1 ccsd[4247]:Cluster is not quorate.  Refusingconnection.

Sep 22 22:57:26 web1 openais[4253]: [CLM  ] got nodejoin message 192.168.1.204

Sep 22 22:57:26 web1 ccsd[4247]: Error while processing connect:Connection refused

Sep 22 22:57:26 web1 openais[4253]: [CPG  ] got joinlist message from node 1

Sep 22 22:57:26 web1 ccsd[4247]: Invalid descriptor specified (-111).

Sep 22 22:57:26 web1 openais[4253]: [CPG  ] got joinlist message from node 4

Sep 22 22:57:26 web1 ccsd[4247]: Someone may be attempting somethingevil.

Sep 22 22:57:26 web1 ccsd[4247]: Error while processing get: Invalidrequest descriptor

#爽!!!终于出现了!!!集群挂起了。

web1的shell界面报错:

Message from [email protected] at Mon Sep 22 22:57:26 2014 ...

web1 clurgmgrd[4312]: <emerg> #1: Quorum Dissolved

[[email protected] ~]# clustat

Service states unavailable: Operation requires quorum

Cluster Status for mycluster @ Mon Sep 22 22:58:05 2014

Member Status: Inquorate #集群挂起了!

Member Name                                     ID   Status

------ ----                                     ----------

web1.rocker.com                                     1 Online,Local

web2.rocker.com                                     2 Offline

web3.rocker.com                                     3 Offline

web4.rocker.com                                     4 Online

#没有转移到资源

[[email protected] ~]# cman_tool status

……

Nodes: 2

Expected votes: 8

Total votes: 4

Node votes: 2

Quorum: 5 Activity blocked

#因为quorum> Total votes,所以集群挂起了

……

************************************************************************

阶段四:配置qdisk

就是为了这种情况的发生,我们需要配置qdisk(我们之前配置了,在用system-config-cluster新建集群的时候),并且开启qdiskd服务

在ss节点为/dev/sdb分两个区(略)

在ss节点编辑配置文件/etc/tgt/targets.conf,添加一个target

<target iqn.2008-09.com.example:rocker.use.target>

backing-store /dev/sdb

</target>

ss开启iscsi-target服务:

[[email protected] ~]# service tgtd start

Starting SCSI target daemon: Starting target framework daemon

让web所有节点开启iscsi-initial,并且识别target

[[email protected] ~]# for i in web1 web2 web3 web4;do ssh [email protected]$i ‘serviceiscsi start ; iscsiadm -m discovery -t sendtargets -p 192.168.1.205 ; iscsiadm-m node -p 192.168.1.205 -l’;done

查看挂载后的块号

[[email protected] ~]# dmesg

sd 1:0:0:1: Attached scsi disk sdb

sd 1:0:0:1: Attached scsi generic sg6 type 0

[[email protected] ~]# fdisk /dev/sdb -l

Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          63      506016  83  Linux

/dev/sdb2              64         126      506047+ 83  Linux

创建qdisk分区:

在web某一节点设置即可

[[email protected] ~]# mkqdisk -c /dev/sdb1 -l myqdisk

mkqdisk v0.6.0

Writing new quorum disk label ‘myqdisk‘ to /dev/sdb1.

WARNING: About to destroy all data on /dev/sdb1; proceed [N/y] ? y

Initializing status block for node 1...

……

Initializing status block for node 16...

在所有节点开启qdiskd服务

[[email protected] ~]# for i in web1 web2 web3 web4;do ssh [email protected]$i ‘serviceqdiskd start‘;done

Starting the Quorum Disk Daemon:[ OK  ]

Starting the Quorum Disk Daemon:[ OK  ]

Starting the Quorum Disk Daemon:[ OK  ]

Starting the Quorum Disk Daemon:[ OK  ]

查看quorum
[[email protected] ~]# cman_tool status

……

Nodes: 4

Expected votes: 8

Quorum device votes: 2  #qdisk支持投票了

Total votes: 10

Node votes: 2

Quorum: 6 

……

=====step1:web3宕机=====

 

[[email protected] ~]# echo c>/proc/sysrq-trigger

[[email protected] ~]# clustat

Cluster Status for mycluster @ Tue Sep 23 08:55:41 2014

Member Status: Quorate #集群可用

Member Name                         ID   Status

------ ----                         ---- ------

web1.rocker.com                         1 Online, Local, rgmanager

web2.rocker.com                         2 Online, rgmanager

web3.rocker.com                         3 Offline

web4.rocker.com                         4 Online, rgmanager

/dev/disk/by-id/scsi-1IET_00010001-p   0 Online, Quorum Disk

#qdisk开启成功

Service Name               Owner (Last)               State

------- ----               ----- ------               -----

service:myservice          web2.rocker.com            started

#资源转移了

[[email protected] ~]# cman_tool status

……

Nodes: 3

Expected votes: 8

Quorum device votes: 2

Total votes: 8

Node votes: 2

Quorum: 6 

……

=====step2:web2宕机=====

 

[[email protected] ~]# echo c>/proc/sysrq-trigger

[[email protected] ~]# clustat

Cluster Status for mycluster @ Tue Sep 23 08:58:25 2014

Member Status: Quorate

Member Name                         ID   Status

------ ----                         ---- ------

web1.rocker.com                         1 Online, Local,rgmanager

web2.rocker.com                         2 Offline

web3.rocker.com                         3 Offline

web4.rocker.com                         4 Online, rgmanager

/dev/disk/by-id/scsi-1IET_00010001-p    0 Online, Quorum Disk

Service Name               Owner (Last)               State

------- ----               ----- ------               -----

service:myservice          web1.rocker.com            started

[[email protected] ~]# cman_tool status

……

Nodes: 2

Expected votes: 8

Quorum device votes: 2

Total votes: 6

Node votes: 2

Quorum: 6             #这次就不会cluster挂起

……

=====step3:web1节点宕机=====

 

[[email protected] ~]# echo c>/proc/sysrq-trigger

web4 clurgmgrd[4505]: <emerg> #1: Quorum Dissolved

[[email protected] ~]# clustat

Service states unavailable: Operation requires quorum

Cluster Status for mycluster @ Tue Sep 23 09:02:03 2014

Member Status: Inquorate  #集群挂起了

Member Name                         ID   Status

------ ----                         ---- ------

web1.rocker.com                         1 Offline

web2.rocker.com                         2 Offline

web3.rocker.com                         3 Offline

web4.rocker.com                         4 Online, Local

/dev/disk/by-id/scsi-1IET_00010001-p    0 Online

#没有转移资源

[[email protected] ~]# cman_tool status

……

Nodes: 1

Expected votes: 8

Quorum device votes: 2

Total votes: 4

Node votes: 2

Quorum: 6 Activity blocked   #挂了

……

五、结论:

1)在正常关机的情况下,无论是否需要发生资源转移,都会自动把关机的节点踢出去,然后重新计算quorum,不会发生节点数少于过半导致集群挂起;

2)在非正常宕机的情况下,当集群检测到有节点失联,就会通知fence来把它隔离掉,但是,在重新计算quorum后,当节点数少于过半会导致集群挂起;

3)配置了qdisk之后,相当于是总票数的后援,为Total vote加了票数。

关于quorum、vote、Totalvote的关系:

例如4个节点,每个节点2vote,qdisk有2vote。

Total vote=node vote + qdisk vote,这里的Total vote=4X2+2=10

Expected vote=所有节点正常情况下的Total vote +qdisk vote

Quorum=expected vote/2+1,这里的Quorum=10/2+1=6

当检查到关机节点,集群会重新计算Total vote和Quorum。例如,node3关机了,集群重新计算Total vote=2X3+2=8。Quorum=8/2+1=5。

当检测到非正常关机导致与集群失联的节点,Total vote就会重新计算,但是Quorum不变。例如,这里的node2死机了,集群会通知fence设备,把它隔离掉,然后再进行资源在Failover Domain内转移。Total vote=2X3+2=8。但是Quorum保持6不变。当再有节点死机,重新计算得到的Total vote <Quorum,整个集群会挂起。

由此推断,如果把qdisk vote=4,即可实现剩下一台服务器也可以让集群继续工作。

某些资料说,在gfs文件系统上集群,有一个节点就会挂起,我搞不懂什么原理,还有实验如何实施,请大家多多指教。

时间: 2024-08-03 08:59:21

RHCS(三)之quorum机制测试(阶段三、四、结论)的相关文章

RHCS(二)之quorum机制测试(阶段一、二)

四.测试 调试工具: cman_tool.clustat.clusvadm.init 0 测试目的: 1.实现资源转移 2.探究quorum机制和fence机制 测试思路: 不开启qdiskd服务,查看quorum票数,逐个节点关机/模拟宕机,看日志.看quorum: 开启qdiskd服务,查看quorum票数,逐个节点关机/模拟宕机,看日志.看quorum: 阶段一:(移除非资源节点) 所有节点处于正常状态,资源运行在web3节点,没有开启qdisk [[email protected] ~]

android-----事件分发机制测试系列(三)

上一篇我们主要主要是从ViewGroup分发的角度测试了下事件分发机制,但没有涉足多少View的事件分发,也就是说我们没有为MyRelativeLayout.MyLinearLayout.以及MyButton设置Touch和Click监听事件,这一篇将来测试下View的事件分发过程,为了比较简洁的显示打印信息,我简化了布局文件,具体的布局文件代码如下: <com.hzw.eventtest.MyRelativeLayout xmlns:android="http://schemas.and

分布式系统理论之Quorum机制

一,Quorum机制介绍 在分布式系统中有个CAP理论,对于P(分区容忍性)而言,是实际存在 从而无法避免的.因为,分布系统中的处理不是在本机,而是网络中的许多机器相互通信,故网络分区.网络通信故障问题无法避免.因此,只能尽量地在C 和 A 之间寻求平衡.对于数据存储而言,为了提高可用性(Availability),采用了副本备份,比如对于HDFS,默认每块数据存三份.某数据块所在的机器宕机了,就去该数据块副本所在的机器上读取(从这可以看出,数据分布方式是按“数据块”为单位分布的) 但是,问题来

机制木炭的三个碳化阶段介绍

今天小编将为大家介绍机制木炭的三个碳化阶段: 一.从点火开始,至炉温慢慢上升到160 ℃,这时薪棒所含的水分主要依靠外加热量和本身薪棒燃烧所产生的热量进行蒸发.薪棒的化学组成几乎没变. 二.初始阶段主要靠薪棒自身的燃烧产生热量,使炉温上升到160-280 ℃之间.此时,木质材料发生热分解反应,其组成开始发生了变化.其中不稳定组成,如半纤维素发生分解生成CO 2 .CO 和少量醋酸等物质. 三.全面化阶段温度为280-400 ℃,在这阶段中,木质材料急剧地进行热分解,同时生成了大量的醋酸.甲醇和木

SQL Server 内存中OLTP内部机制概述(三)

----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory OLTP Internals Overview>:http://technet.microsoft.com/en-us/library/dn720242.aspx 译者水平有限,如有翻译不当之处,欢迎指正. ----------------------------我是分割线---------------

Java面试准备之JVM详细研究三(类加载机制)

类加载过程 一个类从编写完成后,编译为字节码之后,它要装载进内存有七个阶段: 加载 => (验证-> 准备-> 解析)=> 初始化=> 使用=> 卸载 括号中的三个步骤可以整合成为 “连接”步骤.其中的步骤并不是一个阶段结束,一个阶段才开始的.只是说他们的开始阶段基本遵循此顺序(解析阶段更是可能在使用的时候才发生,目的是配合动态绑定),这些阶段都是互相交叉的混合式进行的,通常会在一个阶段执行过程中调用或激活另一个阶段. 1.加载 ”加载“的过程是”类加载“过程的一个阶段

引用文档-软件测试分类及测试中三个主要概念

软件测试分类及测试中三个主要概念 原文链接:https://blog.csdn.net/qq_35867537/article/details/77477775 1.      软件测试分类 按测试技术分 按测试技术,软件测试可分为:黑盒测试.白盒测试.灰盒测试 黑盒测试:在程序接口进行测试,它只是检查程序功能是否按照规格说明书的规定正常使用.也被称为功能测试或者数据驱动测试. 白盒测试:要完全了解程序结构和处理过程,它按照程序内部逻辑测试程序,检验程序中每条通路是否按预定要求正确工作.也被称为

gtest 三种事件机制

前言: 1.首先说明gtest中事件的结构层次: 测试程序:一个测试程序只有一个main函数,也可以说是一个可执行程序是一个测试程序.该级别的事件机制会在程序的开始和结束执行. 测试套件:代表一个测试用例的集合体,该级别的事件机制会在整体的测试案例开始可结束执行. 测试用例:该级别的事件机制会在每个测试用例开始和结束都执行. gtest中的事件机制是指在测试前和测试后提供给用户自行添加操作的机制,而且次机制也可用让同一测试套件下的测试用例共享数据. 一.全局的事件机制(针对整个测试程序) 实现全

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御 本篇继续对于安全性测试话题,结合DVWA进行研习. CSRF(Cross-site request forgery):跨站请求伪造 1. 跨站请求伪造攻击 CSRF则通过伪装成受信任用户的请求来利用受信任的网站,诱使用户使用攻击性网站,从而达到直接劫持用户会话的目的. 由于现在的主流浏览器比如火狐和谷歌,都倾向于使用单个进程来管理用户会话(比如我们在FF和Chrome中,当要访问一个新页面时,通常是通过新增浏览器页面来达到的,而不是新开一