在 Red Hat Enterprise Linux High Availability Add-On 集群中配置主动-被动 NFS 服务器
以下信息介绍了 Red Hat Enterprise Linux (RHEL) High Availability Add-On 集群中主动-被动 NFS 服务器的配置。 该集群使用 IBM® Power® Virtual Server 作为集群节点。
所述设置使用可共享的存储卷,可在两个群集节点上访问。 NFS 导出文件的文件系统是在这些可共享存储卷上创建的。 HA-LVM确保音量组每次仅在一个节点上处于活动状态。
在示例设置中,一个共享卷组 nfssharevg
包含三个逻辑卷 nfssharelv
、sap${SID}lv
和 saptranslv
。 XFS文件系统在这些逻辑卷上创建,并挂载到 /nfsshare
、/nfshare/export/sap${SID}
和 /nfsshare/export/saptrans
。
这些说明基于 Red Hat 产品文档和 IBM Power Virtual Server 参考资料中为 SAP 应用程序实现高可用性所 列出的文章。
准备工作
查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。
先决条件
NFS 服务器需要一个虚拟主机名和IP地址。 确保虚拟IP地址在网络接口上定义,并且可以在网络中访问。
物理和虚拟IP名称和地址的名称解析和反向查找在所有 NFS 服务器和客户端节点上必须唯一且一致。 必须提供 NFS 客户的详细信息(子网、所需的 NFS 导出选项)。 您需要在仪表盘设置时输入这些信息。
准备一个高可用性的 NFS 服务器
请使用以下信息为高可用性 NFS 服务器准备环境。
安装 NFS 软件包
在两个节点上运行以下命令。
dnf install -y nfs-utils
准备LVM对象
所有集群节点都需要访问共享存储卷,但只有一个节点对卷具有独占读写权限。
准备主动-被动HA LVM
在两个节点上,编辑文件 /etc/lvm/lvm.conf
,在卷组中添加系统 ID。 搜索配置设置 system_id_source
,并将其值更改为“uname”。
/etc/lvm/lvm.conf
中 system_id_source
的样本设置:
# grep "system_id_source =" /etc/lvm/lvm.conf
system_id_source = "uname"
验证节点的 LVM system ID
是否与 uname -n
输出一致。
lvm systemid
uname -n
样本输出:
# lvm systemid
system ID: cl-nfs-1
# uname -n
cl-nfs-1
识别共享存储卷的全局名称
为共享卷组中使用的所有卷确定全球名称(WWN)。
在集群节点上发现新的SAN卷
当您将新的存储卷附加到虚拟服务器实例时,需要重新扫描 SCSI 总线以检测新的卷。 然后,更新虚拟服务器实例 的多路径配置。
在带有新存储卷附件的节点上,运行以下命令。
rescan-scsi-bus.sh && sleep 10 && multipathd reconfigure
使用 pvs --all
命令也可以计算出卷的WWN值。
准备环境变量
为了简化设置,请在两个节点上为用户ID root
准备以下环境变量。 本文余下部分中的后续命令将使用这些环境变量。
在两个节点上,创建一个包含环境变量的文件。 然后,根据您的配置进行调整。
根据您的环境修改 NFS_VH
、NFS_IP
、NFS_CLIENTSPEC
和 NFS_OPTIONS
。 对于 NFS_PVID
,请使用您之前确定的 WWN。 除了用于 NFS 共享的文件系统外,示例还显示了用于系统ID为 ${SID}
的 SAP 系统和 SAP 传输目录的另外两个文件系统。 样本量
${NFS_SZ1}
、${NFS_SZ2}
和 ${NFS_SZ3}
是 ${NFS_VG}
容量组大小的百分比,需要根据您的要求进行修改。 卷组名称和安装点名称仅为建议,需要根据您的命名惯例进行更改。
请确保您使用小写字母设置 NFS_PVID
环境变量,十六进制数字。
# virtual hostnames
export NFS_VH=<virtual hostname> # virtual hostname for NFS server
export NFS_IP=<IP address> # virtual IP address for NFS server
# LVM storage for NFS file systems
export NFS_PVID=3<WWN> # WWN of shareable storage volume used for NFS
export NFS_VG="nfssharevg" # volume group name for NFS exported file systems
# NFS share file system
export NFS_LV1="nfssharelv" # logical volume name export #1
export NFS_SZ1="5%VG" # logical volume size
export NFS_FS1="/nfsshare" # file system mount point
export NFS_ROOT="${NFS_FS1}/export" # base export directory
# NFS share file system for SAP system ID <SID>
export SID=<SID> # SAP system ID
export NFS_LV2="sap${SID}lv" # logical volume name export #2
export NFS_SZ2="40%VG" # logical volume size
export NFS_FS2="${NFS_ROOT}/sap${SID}" # file system mount point
# NFS share file system for SAP transport directory
export NFS_LV3="saptranslv" # logical volume name export #3
export NFS_SZ3="40%VG" # logical volume size
export NFS_FS3="${NFS_ROOT}/saptrans" # file system mount point
# NFS client options
export NFS_CLIENTSPEC="10.111.1.0/24" # client specs (subnet and netmask) for allowed NFS clients
export NFS_OPTIONS="rw,sync,no_root_squash,no_subtree_check,crossmnt" # options for NFS export
在使用本文档其余部分的示例命令之前,您必须先获取此文件。
例如,如果您创建了一个名为 nfs_envs.sh
的文件,请在两个节点上运行以下命令来设置环境变量。
source nfs_envs.sh
每次启动新的终端会话时,都必须运行 source
命令。 或者,您也可以在集群配置时将环境变量文件添加到 /etc/profile.d
目录中。 在这个例子中,每次登录服务器时,文件都会自动加载。
创建LVM对象
使用以下信息创建 LVM 对象。
创建物理体积
在 NODE1 上,运行以下命令。
pvcreate /dev/mapper/${NFS_PVID}
样本输出:
pvcreate /dev/mapper/${NFS_PVID}
Physical volume "/dev/mapper/360050768108103357000000000002ddc" successfully created.
创建卷组
在 NODE1 上,为 NFS 导出创建卷组。
vgcreate ${NFS_VG} /dev/mapper/${NFS_PVID}
请确认系统ID 已设置。
vgs -o+systemid
样本输出:
# vgs -o+systemid
VG #PV #LV #SN Attr VSize VFree System ID
nfssharevg 1 0 0 wz--n- <50.00g <50.00g cl-sap-1
创建逻辑卷
在 NODE1 上,为 NFS 导出创建三个逻辑卷。
lvcreate -l ${NFS_SZ1} -n ${NFS_LV1} ${NFS_VG}
lvcreate -l ${NFS_SZ2} -n ${NFS_LV2} ${NFS_VG}
lvcreate -l ${NFS_SZ3} -n ${NFS_LV3} ${NFS_vg}
创建文件系统
在 NODE1 上,为 NFS 导出创建文件系统。
本示例使用文件系统类型 xfs
。 其他文件系统类型也是可能的。 然后,资源定义需要更改。
mkfs.xfs /dev/${NFS_VG}/${NFS_LV1}
mkfs.xfs /dev/${NFS_VG}/${NFS_LV2}
mkfs.xfs /dev/${NFS_VG}/${NFS_LV3}
创建 NFS 导出的安装点
在两个节点上运行以下命令。
mkdir -p ${NFS_FS1}
确保在多个集群节点上未激活卷组
由 Pacemaker 管理的音量组在启动时不得自动激活。
对于 RHEL 8.5 及更高版本,您可以在创建卷组时通过为 vgcreate 命令指定 --setautoactivation n
标志来禁用卷组的自动激活。
在两个节点上,编辑文件 /etc/lvm/lvm.conf
并修改 auto_activation_volume_list
条目,将自动激活限制为特定的卷组。 搜索参数 auto_activation_volume_list
,并将除为 NFS 群集定义的音量组外的其他音量组添加为该列表中的条目。
/etc/lvm/lvm.conf
中 auto_activation_volume_list
条目的示例设置:
auto_activation_volume_list = [ "rhel_root" ]
重建 initramfs 启动映像以确保启动映像不会激活由集群控制的卷组。
在两个节点上运行以下命令。
dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
重启两个节点。
安装和设置 RHEL HA 附加群集
请按照以下说明进行初始仪表板配置。
- 按照 实施 Red Hat Enterprise Linux 高可用性附加组件 集群安装并设置 RHEL HA 附加组件集群。
- 按照 创建围栏设备中的 描述配置并测试围栏。
此阶段集群状态输出示例。
# pcs status
Cluster name: SAP_NFS
Cluster Summary:
* Stack: corosync
* Current DC: cl-nfs-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Fri Mar 10 10:35:42 2023
* Last change: Fri Mar 10 09:52:08 2023 by root via cibadmin on cl-nfs-1
* 2 nodes configured
* 1 resource instance configured
Node List:
* Online: [ cl-nfs-1 cl-nfs-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-nfs-1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
配置常规仪表盘属性
为了防止集群将健康资源转移到另一个节点(例如,当您在先前失败的节点上重新启动集群时),您可以将 resource-stickiness
元属性的默认值设置为1。
在 NODE1 上,运行以下命令。
pcs resource defaults update resource-stickiness=1
配置 NFS 资源组和资源
请按照以下步骤配置集群中的 NFS 资源。
创建LVM激活资源
为确保所有 NFS 资源在同一节点上运行,请将它们配置为资源组 nfsgroup
的一部分。
此资源组与第一个资源组同时创建。 资源按照添加到组中的顺序排列。 资源以相反的顺序停止。
在 NODE1 上,运行以下命令。
pcs resource create nfs_vg ocf:heartbeat:LVM-activate \
vgname=${NFS_VG} \
vg_access_mode=system_id \
--group nfsgroup
为避免数据损坏,请勿在主动-被动HA配置中配置多个使用同一LVM卷组的LVM激活资源。 请勿将LVM激活的资源配置为主动-被动HA配置中的克隆资源。
检查集群状态,并确认资源 nfs_vg
处于活动状态。
在 NODE1 上,运行以下命令。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-1
以下命令为 nfsgroup
资源组配置 xfs
文件系统资源。 文件系统使用LVM卷组 ${NFS_vg}
和之前创建的逻辑卷(${NFS_LV1}
、${NFS_LV2}
、${NFS_LV3}
)。
在 NODE1 上,运行以下命令。
pcs resource create nfs_fs1 Filesystem \
device=/dev/${NFS_VG}/${NFS_LV1} \
directory=${NFS_FS1} \
fstype=xfs \
--group nfsgroup
您可以使用 options=<options>
参数指定挂载选项,作为文件系统资源的一部分。 如需配置选项的完整列表,请发送电子邮件至 pcs resource describe filesystem
。
检查集群状态,并确认资源 nfs_fs1
处于活动状态。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-1
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-1
在活动资源组 nfsgroup
所在的节点上,在 ${NFS_FS1}
中创建两个子目录。
${NFS_FS1}/stat
被用作 用于 锁信息,而 被用作 根。nfs_shared_infodir
NFS ${NFS_FS1}/export
NFS
mkdir ${NFS_FS1}/stat ${NFS_FS1}/export
为其他导出的文件系统创建挂载点。
在两个节点上运行以下命令。
mkdir ${NFS_FS2} ${NFS_FS3}
为其他两个 NFS 文件系统创建资源。
在 NODE1 上,运行以下命令。
pcs resource create nfs_fs2 Filesystem \
device=/dev/${NFS_VG}/${NFS_LV2} \
directory=${NFS_FS2} \
fstype=xfs \
--group nfsgroup
pcs resource create nfs_fs3 Filesystem \
device=/dev/${NFS_VG}/${NFS_LV3} \
directory=${NFS_FS3} \
fstype=xfs \
--group nfsgroup
检查集群状态,并确认所有三个文件系统资源(nfs_fs1
、nfs_fs2
、nfs_fs3
)都处于活动状态。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-1
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs2 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs3 (ocf::heartbeat:Filesystem): Started cl-nfs-1
创建 nfsserver 资源
在 NODE1 上,创建一个管理 NFS 服务器的资源。
pcs resource create nfs_daemon nfsserver \
nfs_shared_infodir=${NFS_FS1}/stat \
nfs_no_notify=true \
--group nfsgroup
nfsserver
资源的 nfs_shared_infodir
参数指定了 NFS 服务器存储状态信息的目录。
检查集群状态,并确认 NFS 服务器已启动。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-1
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs2 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs3 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_daemon (ocf::heartbeat:nfsserver): Started cl-nfs-1
创建导出资源
要导出 ${NFS_ROOT}
目录,请将 exportfs资源添加到 nfsgroup
组,该组为 NFSv4 客户端创建一个虚拟目录。 NFSv3 客户也可以访问这些导出文件。
在 NODE1 上,运行以下命令。
pcs resource create nfs_export exportfs \
clientspec=${NFS_CLIENTSPEC} \
options=${NFS_OPTIONS} \
directory=${NFS_ROOT} \
fsid=0 \
--group nfsgroup
配置浮动IP地址资源
查看 “预留虚拟IP地址”中的信息,并为 NFS 集群预留一个虚拟IP地址。
创建 NFS 服务器的虚拟IP地址资源。 NFS 客户可通过浮动IP地址访问 分享。NFS
在 NODE1 上,运行以下命令。
pcs resource create nfs_ip IPaddr2 \
ip=${NFS_IP} \
--group nfsgroup
配置通知资源
整个 NFS 部署初始化后,nfsnotify 资源会发送 FSv3 重启通知。
在 NODE1 上,运行以下命令。
pcs resource create nfs_notify nfsnotify \
source_host=${NFS_IP} \
--group nfsgroup
NFS 集群设置现已完成。
在 NODE1 上,运行以下命令检查状态。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-1
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs2 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_fs3 (ocf::heartbeat:Filesystem): Started cl-nfs-1
* nfs_daemon (ocf::heartbeat:nfsserver): Started cl-nfs-1
* nfs_export (ocf::heartbeat:exportfs): Started cl-nfs-1
* nfs_ip (ocf::heartbeat:IPaddr2): Started cl-nfs-1
* nfs_notify (ocf::heartbeat:nfsnotify): Started cl-nfs-1
测试 NFS 服务器集群
您可以按照以下步骤验证高可用性集群中的 NFS 资源配置。 您可以使用 NFSv3 或 NFSv4 安装导出的文件系统。 请运行以下测试,以验证 NFS 集群是否正常工作。
Test1- 测试 NFS 导出
请使用以下信息测试 NFS 导出。
在HA NFS 集群外的 NFS 客户端节点上运行所有命令。
验证 NFS 导出。
showmount -e ${NFS_IP}
showmount
命令显示由 NFS 服务器( NFS v3 )导出的文件系统的相关信息。 确认输出结果中列出了所有导出的目录。
在 NFS 客户端节点上创建一个临时目录。 然后,安装 NFS 文件系统并创建 SAP 安装所需的目录结构。
在第一个示例中,只有 /usr/sap/trans
和 /sapmnt/${SID}
在 SAP 应用服务器实例上安装了 NFS。
准备用于 SAP 安装的挂载点。
mkdir -p /sapmnt/${SID} \
/usr/sap/trans
更改挂载点的属性。
chattr +i /sapmnt/${SID} \
/usr/sap/trans
安装 NFS 共享。
mount -t nfs4 -o sec=sys ${NFS_VH}:/saptrans /usr/sap/trans
mount -t nfs4 -o sec=sys ${NFS_VH}:/sap${SID}/sapmnt /sapmnt/${SID}
更改所有权和权限。
chown ${sid}adm:sapsys /usr/sap/trans
chmod g+w /usr/sap/trans
chown -R ${sid}adm:sapsys /sapmnt/${SID}
卸载文件系统。
umount /usr/sap/trans
umount /sapmnt/${SID}
将新文件系统添加到 /etc/fstab
。
cat >> /etc/fstab << EOT
${NFS_VH}:/saptrans /usr/sap/trans nfs4 sec=sys 0 0
${NFS_VH}:/sap${SID}/sapmnt /sapmnt/${SID} nfs4 sec=sys 0 0
EOT
检查更新后的文件。
cat /etc/fstab
在第二个示例中,/usr/sap/trans
、/sapmnt/${SID}
和所有实例目录都挂载在 SAP 应用服务器实例上,NFS。
导出 ASCS 和ERS系统编号的环境变量。 请将以下数字更改为您在安装 ASCS 和 ERS 时使用的系统编号。
export ASCS_NR=01
export ERS_NR=02
准备用于 SAP 安装的最终安装点。
mkdir -p /sapmnt/${SID} \
/usr/sap/trans \
/usr/sap/${SID}/SYS \
/usr/sap/${SID}/ASCS${ASCS_INSTNO} \
/usr/sap/${SID}/ERS${ERS_INSTNO}
更改挂载点的属性。
chattr +i /sapmnt/${SID} \
/usr/sap/trans \
/usr/sap/${SID}/SYS \
/usr/sap/${SID}/ASCS${ASCS_INSTNO} \
/usr/sap/${SID}/ERS${ERS_INSTNO}
安装 NFS 共享以创建所需的子目录,更改所有权和权限。
mount -t nfs4 -o sec=sys ${NFS_VH}:/saptrans /mnt
chown ${sid}adm:sapsys /mnt
chmod g+w /mnt
umount /mnt
mount -t nfs4 -o sec=sys ${NFS_VH}:/sap${SID} /mnt
mkdir -p /mnt/sapmnt \
/mnt/ASCS \
/mnt/ERS \
/mnt/SYS \
/mnt/PAS \
/mnt/AS1
chown -R ${sid}adm:sapsys /mnt
umount /mnt
将新文件系统添加到 /etc/fstab
。
cat >> /etc/fstab < EOT
${NFS_VH}:/saptrans /usr/sap/trans nfs4 sec=sys 0 0
${NFS_VH}:/sap${SID}/sapmnt /sapmnt/${SID} nfs4 sec=sys 0 0
${NFS_VH}:/sap${SID}/ASCS /usr/sap/${SID}/ASCS${ASCS_INSTNO} nfs4 sec=sys 0 0
${NFS_VH}:/sap${SID}/ERS /usr/sap/${SID}/ERS${ERS_INSTNO} nfs4 sec=sys 0 0
${NFS_VH}:/sap${SID}/SYS /usr/sap/${SID}/SYS nfs4 sec=sys 0 0
EOT
检查更新后的文件。
cat /etc/fstab
Test2- 测试 NFS 服务器的故障切换
请使用以下信息测试 NFS 服务器的故障切换。
Test2- 描述说明
模拟集群节点(拥有 NFS 资源)崩溃。
Test2- 先决条件
- 一个功能性的双节点 RHEL HA 附加群集,用于 NFS HA 服务器。
- 两个节点上的集群都已启动。
- 文件系统安装在集群外的 NFS 客户端节点上,应用程序可以访问其中的内容。
Test2- 测试程序
通过发送关闭系统请求来关闭集群节点。
首先,检查集群状态并确定运行nfsgroup资源组的节点。
在 NODE1 上,运行以下命令。
pcs status
然后,登录到已识别的集群节点并发送崩溃系统请求。
sync; echo c > /proc/sysrq-trigger
Test2- 预期行为
- 具有活动 nfsgroup 资源组的节点关闭。
- 集群检测到故障节点并启动隔离操作。
- 屏蔽操作会将屏蔽节点的状态设置为离线。
- 该集群在故障转移节点上获取 NFS 服务器资源。
检查故障转移节点上的所有资源是否都已启动。
pcs resource status
样本输出:
# pcs resource status
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-2
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_fs2 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_fs3 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_daemon (ocf::heartbeat:nfsserver): Started cl-nfs-2
* nfs_export (ocf::heartbeat:exportfs): Started cl-nfs-2
* nfs_ip (ocf::heartbeat:IPaddr2): Started cl-nfs-2
* nfs_notify (ocf::heartbeat:nfsnotify): Started cl-nfs-2
确认文件系统仍安装在 NFS 客户端节点上,并且应用程序仍可以访问内容。
Test2- 恢复过程
登录 IBM Cloud 控制台,启动已停止的实例。 等到集群节点再次可用后,重启集群框架。
在群集节点上运行以下命令
pcs cluster start
检查集群状态。
pcs status
样本输出:
# pcs status
Cluster name: SAP_NFS
Cluster Summary:
* Stack: corosync
* Current DC: cl-nfs-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Mon Mar 20 08:11:28 2023
* Last change: Mon Mar 20 07:56:25 2023 by hacluster via crmd on cl-nfs-1
* 2 nodes configured
* 9 resource instances configured
Node List:
* Online: [ cl-nfs-1 cl-nfs-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-nfs-1
* Resource Group: nfsgroup:
* nfs_vg (ocf::heartbeat:LVM-activate): Started cl-nfs-2
* nfs_fs1 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_fs2 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_fs3 (ocf::heartbeat:Filesystem): Started cl-nfs-2
* nfs_daemon (ocf::heartbeat:nfsserver): Started cl-nfs-2
* nfs_export (ocf::heartbeat:exportfs): Started cl-nfs-2
* nfs_ip (ocf::heartbeat:IPaddr2): Started cl-nfs-2
* nfs_notify (ocf::heartbeat:nfsnotify): Started cl-nfs-2
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled