使用 DRBD 和 Pacemaker 的高度可用 NFS 储存 #
此文档介绍了如何使用以下组件在双节点群集中设置高度可用的 NFS 储存:DRBD*(Distributed Replicated Block Device,分布式复制块设备)、LVM(Logical Volume Manager,逻辑卷管理器)和群集资源管理器 Pacemaker。
1 使用情形 #
本文档将帮助您设置高度可用的 NFS 服务器。用于实现高度可用的 NFS 储存的群集具有以下属性:
- 两个节点: - alice(IP:- 192.168.1.1)和- bob(IP:- 192.168.1.2),两者之间通过网络彼此相连。
- 两个浮动虚拟 IP 地址( - 192.168.1.10和- 192.168.2.1),这样无论服务在哪个物理节点上运行,客户端都可连接到服务。一个 IP 地址用于使用 Hawk2 进行群集管理,另一个 IP 地址专用于 NFS 导出。
- 一台共享储存设备,用作 SBD 屏蔽机制。可避免节点分裂的情况。 
- 当活动的主机发生故障(主动/被动设置)时,资源从一个节点故障转移至另一个节点。 
- 每台主机上的本地储存。使用 LVM 上的 DRBD 在主机之间同步数据。 
- 通过 NFS 导出的文件系统。 
安装并设置好基本的双节点群集后,再使用 NFS 的储存和群集资源对其进行扩展,即可获得一个高度可用的 NFS 储存服务器。
2 安装基本的双节点群集 #
继续前,您需要安装并设置一个基本的双节点群集。《Installation and Setup Quick Start》(安装和设置快速入门)中介绍了此任务。《Installation and Setup Quick Start》(安装和设置快速入门)介绍了如何使用 crm 外壳花费极少的精力设置群集。
3 创建 LVM 设备 #
LVM(逻辑卷管理器)支持在多个文件系统上灵活分配硬盘空间。
要准备供 LVM 使用的磁盘,请执行以下操作:
- 创建 LVM 卷组,然后使用要用于 LVM 的相应设备替换 - /dev/sdb1:- root #- pvcreate/dev/sdb1
- 创建包含此物理卷的 LVM 卷组 - nfs:- root #- vgcreatenfs /dev/sdb1
- 在卷组 - nfs中创建一个或多个逻辑卷。下面的示例会创建一个名为- work的 20 GB 逻辑卷:- root #- lvcreate-n work -L 20G nfs
- 激活卷组: - root #- vgchange-ay nfs
成功执行上述步骤后,您的系统将会显示以下设备:/dev/VOLGROUP/LOGICAL_VOLUME。在本示例中,该设备为 /dev/nfs/work。
   
4 创建 DRBD 设备 #
本章介绍如何在 LVM 上设置 DRBD 设备。使用 LVM 作为 DRBD 后端的配置具有以下优点:
- 比在 DRBD 上使用 LVM 的配置更容易设置。 
- 当需要调整 LVM 磁盘的大小或有更多磁盘添加到卷组时,管理起来更容易。 
    由于 LVM 卷组名为 nfs,DRBD 资源也会使用该名称。
   
4.1 创建 DRBD 配置 #
出于一致性原因,强烈建议您遵循以下建议:
- 为您的配置使用 - /etc/drbd.d/目录。
- 根据资源的用途为文件命名。 
- 将您的资源配置置于扩展名为 - .res的文件中。以下示例中使用- /etc/drbd.d/nfs.res文件。
按如下所示继续:
- 创建包含以下内容的 - /etc/drbd.d/nfs.res文件:- resource nfs { device /dev/drbd0; 1 disk /dev/nfs/work; 2 meta-disk internal; 3 net { protocol C; 4 fencing resource-and-stonith; } handlers { 5 fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh"; # ... } connection-mesh { 6 hosts alice bob; } on alice { 7 address 192.168.1.1:7790; node-id 0; } on bob { 7 address 192.168.1.2:7790; node-id 1; } }- 应用程序预期要访问的 DRBD 设备。 - DRBD 用于储存实际数据的较低级别块设备。这是在第 3 节 “创建 LVM 设备”中创建的 LVM 设备。 - 储存元数据格式的位置。使用 - internal的情况下,元数据将与用户数据一起储存在同一设备上。有关更多信息,请参见手册页。- 所指定要用于此连接的协议。如果是协议 - C,则会将已到达所有磁盘(本地或远程)的写入操作视为完成。- 启用资源级别屏蔽。如果 DRBD 复制链路的连接中断,Pacemaker 会尝试将 DRBD 资源升级到另一个节点。在此过程中会调用脚本。有关更多信息,请参见第 21.6 节 “搭配使用资源级屏蔽与 STONITH”。 - 定义网格的所有节点。 - hosts参数包含共享相同 DRBD 设置的所有主机名。- 包含每个节点的 IP 地址和唯一标识符。 
- 打开 - /etc/csync2/csync2.cfg并检查是否存在以下两行:- include /etc/drbd.conf; include /etc/drbd.d/*.res; - 如果不存在,请将这两行添加到文件中。 
- 将文件复制到其他节点上: - root #- csync2-xv- 有关 Csync2 的信息,请参见第 4.5 节 “将配置传输到所有节点”。 
4.2 激活 DRBD 设备 #
准备好 DRBD 配置后,请执行以下操作:
- 如果您在群集中使用防火墙,请在防火墙配置中打开端口 - 7790。
- 如果是第一次执行此操作,请在两个节点(在本示例中为 - alice和- bob)上执行以下命令:- root #- drbdadmcreate-md nfs- root #- drbdadmup nfs- 此命令会初始化元数据储存并创建 - /dev/drbd0设备。
- 如果所有节点上的 DRBD 设备的数据都相同,请跳过初始的重新同步过程。使用以下命令: - root #- drbdadmnew-current-uuid --clear-bitmap nfs/0
- 将 - alice设为主节点:- root #- drbdadmprimary --force nfs
- 检查 DRBD 状态: - root #- drbdadmstatus nfs- 此命令将返回以下消息: - nfs role:Primary disk:UpToDate alice role:Secondary peer-disk:UpToDate
     同步完成后,您便可访问块设备 /dev/drbd0 上的 DRBD 资源。将使用此设备来创建您的文件系统。有关 DRBD 的详细信息,请参见第 21 章 “DRBD”。
     
4.3 创建文件系统 #
完成第 4.2 节 “激活 DRBD 设备”后,您应该能在 /dev/drbd0 上看到 DRBD 设备:
    
root #mkfs.ext3/dev/drbd0
5 调整 Pacemaker 的配置 #
当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。为防止资源故障回复到之前运行它的节点,或者要指定让该资源故障回复到其他节点,请更改其资源粘性值。可以在创建资源时或之后指定资源粘性。
    要调整选项,请以 root 身份(或任何属于 haclient 组的非 root 用户身份)打开 crm 外壳并运行以下命令:
   
root #crmconfigurecrm(live)configure#rsc_defaultsresource-stickiness="200"crm(live)configure#commit
有关全局群集选项的详细信息,请参见第 6.2 节 “仲裁判定”。
6 创建群集资源 #
下面几节介绍高度可用的 NFS 群集所需资源的配置。使用 crm 外壳来执行配置步骤。下面的列表列出了必要的群集资源:
- DRBD 原始资源和可升级克隆资源
- 这些资源用于复制数据。群集资源管理器认为有必要时,会将可升级克隆资源在主次角色之间切换。 
- NFS 内核服务器资源
- 使用此资源,Pacemaker 可确保 NFS 服务器守护程序始终可用。 
- NFS 导出
- 一或多个 NFS 导出,通常对应于文件系统。 
- 下列配置示例假设 - 192.168.2.1是用于为- 192.168.2.x/24子网中的客户端传递数据的 NFS 服务器的虚拟 IP 地址。
- 服务从 - /srv/nfs/work导出传递的数据。
- 在此导出目录中,群集将从 DRBD 设备 - /dev/drbd0挂载- ext3文件系统。此 DRBD 设备位于名为- nfs的 LVM 逻辑卷上。
6.1 DRBD 原始资源和可升级克隆资源 #
要配置这些资源,请从 crm 外壳运行以下命令:
crm(live)#configurecrm(live)configure#primitivedrbd_nfs \ ocf:linbit:drbd \ params drbd_resource="nfs" \ op monitor interval="15" role="Promoted" \ op monitor interval="30" role="Unpromoted"crm(live)configure#cloneclone-drbd_nfs drbd_nfs \ meta promotable="true" promoted-max="1" promoted-node-max="1" clone-max="2" \ clone-node-max="1" notify="true"crm(live)configure#commit
    此命令会创建与 DRBD 资源 nfs 对应的 Pacemaker 可提升克隆资源。Pacemaker 现在应该会在两个节点上激活您的 DRBD 资源,并在其中一个节点上将该资源提升为主要角色。
   
    使用 crm status 命令或运行 drbdadm status 检查群集的状态。
   
6.2 NFS 内核服务器资源 #
    在 crm 外壳中,NFS 服务器守护程序的资源必须配置为 systemd 资源类型的克隆。
   
crm(live)configure#primitivenfsserver \ systemd:nfs-server \ op monitor interval="30s"crm(live)configure#clonecl-nfsserver nfsserver \ meta interleave=truecrm(live)configure#commit
提交此配置后,Pacemaker 应该就会在两个节点上启动 NFS 内核服务器进程。
6.3 文件系统资源 #
- 按如下所示配置文件系统类型资源(但先不要提交此配置): - crm(live)configure#- primitivefs_work \ ocf:heartbeat:Filesystem \ params device=/dev/drbd0 \ directory=/srv/nfs/work \ fstype=ext3 \ op monitor interval="10s"
- 将这些资源合并到一个 Pacemaker 资源组中: - crm(live)configure#- groupg-nfs fs_work
- 添加以下约束,以确保该组在 DRBD 可提升克隆资源为主要角色的节点上启动: - crm(live)configure#- ordero-drbd_before_nfs Mandatory: \ clone-drbd_nfs:promote g-nfs:start- crm(live)configure#- colocationcol-nfs_on_drbd inf: \ g-nfs clone-drbd_nfs:Promoted
- 提交此配置: - crm(live)configure#- commit
    提交这些更改后,Pacemaker 会将 DRBD 设备挂载到同一节点上的 /srv/nfs/work。请使用 mount(或查看 /proc/mounts)确认这一点。
   
6.4 NFS 导出资源 #
    当您的 DRBD、LVM 和文件系统资源正常工作时,继续使用用于管理 NFS 导出的资源。要创建高度可用的 NFS 导出资源,请使用 exportfs 资源类型。
   
     要将 /srv/nfs/work 目录导出到客户端,请使用以下原始资源:
    
- 使用以下命令创建 NFS 导出: - crm(live)configure#- primitiveexportfs_work \ ocf:heartbeat:exportfs \ params directory="/srv/nfs/work" \ options="rw,mountpoint" \ clientspec="192.168.2.0/24" \ wait_for_leasetime_on_stop=true \ fsid=100 \ op monitor interval="30s"
- 创建这些资源后,将它们追加到现有的 - g-nfs资源组:- crm(live)configure#- modgroupg-nfs add exportfs_work
- 提交此配置: - crm(live)configure#- commit- Pacemaker 将导出 NFS 虚拟根文件系统及两个其他导出。 
- 确认 NFS 导出设置正确: - root #- exportfs-v /srv/nfs/work IP_ADDRESS_OF_CLIENT(OPTIONS)
6.5 NFS 导出的虚拟 IP 地址 #
初始安装会创建用于 Hawk2 的管理虚拟 IP 地址。虽然您也可将此 IP 地址用于 NFS 导出,但最好另外创建一个专用于 NFS 导出的 IP 地址。这样,以后便可更轻松地应用安全限制。在 crm 外壳中使用以下命令:
crm(live)configure#primitivevip_nfs IPaddr2 \ params ip=192.168.2.1 cidr_netmask=24 \ op monitor interval=10 timeout=20crm(live)configure#modgroupg-nfs add vip_nfscrm(live)configure#commit
7 使用 NFS 服务 #
本章概述如何从 NFS 客户端使用高度可用的 NFS 服务。
要连接到 NFS 服务,请务必使用虚拟 IP 地址来连接群集,而不要使用其中一个群集节点的网络接口上配置的物理 IP。出于兼容性原因,请使用服务器上 NFS 导出的完整路径。
最简单的形式是,使用如下所示的命令挂载 NFS 导出:
root #mount-t nfs 192.168.2.1:/srv/nfs/work /home/work
   要配置特定传输协议 (proto) 和最大读取和写入请求大小(rsize 和 wsize),请使用以下命令:
  
root #mount-o rsize=32768,wsize=32768 \ 192.168.2.1:/srv/nfs/work /home/work
   如果您需要与 NFS 版本 3 兼容,请在 -o 选项后添加值 vers=3。
  
   要了解更多 NFS 挂载选项,请参见 nfs 手册页。
  
8 法律声明 #
版权所有 © 2006– 2025 SUSE LLC 和贡献者。保留所有权利。
根据 GNU 自由文档许可 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可附带不可变部分。许可版本 1.2 的副本包含在题为“GNU Free Documentation License”的部分。
有关 SUSE 商标,请参见 http://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。