你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

SUSE Linux Enterprise Server 上 Azure VM 中的 NFS 的高可用性

注意

建议部署 Azure 第一方 NFS 服务之一:Azure 文件存储上的 NFSNFS ANF 卷,用于在高可用性 SAP 系统中存储共享数据。 请注意,对于 SAP 参考体系结构,我们不予强调,我们会利用 NFS 群集。

本文介绍了如何部署虚拟机、配置虚拟机、安装群集框架,以及安装可用来存储高度可用的 SAP 系统的共享数据的高度可用的 NFS 服务器。 本指南介绍了如何设置供两个 SAP 系统(NW1 和 NW2)使用的高度可用的 NFS 服务器。 示例中的资源名称(例如虚拟机、虚拟网络)假设你将 SAP 文件服务器模板与资源前缀 prod 配合使用。

注意

本文包含对 Microsoft 不再使用的术语的引用。 从软件中删除这些术语后,我们会将其从本文中删除。

请先阅读以下 SAP 说明和文档

概述

若要实现高可用性,SAP NetWeaver 需要 NFS 服务器。 NFS 服务器配置在单个群集中,可由多个 SAP 系统使用。

SAP NetWeaver High Availability overview

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 服务器高可用性配置标准负载均衡器。 在配置负载均衡器期间,请考虑以下几点。

  1. 前端 IP 配置: 创建两个前端 IP。 选择与 NFS 服务器相同的虚拟网络和子网。
  2. 后端池: 创建后端池并添加 NFS 服务器 VM。
  3. 入站规则: 创建两个负载均衡规则,一个用于 NW1,另一个用于 NW2。 针对这两个负载均衡规则,请遵循相同的步骤。
    • 前端 IP 地址:选择前端 IP
    • 后端池:选择后端池
    • 检查“高可用性端口”
    • 协议:TCP
    • 运行状况探测:使用以下详细信息创建运行状况探测(适用于 NW1 和 NW2)
      • 协议:TCP
      • 端口:[例如:NW1 61000,NW2 为 61001]
      • 间隔:5
      • 探测阈值:2
    • 空闲超时(分钟):30
    • 选中“启用浮动 IP”

注意

不会遵循运行状况探测配置属性 numberOfProbes(在门户中也称为“运行不正常阈值”)。 因此,若要控制连续探测成功或失败的次数,请将属性“probeThreshold”设置为 2。 目前无法使用 Azure 门户 设置此属性,因此请使用 Azure CLIPowerShell 命令。

重要

负载均衡方案中的 NIC 辅助 IP 配置不支持浮动 IP。 有关详细信息,请参阅 Azure 负载均衡器限制。 如果你需要为 VM 提供其他 IP 地址,请部署第二个 NIC。

注意

如果没有公共 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 。

  1. [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
    
  2. [A] 启用 NFS 服务器

    创建根 NFS 导出条目

    sudo sh -c 'echo /srv/nfs/ *\(rw,no_root_squash,fsid=0\)>/etc/exports'
    
    sudo mkdir /srv/nfs/
    
  3. [A] 安装 drbd 组件

    sudo zypper install drbd drbd-kmp-default drbd-utils
    
  4. [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'
    
  5. [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
    
  6. [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;
         }
    }
    
  7. [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
    
  8. [1] 跳过初始同步

    sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs
    sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
    
  9. [1] 设置主节点

    sudo drbdadm primary --force NW1-nfs
    sudo drbdadm primary --force NW2-nfs
    
  10. [1] 等待新的 drbd 设备完成同步

    sudo drbdsetup wait-sync-resource NW1-nfs
    sudo drbdsetup wait-sync-resource NW2-nfs
    
  11. [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
    
  12. [A] 设置 drbd 裂脑检测

    当使用 drbd 将数据从一台主机同步到另一台主机时,可能会发生所谓的裂脑。 裂脑是指两个群集节点都将 drbd 设备提升为主设备并且失去同步的一种情况。虽然它可能很少见,但你仍然希望尽快处理并解决裂脑情况。 因此,在发生裂脑时收到通知非常重要。

    请阅读正式的 drbd 文档来了解如何设置裂脑通知。

    还可以自动从裂脑情况恢复。 有关详细信息,请阅读裂脑自动恢复策略

配置群集框架

  1. [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
    
  2. [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 版本向后兼容。

  3. [1] 禁用维护模式

    sudo crm configure property maintenance-mode=false
    

后续步骤