適用於 SUSE Linux Enterprise Server 之 Azure VM 上 NFS 的高可用性

注意

建議您部署其中一個 Azure 第一方 NFS 服務:Azure 檔案儲存體NFS ANF 磁碟區上的 NFS,以將共用數據儲存在高可用性 SAP 系統中。 請注意,我們會使用 NFS 叢集來取消強調 SAP 參考架構。

本文說明如何部署虛擬機、設定虛擬機、安裝叢集架構,以及安裝高可用性 NFS 伺服器,以用來儲存高可用性 SAP 系統的共享數據。 本指南說明如何設定兩個SAP系統 NW1 和 NW2 所使用的高可用性 NFS 伺服器。 範例中的資源名稱(例如虛擬機、虛擬網路)假設您已使用 SAP 檔案伺服器範本 搭配資源前置

注意

本文包含 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 Load Balancer 限制。 如果您需要 VM 的其他 IP 位址,請部署第二個 NIC。

注意

當沒有公用IP位址的VM放置在內部(無公用IP位址)標準 Azure 負載平衡器的後端集區時,除非執行其他設定以允許路由傳送至公用端點,否則不會有輸出因特網連線能力。 如需如何達成輸出連線的詳細資訊,請參閱在 SAP 高可用性案例中使用 Azure Standard Load Balancer 虛擬機器 的公用端點連線。

重要

  • 請勿在位於 Azure Load Balancer 後方的 Azure VM 上啟用 TCP 時間戳。 啟用 TCP 時間戳記會導致健康狀態探查失敗。 將 net.ipv4.tcp_timestamps 參數設定為 0。 如需詳細資訊,請參閱 Load Balancer健康情況探查。
  • 若要防止 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 裝置新增至叢集設定

    重要

    最近的測試顯示,netcat 因待處理專案而停止回應要求的情況,以及只處理一個連線的限制。 netcat 資源會停止接聽 Azure Load Balancer 要求,而浮動 IP 變成無法使用。
    針對現有的 Pacemaker 叢集,我們過去建議使用 socat 取代 netcat。 目前,建議您使用屬於套件資源代理程式的 azure-lb 資源代理程式,並符合下列套件版本需求:

    • 針對 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 叢集,如果設定已變更為使用 socat,如 Azure Load-Balancer 偵測強化中所述,就不需要立即切換至 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
    

    crossmnt叢集資源中的exportfs選項會出現在我們的檔中,以便與舊版 SLES 版本回溯相容性。

  3. [1] 停用維護模式

    sudo crm configure property maintenance-mode=false
    

下一步