你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
SUSE Linux Enterprise Server 上 Azure VM 中的 NFS 的高可用性
注意
建议部署 Azure 第一方 NFS 服务之一:Azure 文件存储上的 NFS 或 NFS ANF 卷,用于在高可用性 SAP 系统中存储共享数据。 请注意,对于 SAP 参考体系结构,我们不予强调,我们会利用 NFS 群集。
本文介绍了如何部署虚拟机、配置虚拟机、安装群集框架,以及安装可用来存储高度可用的 SAP 系统的共享数据的高度可用的 NFS 服务器。 本指南介绍了如何设置供两个 SAP 系统(NW1 和 NW2)使用的高度可用的 NFS 服务器。 示例中的资源名称(例如虚拟机、虚拟网络)假设你将 SAP 文件服务器模板与资源前缀 prod 配合使用。
注意
本文包含对 Microsoft 不再使用的术语的引用。 从软件中删除这些术语后,我们会将其从本文中删除。
请先阅读以下 SAP 说明和文档
SAP 说明 1928533,其中包含:
- SAP 软件部署支持的 Azure VM 大小的列表
- Azure VM 大小的重要容量信息
- 支持的 SAP 软件、操作系统 (OS) 和数据库组合
- Microsoft Azure 上 Windows 和 Linux 所需的 SAP 内核版本
SAP 说明 2015553 列出了在 Azure 中 SAP 支持的 SAP 软件部署的先决条件。
SAP 说明 2205917 包含适用于 SUSE Linux Enterprise Server for SAP Applications 的推荐 OS 设置
SAP 说明 1944799 包含适用于 SUSE Linux Enterprise Server for SAP Applications 的 SAP HANA 准则
SAP 说明 2178632 包含为 Azure 中的 SAP 报告的所有监控指标的详细信息。
SAP 说明 2191498 包含 Azure 中的 Linux 所需的 SAP 主机代理版本。
SAP 说明 2243692 包含 Azure 中的 Linux 上的 SAP 许可的相关信息。
SAP 说明 1984787 包含有关 SUSE Linux Enterprise Server 12 的一般信息。
SAP 说明 1999351 包含适用于 SAP 的 Azure 增强型监视扩展的其他故障排除信息。
SAP Community WIKI 包含适用于 Linux 的所有必需 SAP 说明。
SUSE Linux Enterprise 高可用性扩展 12 SP5 高可用性 NFS 存储与 DRBD 和 Pacemaker
SUSE Linux Enterprise Server for SAP Applications 12 SP5 最佳做法指南
SUSE Linux Enterprise Server for SAP Applications 12 SP5 发行说明
概述
若要实现高可用性,SAP NetWeaver 需要 NFS 服务器。 NFS 服务器配置在单个群集中,可由多个 SAP 系统使用。
NFS 服务器为使用此 NFS 服务器的每个 SAP 系统使用专用的虚拟主机名和虚拟 IP 地址。 在 Azure 上,需要负载均衡器才能使用虚拟 IP 地址。 显示的配置展示了一个负载均衡器,其中:
- NW1 的前端 IP 地址 10.0.0.4
- NW2 的前端 IP 地址 10.0.0.5
- NW1 的探测端口 61000
- NW2 的探测端口 61001
设置高度可用的 NFS 服务器
通过 Azure 门户手动部署 Linux
本文档假定你已部署 Azure 虚拟网络资源组和子网。
部署 NFS 服务器的两个虚拟机。 选择 SAP 系统支持的、合适的 SLES 映像。 可以在任何一个可用性选项(规模集、可用性区域或可用性集)中部署 VM。
配置 Azure 负载均衡器
按照创建负载均衡器指南,为 NFS 服务器高可用性配置标准负载均衡器。 在配置负载均衡器期间,请考虑以下几点。
- 前端 IP 配置:创建两个前端 IP。 选择与你的 NFS 服务器相同的虚拟网络和子网。
- 后端池:创建后端池并添加 NFS 服务器 VM。
- 入站规则:创建两个负载均衡规则,一个用于 NW1,另一个用于 NW2。 对两个负载均衡规则执行相同步骤。
- 前端 IP 地址:选择前端 IP
- 后端池:选择后端池
- 检查“高可用性端口”
- 协议:TCP
- 运行状况探测:创建具有以下详细信息的运行状况探测(适用于 NW1 和 NW2)
- 协议:TCP
- 端口:[例如:用于 NW1 的 61000,用于 NW2 的 61001]
- 间隔: 5
- 探测阈值: 2
- 空闲超时 (分钟):30
- 选中“启用浮动 IP”
注意
不会遵循运行状况探测配置属性 numberOfProbes(在门户中也称为“运行不正常阈值”)。 因此,要控制成功或失败的连续探测数量,请将属性“probeThreshold”设置为 2。 当前无法使用 Azure 门户设置此属性,请使用 Azure CLI 或 PowerShell 命令。
注意
如果没有公共 IP 地址的 VM 被放在内部(无公共 IP 地址)标准 Azure 负载均衡器的后端池中,就不会有出站 Internet 连接,除非执行额外的配置来允许路由到公共终结点。 有关如何实现出站连接的详细信息,请参阅 SAP 高可用性方案中使用 Azure 标准负载均衡器的虚拟机的公共终结点连接。
重要
- 不要在放置于 Azure 负载均衡器之后的 Azure VM 上启用 TCP 时间戳。 启用 TCP 时间戳将导致运行状况探测失败。 将
net.ipv4.tcp_timestamps
参数设置为0
。 有关详细信息,请参阅负载均衡器运行状况探测。 - 为防止 saptune 将手动设置的
net.ipv4.tcp_timestamps
值从0
更改回1
,应将 saptune 版本更新为 3.1.1 或更高版本。 有关更多详细信息,请参阅 saptune 3.1.1 - 我是否需要更新?。
创建 Pacemaker 群集
按照在 Azure 中的 SUSE Linux Enterprise Server 上设置 Pacemaker 中的步骤为此 NFS 服务器创建一个基本 Pacemaker 群集。
配置 NFS 服务器
以下各项带有前缀 [A] - 适用于所有节点、[1] - 仅适用于节点 1,或 [2] - 仅适用于节点 2 。
[A] 设置主机名称解析
可以使用 DNS 服务器,或修改所有节点上的 /etc/hosts。 此示例演示如何使用 /etc/hosts 文件。 请替换以下命令中的 IP 地址和主机名
sudo vi /etc/hosts
将以下行插入 /etc/hosts。 根据环境更改 IP 地址和主机名
# IP address of the load balancer frontend configuration for NFS 10.0.0.4 nw1-nfs 10.0.0.5 nw2-nfs
[A] 启用 NFS 服务器
创建根 NFS 导出条目
sudo sh -c 'echo /srv/nfs/ *\(rw,no_root_squash,fsid=0\)>/etc/exports' sudo mkdir /srv/nfs/
[A] 安装 drbd 组件
sudo zypper install drbd drbd-kmp-default drbd-utils
[A] 为 drbd 设备创建分区
列出所有可用的数据磁盘
sudo ls /dev/disk/azure/scsi1/ # Example output # lun0 lun1
为每个数据磁盘创建分区
sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun0' sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun1'
[A] 创建 LVM 配置
列出所有可用的分区
ls /dev/disk/azure/scsi1/lun*-part* # Example output # /dev/disk/azure/scsi1/lun0-part1 /dev/disk/azure/scsi1/lun1-part1
为每个分区创建 LVM 卷
sudo pvcreate /dev/disk/azure/scsi1/lun0-part1 sudo vgcreate vg-NW1-NFS /dev/disk/azure/scsi1/lun0-part1 sudo lvcreate -l 100%FREE -n NW1 vg-NW1-NFS sudo pvcreate /dev/disk/azure/scsi1/lun1-part1 sudo vgcreate vg-NW2-NFS /dev/disk/azure/scsi1/lun1-part1 sudo lvcreate -l 100%FREE -n NW2 vg-NW2-NFS
[A] 配置 drbd
sudo vi /etc/drbd.conf
确保 drbd.conf 文件包含以下两行
include "drbd.d/global_common.conf"; include "drbd.d/*.res";
更改全局 drbd 配置
sudo vi /etc/drbd.d/global_common.conf
将以下条目添加到处理程序和 net 部分。
global { usage-count no; } common { handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh"; split-brain "/usr/lib/drbd/notify-split-brain.sh root"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; } startup { wfc-timeout 0; } options { } disk { md-flushes yes; disk-flushes yes; c-plan-ahead 1; c-min-rate 100M; c-fill-target 20M; c-max-rate 4G; } net { after-sb-0pri discard-younger-primary; after-sb-1pri discard-secondary; after-sb-2pri call-pri-lost-after-sb; protocol C; tcp-cork yes; max-buffers 20000; max-epoch-size 20000; sndbuf-size 0; rcvbuf-size 0; } }
[A] 创建 NFS drbd 设备
sudo vi /etc/drbd.d/NW1-nfs.res
为新的 drbd 设备插入配置并退出
resource NW1-nfs { protocol C; disk { on-io-error detach; } net { fencing resource-and-stonith; } on prod-nfs-0 { address 10.0.0.6:7790; device /dev/drbd0; disk /dev/vg-NW1-NFS/NW1; meta-disk internal; } on prod-nfs-1 { address 10.0.0.7:7790; device /dev/drbd0; disk /dev/vg-NW1-NFS/NW1; meta-disk internal; } }
sudo vi /etc/drbd.d/NW2-nfs.res
为新的 drbd 设备插入配置并退出
resource NW2-nfs { protocol C; disk { on-io-error detach; } net { fencing resource-and-stonith; } on prod-nfs-0 { address 10.0.0.6:7791; device /dev/drbd1; disk /dev/vg-NW2-NFS/NW2; meta-disk internal; } on prod-nfs-1 { address 10.0.0.7:7791; device /dev/drbd1; disk /dev/vg-NW2-NFS/NW2; meta-disk internal; } }
创建 drbd 设备并启动
sudo drbdadm create-md NW1-nfs sudo drbdadm create-md NW2-nfs sudo drbdadm up NW1-nfs sudo drbdadm up NW2-nfs
[1] 跳过初始同步
sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
[1] 设置主节点
sudo drbdadm primary --force NW1-nfs sudo drbdadm primary --force NW2-nfs
[1] 等待新的 drbd 设备完成同步
sudo drbdsetup wait-sync-resource NW1-nfs sudo drbdsetup wait-sync-resource NW2-nfs
[1] 在 drbd 设备上创建文件系统
sudo mkfs.xfs /dev/drbd0 sudo mkdir /srv/nfs/NW1 sudo chattr +i /srv/nfs/NW1 sudo mount -t xfs /dev/drbd0 /srv/nfs/NW1 sudo mkdir /srv/nfs/NW1/sidsys sudo mkdir /srv/nfs/NW1/sapmntsid sudo mkdir /srv/nfs/NW1/trans sudo mkdir /srv/nfs/NW1/ASCS sudo mkdir /srv/nfs/NW1/ASCSERS sudo mkdir /srv/nfs/NW1/SCS sudo mkdir /srv/nfs/NW1/SCSERS sudo umount /srv/nfs/NW1 sudo mkfs.xfs /dev/drbd1 sudo mkdir /srv/nfs/NW2 sudo chattr +i /srv/nfs/NW2 sudo mount -t xfs /dev/drbd1 /srv/nfs/NW2 sudo mkdir /srv/nfs/NW2/sidsys sudo mkdir /srv/nfs/NW2/sapmntsid sudo mkdir /srv/nfs/NW2/trans sudo mkdir /srv/nfs/NW2/ASCS sudo mkdir /srv/nfs/NW2/ASCSERS sudo mkdir /srv/nfs/NW2/SCS sudo mkdir /srv/nfs/NW2/SCSERS sudo umount /srv/nfs/NW2
[A] 设置 drbd 裂脑检测
当使用 drbd 将数据从一台主机同步到另一台主机时,可能会发生所谓的裂脑。 裂脑是指两个群集节点都将 drbd 设备提升为主设备并且失去同步的一种情况。虽然它可能很少见,但你仍然希望尽快处理并解决裂脑情况。 因此,在发生裂脑时收到通知非常重要。
请阅读正式的 drbd 文档来了解如何设置裂脑通知。
还可以自动从裂脑情况恢复。 有关详细信息,请阅读裂脑自动恢复策略
配置群集框架
[1] 为 SAP 系统 NW1 向群集配置中添加 NFS drbd 设备
重要
最近的测试表明,由于积压工作 (backlog) 及其仅处理一个连接的限制,netcat 停止响应请求。 netcat 资源停止侦听 Azure 负载均衡器请求,并且浮动 IP 变为不可用。
对于现有 Pacemaker 群集,我们过去建议将 netcat 替换为 socat。 当前,我们建议使用 azure-lb 资源代理,它是包 resource-agents 的一部分,具有以下包版本要求:- 对于 SLES 12 SP4/SP5,版本必须至少为 resource-agents-4.3.018.a7fb5035-3.30.1。
- 对于 SLES 15/15 SP1,版本必须至少为 resource-agents-4.3.0184.6ee15eb2-4.13.1。
请注意,更改将需要短暂的停机时间。
对于现有的 Pacemaker 群集,如果已经按照 Azure 负载平衡器检测强化中所述将配置更改为使用 socat,则无需立即切换到 azure-lb 资源代理。sudo crm configure rsc_defaults resource-stickiness="200" # Enable maintenance mode sudo crm configure property maintenance-mode=true sudo crm configure primitive drbd_NW1_nfs \ ocf:linbit:drbd \ params drbd_resource="NW1-nfs" \ op monitor interval="15" role="Master" \ op monitor interval="30" role="Slave" sudo crm configure ms ms-drbd_NW1_nfs drbd_NW1_nfs \ meta master-max="1" master-node-max="1" clone-max="2" \ clone-node-max="1" notify="true" interleave="true" sudo crm configure primitive fs_NW1_sapmnt \ ocf:heartbeat:Filesystem \ params device=/dev/drbd0 \ directory=/srv/nfs/NW1 \ fstype=xfs \ op monitor interval="10s" sudo crm configure primitive nfsserver systemd:nfs-server \ op monitor interval="30s" sudo crm configure clone cl-nfsserver nfsserver sudo crm configure primitive exportfs_NW1 \ ocf:heartbeat:exportfs \ params directory="/srv/nfs/NW1" \ options="rw,no_root_squash,crossmnt" clientspec="*" fsid=1 wait_for_leasetime_on_stop=true op monitor interval="30s" sudo crm configure primitive vip_NW1_nfs IPaddr2 \ params ip=10.0.0.4 op monitor interval=10 timeout=20 sudo crm configure primitive nc_NW1_nfs azure-lb port=61000 \ op monitor timeout=20s interval=10 sudo crm configure group g-NW1_nfs \ fs_NW1_sapmnt exportfs_NW1 nc_NW1_nfs vip_NW1_nfs sudo crm configure order o-NW1_drbd_before_nfs inf: \ ms-drbd_NW1_nfs:promote g-NW1_nfs:start sudo crm configure colocation col-NW1_nfs_on_drbd inf: \ g-NW1_nfs ms-drbd_NW1_nfs:Master
[1] 为 SAP 系统 NW2 向群集配置中添加 NFS drbd 设备
# Enable maintenance mode sudo crm configure property maintenance-mode=true sudo crm configure primitive drbd_NW2_nfs \ ocf:linbit:drbd \ params drbd_resource="NW2-nfs" \ op monitor interval="15" role="Master" \ op monitor interval="30" role="Slave" sudo crm configure ms ms-drbd_NW2_nfs drbd_NW2_nfs \ meta master-max="1" master-node-max="1" clone-max="2" \ clone-node-max="1" notify="true" interleave="true" sudo crm configure primitive fs_NW2_sapmnt \ ocf:heartbeat:Filesystem \ params device=/dev/drbd1 \ directory=/srv/nfs/NW2 \ fstype=xfs \ op monitor interval="10s" sudo crm configure primitive exportfs_NW2 \ ocf:heartbeat:exportfs \ params directory="/srv/nfs/NW2" \ options="rw,no_root_squash,crossmnt" clientspec="*" fsid=2 wait_for_leasetime_on_stop=true op monitor interval="30s" sudo crm configure primitive vip_NW2_nfs IPaddr2 \ params ip=10.0.0.5 op monitor interval=10 timeout=20 sudo crm configure primitive nc_NW2_nfs azure-lb port=61001 \ op monitor timeout=20s interval=10 sudo crm configure group g-NW2_nfs \ fs_NW2_sapmnt exportfs_NW2 nc_NW2_nfs vip_NW2_nfs sudo crm configure order o-NW2_drbd_before_nfs inf: \ ms-drbd_NW2_nfs:promote g-NW2_nfs:start sudo crm configure colocation col-NW2_nfs_on_drbd inf: \ g-NW2_nfs ms-drbd_NW2_nfs:Master
文档中提供了
exportfs
群集资源中的crossmnt
选项,以便与较旧的 SLES 版本向后兼容。[1] 禁用维护模式
sudo crm configure property maintenance-mode=false
后续步骤
- 安装 SAP ASCS 和数据库
- 适用于 SAP 的 Azure 虚拟机规划和实施
- 适用于 SAP 的 Azure 虚拟机部署
- 适用于 SAP 的 Azure 虚拟机 DBMS 部署
- 若要了解如何在 Azure VM 上建立 SAP HANA 高可用性以及规划灾难恢复,请参阅 Azure 虚拟机 (VM) 上的 SAP HANA 高可用性