Red Hat Cluster Suite 组件 fencing FAQ
说明
Red Hat Cluster实现HA的关键组件之一是fencing。没有设置fencing,虽然看上去也能够运行Cluster,但是一旦遇到故障切换就会出现异 常,所以深入理解fencing原理,正确设置fencing对构建Red Hat Cluster有很大意义。
笔记以英文原文 2010-04-09 版为基础翻译,译文仅供参考,请以英文原文为准。
原文: http://sources.redhat.com/cluster/wiki/FAQ/Fencing
什么是fencing并且为何需要使用fencing?
fencing是cluster项目的一个组件,用来切断集群中和其他节点失去联系的故障节点对一个资源的访问(例如,磁盘)。
最有效的fencing方式通常称为STONITH,也就是”Shoot The Other Node In The Head”的缩写。换句话说,就是强制系统断电或者重启。虽然看上去这种方式是粗糙的没有规划的,但实际上它是一个好东西。如果一个节点对集群的其他节点 没有办法协作会不断地损坏数据,除非该故障节点被关闭。所以通过fencing故障节点,我们实际上保护了数据。
fencing通常使用一个网络电源切换机(network power switch)来实现,这个电源切换机可以通过网络管理,称为power fencing(电源阻断)。
fencing也可以通过切断访问资源来完成,例如使用SCSI reservation。这种方式称为fabric fencing(结构阻断)。
在Cluster Suite中支持哪些fencing设备?
这个硬件列表一直在修订。生产商不断推出新模块和新的微码,迫使Red Hat不断改变fence agent。最好查看CVS中的源代码去了解设备是否被提到:
也可以检查硬件配置列表:
可以使用自己的watchdog或者手工fencing吗?
不能。在所有生产环境中,fencing都是绝对需要的。所以,不支持用户使用自己的watchdog。
在生产环境或任何关键环境中,手工fencing也是不支持的。
我该使用power fencing还是fabric fencing?
在应用中两者都使用。两种方式都是保证故障节点不能写入文件系统,这样来保证文件系统一致性。
然而,由于很多原因我们建议用户使用电源电路fencing。(后面一段请参考原文)
当fence失败或者fencing由于意外自身故障?
关闭fencing,或者强制fencing推出,如果那个节点使用的gfs不能正常工作。如果出现故障的节点没有运行fencing则这个节点将不能被fenced。可以通过简单重启来完成fencing。
HP的iLo
(Integrated Lights Out)fencing不能正常工作,如何debug?
首先需要尝试使用命令行进行fencing,例如:
1
/sbin/fence_ilo -a myilo -l login -p passwd -o off -v
然后检查RIBCL的版本。可能需要升级firmware,或者查看bugzilla这个级别的firmware是否有bug。
什么是fence方法,fence设备和fence级别,并且它们哪个好?
一个节点可以有多个fence方式并且每个fence方式可以有多个fence设备。
多种fence方式设置可以冗余。例如,可以使用主板管理fencing方式来处理节点,如IPMI,或者iLO
, 或者RSA,或者DRAC。这些fencing方式都基于网络连接。如果这种网络连接失败,则fencing也会失败。所以采用一个后备的fence方式 就可以采用类似电源切换机或其他方式来切断节点。如果第一种fencing方式失效,则可以采用第二种fencing方式。
每个fence方式可 以采用多个fence设备,例如,如果一个节点有双电源并且可以采用power fence。则一个电源fenced之后,节点仍然不会重启(因为另外一个电源支持它运行)。这种情况下需要在一种fence方式中设置两个fence设 备:一个用来切断A另一个用来切断B。
如果有些人说fence级别,实际上他们说的就是fence方法。这种方法是指”power”和”fabric” fencing。
为何节点X一直在fenced?
可能有多种原因导致节点重复fenced,但是底线是这个节点没有看到节点收到了fenced的心跳网络消息。
通常这是由于故障硬件,如坏的网线和坏的交换机接口导致。
要检查用于集群的通讯硬件设备确保通讯路径正常。
为何节点X在启动时就收到fenced消息?
如果网络非常繁忙,集群可能认为它没有收到足够的心跳消息,当节点加入集群时可能发生。可以通过修改cluster.conf
中的配置项post_join_delay
来改善。例如
1
<fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="600"/>
是否支持手工fencing?
不,不,一千次地重复“不”。你可以使用手工fencing,但是不能保证节点被fenced并且集群会锁住,服务不能failover。
但我不想购买一个网络电源切换机。为何不支持手工fencing?
因为我们不能保证以下情况:
- ……
什么时候发生一个节点撤回或收到fenced?
当一个节点不能和其他集群节点通过心跳数据包通讯,则该节点被其他节点fenced。
如果一个GFS文件系统检查到它刚刚执行了一个操作,它会撤回该操作。这个通过GFS撤回操作的方法比一个内核panic要好一些。这意味着这个节点察觉到自己不能安全对文件系统操作,因为它认为自己的假设是错误的。不是干扰内核,而是给你一个机会很好地重启该节点。
当我使用冗余电源的时候哪种方式配置fencing较好?
当使用冗余电源的时候需要很小心配置fencing。如果配置错误,每个电源将独立fencing并且其他电源支持会让系统持续运行。这样系统就不能fencing了。
如果采用双电源,并且电源插在同一个电源切换器上,使用端口1和端口2,则配置类似:
<clusternode name="node-01" votes="1">
<fence>
<method name="1">
<device name="pwr01" option="off" switch="1" port="1"/>
<device name="pwr01" option="off" switch="1" port="2"/>
<device name="pwr01" option="on" switch="1" port="1"/>
<device name="pwr01" option="on" switch="1" port="2"/>
</method>
</fence>
</clusternode>
...
<fencedevices>
<fencedevice agent="fence_apc" ipaddr="192.168.0.101"
login="admin" name="pwr01" passwd="XXXXXXXXXXX"/>
</fencedevices>
如果采用双APC network power switches(pwr01和pwr03),每个电源切换器都有自己的UPS和独立的IP地址。
<clusternode name="node-01" votes="1">
<fence>
<method name="1">
<device name="pwr01" option="off" switch="1" port="1"/>
<device name="pwr02" option="off" switch="1" port="1"/>
<device name="pwr01" option="on" switch="1" port="1"/>
<device name="pwr02" option="on" switch="1" port="1"/>
</method>
</fence>
</clusternode>
...
<fencedevices>
<fencedevice agent="fence_apc" ipaddr="192.168.0.101"
login="admin" name="pwr01" passwd="XXXXXXXXXXX"/>
<fencedevice agent="fence_apc" ipaddr="192.168.1.101"
login="admin" name="pwr02" passwd="XXXXXXXXXXX"/>
</fencedevices>
有一些特定有关配置fencing设备的建议吗?
有一些,对于WTI请参考: http://people.redhat.com/lhh/wti_devices.html
双节点:在启动时fencing收到JOIN_START_WAIT
,但是节点不能彼此看到。为什么?
在双节点集群需要使用仲裁和fencing。典型的,fencing需要仲裁来允许一个主节点在线。在一个双节点集群中,这意味着要求两个节点同时在线。所以,通过仲裁来解决允许一个节点结合仲裁来启动。这样,就可以允许两个节点都fence。
当两个节点彼此断开,它们都会变成quorate,然后彼此fence。如果操作失败,就会再次尝试fencing。此时一切正常。
问题是,如果两个节点后来又连接起来,但是它们彼此都已经fenced了。这时两个节点都会放弃fencing操作,因为远程节点已经”online”了。不幸的是,两个节点都具备状态,所以不会恢复。或者,更直接地说,一旦火并,必须有一个节点赢得控制。
那么,什么是问题?由于智能的网络交换机都具备防范spanning tree的功能,所以多播数据包将不会立即转发,这导致两个节点openais/cman
问题。它们彼此fence对方,但是由于不能连接到fencing设备而失败。大约需要30到60秒,生成树(spanning tree)算法完成执行。Fencing已经结束了,但是没有任何一个节点赢得了控制。由于没有完成fence,这两个节点持续处于JOIN_START_WAIT
状态而放弃fence doamin。
可以采用如下方式解决:
- 设置交换机的
portfast
或类似属性。这将立即完成spannging tree过程,通过跳过一些发现过程。对于Cisco交换机,参考Using PortFast and Other Commands to Fix Workstation Startup Connectivity Delays - 使用廉价的交换机(呵呵,我倒,没有spannging tree功能)
- 临时使用交叉线
- 在”dumb”模式使用
qdiskd
,这将确保节点同时启动状态一个节点完成仲裁。如果同时禁止了allow_kill
和reboot
选项,这个过程将不会引入其他明显的集群特征变化。这个方式要求共享存储。
Red Hat Cluster Suite 组件 fencing FAQ的更多相关文章
- Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能
下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...
- Configure Red Hat Enterprise Linux shared disk cluster for SQL Server
下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...
- Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的 ...
- Red Hat Enterprise Linux 6.6安装体验
Red Hat Enterprise Linux 6.6的安装首界面有五个选项,这跟以前的Red Hat Enterprise Linux 5.x的安装界面是有一些区别的. 安装或者升级现有系统( ...
- Red Hat Linux认证
想系统的学习一下Linux,了解了一些关于Red Hat Linux认证的信息.整理如下. 当前比较常见的是RHCE认证,即Red Hat Certified Engineer.最高级别的是RHCA ...
- Red Hat Enterprise Linux 5安装序列号
为了保证安装的组件和订阅相匹配,红帽企业 Linux 5 需要输入一个安装号.它被用来配置安装程序来提供正确的软件包.安装号码包含在你的订阅里. 如果您没有输入安装号码,只有核心服务器或 Deskto ...
- Deploy Oracle 10.2.0.5 on Red Hat Enterprise Linux 6.4
一.Linux系统安装和配置 1.安装系统时选Desktop 2.设置eth0网卡为静态IP,加入子网掩码,网关,DNS.并配置自己主动启动 3.改动/etc/hosts.加入主机名和相应IP 4.禁 ...
- Redhat Cluster Suite原理介绍
RedHat Cluster Suite简称RHCS,是一个能够提供高可用性.高可靠性.负载均衡.存储共享且经济廉价的集群工具集合,基于RHCS可以搭建高可用性集群.负载均衡集群.存储集群和高性能 ...
- Red Hat Enterprise Linux
以下是支持 Docker 的 RHEL 版本: Red Hat Enterprise Linux 7 (64-bit) Red Hat Enterprise Linux 6.5 (64-bit) 或更 ...
随机推荐
- linux CentOS 安装rz和sz命令 lrzsz
lrzsz在linux里可代替ftp上传和下载. lrzsz 官网入口:http://freecode.com/projects/lrzsz/ lrzsz是一个unix通信套件提供的X,Y,和ZMod ...
- JAVA-Unit02: Oracle字符串操作 、 Oracle数值操作 、 Oracle日期操作 、 空值操作
Unit02: Oracle字符串操作 . Oracle数值操作 . Oracle日期操作 . 空值操作 DQL数据查询语言 查询语句基本由SELECT子句由FROM子句构成. SELECT子句指定要 ...
- Xbox360游戏收藏
xbox360游戏下载地址 http://dl.3dmgame.com/SoftList_221.html XBLA游戏总结.http://tieba.baidu.com/p/3174478602 ...
- winform下实现pictureBox全屏播放
最近开发一个项目,需要通过双击pictureBox实现全屏的功能,网上查找资料,加上一点摸索,最终实现了.做一下记录,以备以后需要. 主要功能都在下面这个类里面 using System; using ...
- adb命令记录
1.杀掉 adb 进程 adb kill-server 2.重启 adb 服务 adb start-server 3.重启手机 adb reboot 4.进 shell 模 ...
- 【学步者日记】UnityEditor扩展菜单以及ScriptableObject
完整版链接:http://note.youdao.com/noteshare?id=c54f35ca19371886e6a94302387bb6cd 下面是预览的部分,带图的版本请看上面链接. ...
- css ! important 兼容性的一点测试
css ! important 这个东西网上一堆内容,我只说我用到的一点地方和我的理解, 这个东西ie6不支持,ie高版本是支持的.其他浏览器也是支持.先理解这一点 .abc { width:100p ...
- [lua]判断nginx收到的是否json
local post_data = ngx.req.get_body_data() --[[ngx.log(ngx.ERR, 'post data:', post_data)]] local ok, ...
- CocoStudio创建动画帧
进入动画编辑器 选择“形体模式” 右键点击资源窗口的资源,可以进行删除,重命名的操作: 可以再资源窗口下方的预览窗口,查看选中的资源预览效果图: 右键点击“对象结构”,创建图层 选择“动画模式” 右 ...
- 2019 最新 阿里天猫、蚂蚁、钉钉ava 面试题汇总,附答案
Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,这是一些最新面试题,分享给大家. Java基础 面向对象的特征:继承.封装和多态 int 和 Integer 有什么区别 ...