分享方式:


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

注意

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

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

注意

本文包含 Microsoft 不再使用的詞彙。 當這些字詞在軟體中移除時,也會在本文中移除。

請先閱讀下列 SAP Note 和文件

概觀

為了實現高可用性,SAP NetWeaver 需要使用 NFS 伺服器。 NFS 伺服器會設定於不同叢集中,並可供多個 SAP 系統使用。

SAP NetWeaver 高可用性概觀

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 Load Balancer

請遵循建立負載平衡器指南,來設定 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 命令。

注意

當不具公用 IP 位址的 VM 放在內部 (沒有公用 IP 位址) Standard Azure Load Balancer 的後端集區時,除非另外設定來允許路由傳送至公用端點,否則不會有輸出網際網路連線能力。 如需如何實現輸出連線能力的詳細資料,請參閱在 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
    

    將下列項目新增至處理常式和網路區段。

    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 叢集,我們在過去建議將 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 Load Balancer 偵測強化中的描述變更為使用 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
    

下一步