分布式环境中使用基于共享存储的LVM块设备时的元数据同步方案对比


声明:本文转载自https://my.oschina.net/LastRitter/blog/1542081,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

红帽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完全可以替代。

本文发表于2017年09月23日 08:37
(c)注:本文转载自https://my.oschina.net/LastRitter/blog/1542081,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3108 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1