IBM Cloud Docs
在 Red Hat Enterprise Linux High Availability Add-On 集群中配置主动-被动 NFS 服务器

在 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 包含三个逻辑卷 nfssharelvsap${SID}lvsaptranslv。 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.confsystem_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)。

  1. 登录 IBM Cloud®,进入 Power Virtual Server 的 存储卷视图

  2. 选择工作区

  3. 存储卷列表中过滤卷前缀,并识别范围内的所有卷的全球名称全球名称是一个 32 位十六进制数)。

    确保这些卷的 “可共享” 属性为“开启”。

  4. 虚拟服务器实例视图中,进入集群的两个虚拟服务器实例,并确认作用域卷已连接到这两个虚拟服务器实例。

在集群节点上发现新的SAN卷

当您将新的存储卷附加到虚拟服务器实例时,需要重新扫描 SCSI 总线以检测新的卷。 然后,更新虚拟服务器实例 的多路径配置

在带有新存储卷附件的节点上,运行以下命令。

rescan-scsi-bus.sh && sleep 10 && multipathd reconfigure

使用 pvs --all 命令也可以计算出卷的WWN值

准备环境变量

为了简化设置,请在两个节点上为用户ID root 准备以下环境变量。 本文余下部分中的后续命令将使用这些环境变量。

在两个节点上,创建一个包含环境变量的文件。 然后,根据您的配置进行调整。

根据您的环境修改 NFS_VHNFS_IPNFS_CLIENTSPECNFS_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.confauto_activation_volume_list 条目的示例设置:

auto_activation_volume_list = [ "rhel_root" ]

重建 initramfs 启动映像以确保启动映像不会激活由集群控制的卷组。

在两个节点上运行以下命令。

dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)

重启两个节点。

安装和设置 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_fs1nfs_fs2nfs_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系统编号的环境变量。 请将以下数字更改为您在安装 ASCSERS 时使用的系统编号。

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