適用於 SUSE Linux Enterprise Server 之 Azure VM 上 NFS 的高可用性
注意
建議您部署其中一個 Azure 第一方 NFS 服務:Azure 檔案儲存體上的 NFS 或 NFS ANF 磁碟區,以將共用資料儲存在高可用性 SAP 系統中。 請注意,我們會使用 NFS 叢集來取消強調 SAP 參考架構。
本文說明如何部署虛擬機器、設定虛擬機器、安裝叢集架構,以及安裝可用來儲存高可用性 SAP 系統之共用資料的高可用性 NFS 伺服器。 本指南說明如何設定供兩個 SAP 系統 (NW1 和 NW2) 使用的高可用性 NFS 伺服器。 範例中資源 (例如虛擬機器、虛擬網路) 的名稱是假設您已使用資源前置詞為 prod 的 SAP 檔案伺服器範本。
注意
本文包含 Microsoft 不再使用的詞彙。 當這些字詞在軟體中移除時,也會在本文中移除。
請先閱讀下列 SAP Note 和文件
SAP Note 1928533,其中包含:
- SAP 軟體部署支援的 Azure VM 大小清單
- Azure VM 大小的重要容量資訊
- 支援的 SAP 軟體,以及作業系統 (OS) 與資料庫組合
- Microsoft Azure 上 Windows 和 Linux 所需的 SAP 核心版本
SAP Note 2015553 列出 Azure 中 SAP 支援的 SAP 軟體部署先決條件。
SAP Note 2205917 包含適用於 SUSE Linux Enterprise Server for SAP Applications 的建議 OS 設定
SAP Note 1944799 包含適用於 SUSE Linux Enterprise Server for SAP Applications 的 SAP HANA 指導方針
SAP Note 2178632 包含在 Azure 中針對 SAP 回報的所有監視計量詳細資訊。
SAP Note 2191498 包含 Azure 中 Linux 所需的 SAP Host Agent 版本。
SAP Note 2243692 包含 Azure 中 Linux 上的 SAP 授權相關資訊。
SAP Note 1984787 包含 SUSE LINUX Enterprise Server 12 的一般資訊。
SAP Note 1999351 包含 Azure Enhanced Monitoring Extension for SAP 的其他疑難排解資訊。
SAP Community WIKI 包含 Linux 所需的所有 SAP Note。
SUSE Linux Enterprise 高可用性擴充功能 12 SP5 高可用性 NFS 記憶體與 DRBD 和 Pacemaker
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 Load Balancer
請遵循建立負載平衡器指南,來設定 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 位址) 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。
[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
將下列項目新增至處理常式和網路區段。
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 裝置新增至叢集設定
重要
最近測試顯示 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
[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 的高可用性