使用 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 #
vgcreate
nfs /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 #
drbdadm
create-md nfsroot #
drbdadm
up nfs此命令会初始化元数据储存并创建
/dev/drbd0
设备。如果所有节点上的 DRBD 设备的数据都相同,请跳过初始的重新同步过程。使用以下命令:
root #
drbdadm
new-current-uuid --clear-bitmap nfs/0将
alice
设为主节点:root #
drbdadm
primary --force nfs检查 DRBD 状态:
root #
drbdadm
status 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 #
crm
configurecrm(live)configure#
rsc_defaults
resource-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)#
configure
crm(live)configure#
primitive
drbd_nfs \ ocf:linbit:drbd \ params drbd_resource="nfs" \ op monitor interval="15" role="Promoted" \ op monitor interval="30" role="Unpromoted"crm(live)configure#
clone
clone-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#
primitive
nfsserver \ systemd:nfs-server \ op monitor interval="30s"crm(live)configure#
clone
cl-nfsserver nfsserver \ meta interleave=truecrm(live)configure#
commit
提交此配置后,Pacemaker 应该就会在两个节点上启动 NFS 内核服务器进程。
6.3 文件系统资源 #
按如下所示配置文件系统类型资源(但先不要提交此配置):
crm(live)configure#
primitive
fs_work \ ocf:heartbeat:Filesystem \ params device=/dev/drbd0 \ directory=/srv/nfs/work \ fstype=ext3 \ op monitor interval="10s"将这些资源合并到一个 Pacemaker 资源组中:
crm(live)configure#
group
g-nfs fs_work添加以下约束,以确保该组在 DRBD 可提升克隆资源为主要角色的节点上启动:
crm(live)configure#
order
o-drbd_before_nfs Mandatory: \ clone-drbd_nfs:promote g-nfs:startcrm(live)configure#
colocation
col-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#
primitive
exportfs_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#
modgroup
g-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#
primitive
vip_nfs IPaddr2 \ params ip=192.168.2.1 cidr_netmask=24 \ op monitor interval=10 timeout=20crm(live)configure#
modgroup
g-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– 2024 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 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。