红帽HA集群概述
特性
-
使用基于使用令牌环的totem协议(待确认,感觉像是paxos协议),多数投票通过才可以生效。
-
支持多个节点,理论上是没有节点限制的。
-
对于两个节点,只不过是当其中一个节点失效时,整个集群由于无法获得多数票而挂起,也可以使用主备模式。
-
支持仲裁设备(Quorum Devices),但目前处于技术预览阶段,且需要仲裁设备运行Linux系统。
组成
必备组件
-
资源(Resources)以及资源代理(Resources Agent),支持LSB、OCF、systemd和Upstart等类型的资源代理。
-
消息传递(CoroSync),基础的分布式消息传递框架。
-
集群配置及管理(PaceMaker),基于CoroSync进行同步,使用XML格式的配置文件。
基础组件
-
隔离设备(Fence)以及隔离设备代理(Fence Agent),支持电源或IO隔离(LIO或者stgt搭建的iSCSI Target服务支持SCSI-3的 PRs隔离功能)。
-
锁管理器(DLM),必须有隔离设备才能使用,依赖CoroSync和Fence。
可选组件
这些组件都依赖分布式锁DLM,间接依赖隔离设备。
- CLVM
- GFS2
- OCFS2
LVM特性
-
LVM操作分两个部分:元数据读写和使用DeviceMapper创建删除MappedDevice(激活、去激活)。
-
所有操作都需要锁操作,共支持6中锁,常用的是本地锁(flock)。
-
集群环境使用clvmd(flock的替代),或lvmlockd(flock的补充)。
-
锁操作的对象主要是:全局、卷组(孤立的物理卷)、逻辑卷激活去激活。
-
锁操作类型主要是:锁定、解锁、更新。
-
锁操作的主要模式是:共享读、独占写、完全独占。
-
lvmetad元数据服务在启动时或者有设备变更(注册udev通知)时更改自己内部缓存的状态,执行LVM命令时首先从lvmetad获取状态,然后根据状态决定是否扫描磁盘,如果扫描,则将新的元数据传给lvmetad,lvmetad自身并不进行扫描。
-
当不使用lvmetad时,每次执行LVM命令都需要从磁盘读取元数据,性能较差。
LVM最佳实践
-
一个磁盘创建一个分区、创建一个PV,每个VG只包含一个PV,减少元数据读写数量。
-
将LVM的正常使用分为:创建删除、激活去激活、查询修改三类,进行合理封装。
-
禁止开机VG或LV自动激活(可通过修改lvm.conf来实现),虚拟机使用时激活,不使用时取消激活。
-
如果通过LVM命令查询命令(lvs等)执行较多,则建议使用元数据服务lvmetad(不能与CLVM共存),有效减少扫面磁盘元数据次数。
-
当存在多个VG或PV时,使用pvscan命令时,可通过指定PV路径来减扫描数量。
-
所有对LVM的增删查改等操作均通过LVM命令进行,尽量不要通过其他接口进行(比如/dev或/sys目录),避免可能出现不一致的情况。
-
如果在共享存储上,多节点使用LVM,且开启lvmetad元数据服务,则要么在底层使用lvmlockd或clvm,要么使用者要自己处理好不一致问题。
可选同步方案
应用层自己进行多节点LVM同步
只在单一节点进行元数据更改并部署LVM状态服务,其他节点在进行LVM相关操作先从LVM状态服务获取LVM当前状态,然后根据情况更新本地元数据缓存。或者关闭lvmetad元数据服务,只在单一节点尽心LVM变更操作等实用技巧来规避不一致的问题。
-
优点:简单可控,技术风险低,使用时多加注意就可以解决。
-
缺点:应用层需要进行良好封装、实现的工作量或者复杂度相对较大(具体跟需求和使用方式相关,也可以做到很简单)。
lvmetad + lvmlockd + sanlock(wdmd)
-
优点:一致性由底层负责,对应用层无额外要求,且可以使用元数据服务。
-
缺点:依赖SanLock,需首先部署好SanLock,需对SanLock有足够了解。
lvmetad + lvmlockd + dlm + corosync(pacemaker) + fence(scsi prs)
-
优点:一致性由底层负责,对应用层无额外要求,且可以使用元数据服务。
-
缺点:依赖PaceMaker,需首先使用PaceMaker进行集群管理。
lvmetad + external_lock
自己写一个动态链接库,实现LVM中所需的锁功能。
-
优点:一致性由底层负责,对应用层无额外要求,且可以使用元数据服务。灵活、自由,可根据需要实现锁的功能。
-
缺点:需熟悉LVM的锁插件扩展,实现难度和工作量相对较大。
clvmd + dlm + corosync(pacemaker) + fence(scsi prs)
-
优点:一致性由底层负责,对应用层无额外要求。
-
缺点:依赖PaceMaker,需首先使用PaceMaker进行集群管理。不可以使用元数据服务,性能更差,lvmlockd完全可以替代。