RHEL 上 SAP MaxDB 的手動 HA 叢集設定指南

本指南說明如何在 Google Cloud的 Red Hat Enterprise Linux (RHEL) 高可用性叢集中,以主動/被動叢集設定部署 SAP MaxDB 系統。

如要在 Linux 上部署單一節點 SAP MaxDB 系統,請與客戶服務聯絡。

本指南適用對象為進階 SAP MaxDB 使用者,其熟悉如何針對 SAP 系統進行 Linux HA 設定。

本指南部署的系統

本指南包含下列步驟:

  • 設定內部直通式網路負載平衡器,在發生故障時重新導向流量
  • 在 RHEL 上設定 Pacemaker 叢集,以便在容錯移轉期間管理 SAP 系統和其他資源

已部署叢集包含下列功能和特色:

  • 位於不同區域的兩個 Compute Engine VM,能夠執行 SAP MaxDB 執行個體
  • 用於安裝 SAP MaxDB 的區域永久磁碟。
  • Pacemaker 高可用性叢集資源管理員。
  • STONITH 防護機制。

本指南未涵蓋 SAP NetWeaver 的高可用性安裝作業。

必要條件

建立 SAP MaxDB 高可用性叢集前,請確保符合下列必備條件:

建立網路

基於安全性考量,請建立新的網路。您可以新增防火牆規則或使用另一個存取權控管方法,藉此控管具有存取權的對象。

假如您的專案具有預設的虛擬私有雲端網路,請勿使用。請建立您自己專屬的虛擬私有雲網路,確保系統只套用您明確建立的防火牆規則。

在部署期間,Compute Engine 執行個體一般需要網際網路的存取權,以下載 Google Cloud適用於 SAP 的代理程式。如果您使用 Google Cloud提供的其中一種 SAP 認證 Linux 映像檔,運算執行個體也需要存取網際網路,才能註冊授權並存取 OS 供應商存放區。具有 NAT 閘道和 VM 網路標記的設定即可支援上述存取需求,即便目標運算執行個體沒有外部 IP。

如要設定網路:

控制台

  1. 在 Google Cloud 控制台中,前往「VPC networks」(VPC 網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」
  3. 輸入網路的「名稱」

    名稱必須符合命名慣例。虛擬私有雲網路使用 Compute Engine 命名慣例。

  4. 在 [Subnet creation mode] (子網路建立模式) 中,選擇 [Custom]。
  5. 在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:
    1. 輸入子網路的「名稱」
    2. 在「Region」(區域) 中,選取要建立子網路的 Compute Engine 區域
    3. 在「IP 堆疊類型」中,選取「IPv4 (單一堆疊)」,然後以 CIDR 格式輸入 IP 位址範圍,例如 10.1.0.0/24

      這是子網路的主要 IPv4 範圍。如果您打算新增多個子網路,請為網路中的每個子網路指派不重疊的 CIDR IP 範圍。請注意,每個子網路及其內部 IP 範圍都會對應至單一地區。

    4. 按一下「完成」
  6. 如要新增其他子網路,請按一下「新增子網路」,然後重複上述步驟。建立網路之後,您也可以在網路中新增更多子網路。
  7. 按一下 [建立]。

gcloud

  1. 前往 Cloud Shell。

    前往 Cloud Shell

  2. 如要在自訂子網路模式中建立新的網路,請執行:
    gcloud compute networks create NETWORK_NAME --subnet-mode custom

    NETWORK_NAME 替換為新網路的名稱。名稱必須符合命名慣例。虛擬私有雲網路使用 Compute Engine 命名慣例。

    指定 --subnet-mode custom 以避免使用預設的自動模式,不然系統會自動在每個 Compute Engine 地區建立子網路。詳情請參閱子網路建立模式

  3. 建立子網路,並指定地區和 IP 範圍:
    gcloud compute networks subnets create SUBNETWORK_NAME \
        --network NETWORK_NAME --region REGION --range RANGE

    更改下列內容:

    • SUBNETWORK_NAME:新子網路的名稱
    • NETWORK_NAME:您在上一步建立的網路名稱
    • REGION:您希望子網路所在的區域
    • RANGE:IP 位址範圍,以 CIDR 格式指定,例如 10.1.0.0/24

      如果您打算新增多個子網路,請為網路中的每個子網路指派不重疊的 CIDR IP 範圍。請注意,每個子網路及其內部 IP 範圍都會對應至單一地區。

  4. (選用) 重複上述步驟以新增其他子網路。

設定 NAT 閘道

如果您需要建立一或多個沒有公開 IP 位址的 VM,則必須使用網路位址轉譯 (NAT) 讓 VM 存取網際網路。使用 Cloud NAT,這是一項 Google Cloud 分散式軟體定義管理服務,可讓 VM 將輸出封包傳送至網際網路,並接收任何相應的已建立輸入回應封包。或者,您也可以將個別 VM 設為 NAT 閘道。

如要為專案建立 Cloud NAT 執行個體,請參閱「使用 Cloud NAT」。

為專案設定 Cloud NAT 後,VM 執行個體就能在沒有公開 IP 位址的情況下安全存取網際網路。

新增防火牆規則

根據預設,「默示的防火牆規則」會封鎖從虛擬私有雲 (VPC) 網路之外連入的連線。如要允許連入的連線,請設定 VM 的防火牆規則。使用 VM 建立連入的連線後,系統會允許該連線上雙向的流量。

您也可以建立防火牆規則,允許外部存取指定的通訊埠,或限制相同網路上 VM 之間的存取。若使用 default虛擬私人雲端網路類型,一些其他的預設規則也適用,例如 default-allow-internal 規則,允許相同網路中 VM 之間所有通訊埠的連線。

根據適用於環境的 IT 政策,您可能需要區隔或限制資料庫主機的連線,這些功能可以透過建立防火牆規則來完成。

根據您的情境,可建立防火牆規則以允許下列項目存取:

  • 列於所有 SAP 產品的 TCP/IP 中的預設 SAP 通訊埠。
  • 從電腦或公司網路環境到 Compute Engine VM 執行個體的連線。如果不確定要使用哪一個 IP 位址,請詢問貴公司的網路管理員。

建立防火牆規則的步驟如下:

主控台

  1. 在 Google Cloud 控制台中,前往 Compute Engine 的「Firewall」(防火牆) 頁面。

    前往「Firewall」(防火牆) 頁面

  2. 按一下頁面頂端的 [Create firewall rule] (建立防火牆規則)

    • 在「Network」(網路) 欄位中,選取您 VM 所在的網路。
    • 在「Targets」(目標) 欄位中,指定此規則適用的 Google Cloud資源。例如,指定「All instances in the network」(網路中的所有執行個體),或者,如要將規則限制於 Google Cloud上特定的執行個體,請在「Specified target tags」(指定的目標標記) 中輸入標記。
    • 在「Source filter」(來源篩選器) 欄位中選取下列其中一項:
      • 「IP ranges」(IP 範圍) - 允許來自特定 IP 位址連入的流量。 在「來源 IP 範圍」欄位中指定 IP 位址範圍。
      • 「Subnets」(子網路) - 允許來自特定子網路的連入流量。請在隨後的「Subnets」(子網路) 欄位中指定子網路名稱。您可以使用這個選項允許 3 層或向外擴充設定中 VM 之間的存取作業。
    • 在「Protocols and ports」(通訊協定和通訊埠) 區段中,選取「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入 tcp:PORT_NUMBER
  3. 按一下 [Create] (建立) 以建立您的防火牆規則。

gcloud

使用下列指令建立防火牆規則:

$ gcloud compute firewall-rules create firewall-name
--direction=INGRESS --priority=1000 \
--network=network-name --action=ALLOW --rules=protocol:port \
--source-ranges ip-range --target-tags=network-tags

部署 VM 並安裝 MaxDB

開始設定 HA 叢集之前,請先定義及部署 VM 執行個體和 SAP MaxDB 系統,做為 HA 叢集中的主要和次要節點。

建立 VM 以部署 MaxDB

在 HA 部署作業中,您需要建立兩個 Google Cloud Compute Engine VM。您可以參閱「建立及啟動 Compute Engine 執行個體」指南。

請注意,區域性永久磁碟僅支援使用 E2、N1、N2 和 N2D 機型。詳情請參閱地區永久磁碟指南

請參閱 SAP 注意事項 2456432 - Google Cloud Platform 上的 SAP 應用程式:支援的產品和機器類型,根據大小選取合適的機器類型。 Google CloudGoogle Cloud

在不同可用區中建立兩個 VM,以達到區域復原能力,並符合下列最低需求:

  1. VM 詳細資料:

    • Instance Name
    • Zone - 偏好的區域
    • Machine Type - 根據尺寸
    • Subnet - 為這個區域建立的子網路名稱
  2. 服務帳戶,且至少具備下列 API 的存取範圍:

    • https://www.googleapis.com/auth/compute
    • https://www.googleapis.com/auth/servicecontrol
    • https://www.googleapis.com/auth/service.management.readonly
    • https://www.googleapis.com/auth/logging.write
    • https://www.googleapis.com/auth/monitoring.write
    • https://www.googleapis.com/auth/trace.append
    • https://www.googleapis.com/auth/devstorage.read_write
  3. 每個 VM 至少要有 20 GB 的額外磁碟,用於 /usr/sap

為 SAP MaxDB 建立單一地區磁碟

在這個部署作業中,一個區域磁碟會用於保存 /sapdb 目錄中的 MaxDB 檔案。

建立磁碟,並確保地區磁碟的複製區域與您建立兩個 VM 的區域相符。

連結區域磁碟至其中一個 VM,您將在該 VM 上執行 MaxDB 安裝和設定工作。

準備 RHEL OS 以安裝 SAP

SAP 產品需要安裝特定作業系統設定和套件。 請按照 SAP 附註:2772999 - Red Hat Enterprise Linux 8.x:安裝與設定中的指南操作。

這項工作必須在兩個節點上執行。

建立檔案系統

  1. 使用 SSH 連線至兩個執行個體,並建立 /usr/sap/SID/sapdb 掛接點。

    # sudo mkdir -p /usr/sap/SID
    # sudo mkdir -p /sapdb
  2. 使用 mkfs 在附加至 VM 的兩個額外磁碟中建立檔案系統。

    請注意,此時地區磁碟只會附加至其中一個 VM,因此 /sapdb 檔案系統只會建立一次。

  3. 編輯 /etc/fstab 檔案,在兩個節點上重新啟動時一律掛接 /usr/sap/SID

  4. 手動將 /sapdb 檔案系統掛接到要執行 MaxDB 安裝作業的節點。

    如需建立及掛接檔案系統的其他參考資料,請參閱「在 Linux VM 上格式化及掛接非開機磁碟」指南。

修改 LVM 設定

您需要修改邏輯磁碟區管理 (LVM) 設定,確保共用磁碟區群組 (VG) 一律只會附加至一個節點,且只能由該節點存取。

如要這麼做,請在兩個節點上執行下列步驟:

  1. 以根使用者身分編輯 /etc/lvm/lvm.conf 檔案,並將 system_id_source 值從 none 修改為 uname

  2. 查看結果:

    # grep -i system_id_source /etc/lvm/lvm.conf

    畫面會顯示類似以下的輸出:

    # Configuration option global/system_id_source.
            system_id_source = "uname"
    
  3. 此外,如要防止 VM 在節點重新啟動時啟用叢集管理的 VG,請在 /etc/lvm/lvm.conf 設定檔中保留下列參數,並以半形逗號分隔叢集未管理的完整 VG 名稱。

    舉例來說,如果 usrsap 是叢集未管理的 VG 名稱:

    auto_activation_volume_list = [ usrsap ]

    如果沒有叢集未管理的 VG,例如,必須新增這個參數,並提供空白值:

    auto_activation_volume_list = [  ]

安裝資料庫和 SAP 主機代理程式

作業系統設定現在已經完成,可以安裝 SAP MaxDB 資料庫和 SAP Host Agent。MaxDB 通常會連同整合的 SAP 產品一起安裝。

請注意,系統只會執行一次安裝作業,也就是在您連結地區永久磁碟的執行個體中執行。

如要在 VM 上安裝 SAP MaxDB:

  1. 與以 Linux 為基礎的 VM 建立 SSH 連線。
  2. 根據 SAP 安裝指南,下載 SAP Software Provisioning Manager (SWPM)、SAP 產品安裝媒體與 MaxDB 安裝媒體。
  3. 根據 SAP 產品的 SAP 安裝指南,安裝 SAP 產品與 SAP MaxDB 資料庫。如需其他指引,請參閱 SAP MaxDB 說明文件

SAP 在 SAP 附註 1020175 - 常見問題:SAP MaxDB 安裝、升級或套用修補程式中提供其他安裝資訊。

安裝完成後,請執行下列驗證:

  1. 以 sidadm 使用者身分,檢查 MaxDB 的狀態。

    # dbmcli -d  SID -u control,password db_state

    您會看到類似以下範例的輸出內容:

    >dbmcli -d  MDB -u control, my_p4$$w0rd db_state
    OK
    State
    ONLINE
    
  2. 同時檢查 x_server 的狀態:

    # x_server

    您會看到類似以下範例的輸出內容:

    >x_server
    2024-10-23 19:01:43 11968 19744 INF  12916          Found running XServer on port 7200
    2024-10-23 19:01:43 11968 19744 INF  13011            version 'U64/LIX86 7.9.10   Build 004-123-265-969'
    2024-10-23 19:01:43 11968 19744 INF  13010            installation MDB  - path: /sapdb/MDB/db
    2024-10-23 19:01:45 11971 13344 INF  12916          Found running sdbgloballistener on port 7210
    2024-10-23 19:01:45 11971 13344 INF  13011            version 'U64/LIX86 7.9.10   Build 004-123-265-969'
    
  3. 檢查 SAP Host 代理程式是否正在執行:

    # ps -ef | grep -i hostctrl

    您會看到類似以下範例的輸出內容:

    >ps -ef | grep -i hostctrl
    root      1543     1  0 Oct18 ?        00:00:15 /usr/sap/hostctrl/exe/saphostexec pf=/usr/sap/hostctrl/exe/host_profile
    sapadm    1550     1  0 Oct18 ?        00:03:00 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile -D
    root      1618     1  0 Oct18 ?        00:03:48 /usr/sap/hostctrl/exe/saposcol -l -w60 pf=/usr/sap/hostctrl/exe/host_profile
    mdbadm   12751 11261  0 19:03 pts/0    00:00:00 grep --color=auto -i hostctrl
    
  4. 確認安裝作業後,請停止 MaxDB 執行個體和 x_server。

    # dbmcli -d SID -u control, and password db_offline
    # x_server stop
    

執行安裝後工作

使用 SAP MaxDB 執行個體之前,建議您執行下列部署後步驟:

  1. 如果有最新的修補程式,請利用這些程式更新 SAP MaxDB 軟體。
  2. 安裝任何額外的元件。
  3. 設定並備份新的 SAP MaxDB 資料庫。

詳情請參閱 SAP MaxDB 資料庫管理

成功部署 SAP MaxDB 系統後,請定義及設定 HA 叢集。

設定 Cloud Load Balancing 容錯移轉支援

支援容錯移轉的內部直通式網路負載平衡器服務,會根據健康狀態檢查服務,將流量轉送至 SAP MaxDB 叢集中的作用中主機。

為虛擬 IP 保留 IP 位址

虛擬 IP (VIP) 位址 (有時也稱為「浮動」IP 位址) 會跟隨啟用中的 SAP MaxDB 系統。負載平衡器會將傳送至 VIP 的流量,轉送至代管有效 SAP MaxDB 系統的 VM。

  1. 開啟 Cloud Shell:

    前往 Cloud Shell

  2. 為虛擬 IP 保留 IP 位址。這是應用程式用來存取 SAP MaxDB 的 IP 位址。如果省略 --addresses 標記,系統會為您選擇指定子網路中的 IP 位址:

    $ gcloud compute addresses create VIP_NAME \
      --region CLUSTER_REGION --subnet CLUSTER_SUBNET \
      --addresses VIP_ADDRESS

    如要進一步瞭解如何保留靜態 IP,請參閱「保留靜態內部 IP 位址」。

  3. 確認 IP 位址保留情形:

    $ gcloud compute addresses describe VIP_NAME \
      --region CLUSTER_REGION

    您會看到類似以下範例的輸出內容:

    address: 10.0.0.19
    addressType: INTERNAL
    creationTimestamp: '2024-10-23T14:19:03.109-07:00'
    description: ''
    id: '8961491304398200872'
    kind: compute#address
    name: vip-for-maxdb-ha
    networkTier: PREMIUM
    purpose: GCE_ENDPOINT
    region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/addresses/vip-for-maxdb-ha
    status: RESERVED
    subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-subnet-us-central1

為主機 VM 建立執行個體群組

  1. 在 Cloud Shell 中建立兩個非代管執行個體群組,並將主要主機 VM 指派給其中一個,次要主機 VM 則指派給另一個:

    $ gcloud compute instance-groups unmanaged create PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE \
      --instances=PRIMARY_HOST_NAME
    $ gcloud compute instance-groups unmanaged create SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE \
      --instances=SECONDARY_HOST_NAME
    
  2. 確認執行個體群組已建立:

    $ gcloud compute instance-groups unmanaged list

    您會看到類似以下範例的輸出內容:

    NAME          ZONE           NETWORK          NETWORK_PROJECT        MANAGED  INSTANCES
    maxdb-ha-ig-1  us-central1-a  example-network  example-project-123456 No       1
    maxdb-ha-ig-2  us-central1-c  example-network  example-project-123456 No       1

建立 Compute Engine 健康狀態檢查

  1. 在 Cloud Shell 中建立健康狀態檢查。健康狀態檢查使用的通訊埠請選擇私有範圍 (49152 到 65535) 內的通訊埠,以免與其他服務發生衝突。檢查間隔和逾時值會比預設值稍長,以便在 Compute Engine 即時遷移事件期間,提高容錯移轉的容許度。如有需要,可以調整值:

    $ gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port=HEALTHCHECK_PORT_NUM \
      --proxy-header=NONE --check-interval=10 --timeout=10 --unhealthy-threshold=2 \
      --healthy-threshold=2
  2. 確認健康狀態檢查的建立作業:

    $ gcloud compute health-checks describe HEALTH_CHECK_NAME

    您會看到類似以下範例的輸出內容:

    checkIntervalSec: 10
    creationTimestamp: '2023-10-23T21:03:06.924-07:00'
    healthyThreshold: 2
    id: '4963070308818371477'
    kind: compute#healthCheck
    name: maxdb-health-check
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/maxdb-health-check
    tcpHealthCheck:
     port: 60000
     portSpecification: USE_FIXED_PORT
     proxyHeader: NONE
    timeoutSec: 10
    type: TCP
    unhealthyThreshold: 2

建立健康狀態檢查的防火牆規則

在私人範圍內為通訊埠定義防火牆規則,允許從 Compute Engine 健康檢查使用的 IP 範圍 (35.191.0.0/16130.211.0.0/22) 存取主機 VM。詳情請參閱「為健康狀態檢查建立防火牆規則」。

  1. 如果沒有,請在主機 VM 中新增網路標記。這個網路標記會用於健康狀態檢查的防火牆規則。

    $ gcloud compute instances add-tags PRIMARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone PRIMARY_ZONE
    $ gcloud compute instances add-tags SECONDARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone SECONDARY_ZONE
    
  2. 如果沒有,請建立防火牆規則,允許健康狀態檢查:

    $ gcloud compute firewall-rules create RULE_NAME \
      --network NETWORK_NAME \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags NETWORK_TAGS \
      --rules tcp:HLTH_CHK_PORT_NUM

    例如:

    gcloud compute firewall-rules create  fw-allow-health-checks \
    --network example-network \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges 35.191.0.0/16,130.211.0.0/22 \
    --target-tags cluster-ntwk-tag \
    --rules tcp:60000

設定負載平衡器和容錯移轉群組

  1. 建立負載平衡器後端服務:

    $ gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme internal \
      --health-checks HEALTH_CHECK_NAME \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 1.0 \
      --region CLUSTER_REGION \
      --global-health-checks
  2. 將主要執行個體群組新增至後端服務:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group PRIMARY_IG_NAME \
      --instance-group-zone PRIMARY_ZONE \
      --region CLUSTER_REGION
  3. 將次要容錯移轉執行個體群組新增至後端服務:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group SECONDARY_IG_NAME \
      --instance-group-zone SECONDARY_ZONE \
      --failover \
      --region CLUSTER_REGION
  4. 建立轉送規則。針對 IP 位址,指定您為 VIP 預留的 IP 位址。如要從下方指定的區域外部存取 SAP MaxDB 系統,請在定義中加入 --allow-global-access 標記:

    $ gcloud compute forwarding-rules create RULE_NAME \
      --load-balancing-scheme internal \
      --address VIP_ADDRESS \
      --subnet CLUSTER_SUBNET \
      --region CLUSTER_REGION \
      --backend-service BACKEND_SERVICE_NAME \
      --ports ALL

    如要進一步瞭解如何跨區域存取 SAP MaxDB 高可用性系統,請參閱「內部 TCP/UDP 負載平衡」。

測試負載平衡器設定

即使後端執行個體群組要稍後才會註冊為健康狀態良好,您還是可以設定接聽器來回應健康狀態檢查,藉此測試負載平衡器設定。設定接聽器後,如果負載平衡器設定正確,後端執行個體群組的狀態會變更為「健康」。

以下各節將介紹幾種測試設定的方法。

使用 socat 公用程式測試負載平衡器

您可以使用 socat 公用程式,暫時監聽健康狀態檢查連接埠。

  1. 在這兩個主機 VM 上,安裝 socat 公用程式:

    $ sudo yum install -y socat

  2. 啟動 socat 程序,在健康狀態檢查通訊埠上監聽 60 秒:

    $ sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,fork

  3. 在 Cloud Shell 中,等待幾秒鐘,讓健康檢查偵測接聽器,然後檢查後端執行個體群組的健康狀態:

    $ gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region CLUSTER_REGION

    輸出結果應該會類似下列內容:

    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/maxdb-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/maxdb-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/maxdb-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/maxdb-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth

使用通訊埠 22 測試負載平衡器

如果主機 VM 上已開啟通訊埠 22 以供 SSH 連線,您可以暫時編輯健康狀態檢查程式,改用通訊埠 22,該通訊埠有接聽程式可回應健康狀態檢查程式。

如要暫時使用連接埠 22,請按照下列步驟操作:

  1. 在主控台中按一下健康狀態檢查:

    前往「健康狀態檢查」頁面

  2. 按一下 [編輯]

  3. 在「Port」(通訊埠) 欄位中,將通訊埠號碼變更為 22。

  4. 按一下「儲存」,然後稍等一兩分鐘。

  5. 在 Cloud Shell 中,檢查後端執行個體群組的健康狀態:

    $ gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region CLUSTER_REGION

    輸出結果應該會類似下列內容:

    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/maxdb-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/maxdb-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/maxdb-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/maxdb-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth
  6. 完成後,請將健康狀態檢查通訊埠編號改回原始通訊埠編號。

設定 Pacemaker

下列程序會在 Compute Engine VM 上,為 SAP MaxDB 設定 Red Hat 實作的 Pacemaker 叢集。

此程序以 Red Hat 說明文件為依據,用於設定高可用性叢集,包括:

在兩個節點上安裝叢集代理程式

請在兩個節點上完成下列步驟。

  1. 以根使用者身分安裝 Pacemaker 元件:

    # yum -y install pcs pacemaker fence-agents-gce resource-agents-gcp resource-agents-sap-hana
    # yum update -y

    如果您使用 Google 提供的 RHEL for SAP 映像檔,這些套件已安裝完畢,但可能需要更新。

  2. 設定 hacluster 使用者的密碼,該使用者會隨套件一併安裝:

    # passwd hacluster
  3. 在提示中指定 hacluster 的密碼。

  4. 在 Google Cloud提供的 RHEL 映像檔中,作業系統防火牆服務預設為啟用狀態。設定防火牆服務,允許高可用性流量:

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  5. 啟動 pcs 服務,並將其設為在開機時啟動:

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  6. 檢查 pcs 服務的狀態:

    # systemctl status pcsd.service

    輸出結果應該會類似下列內容:

    ● pcsd.service - PCS GUI and remote configuration interface
      Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled)
      Active: active (running) since Sat 2023-10-23 21:17:05 UTC; 25s ago
        Docs: man:pcsd(8)
              man:pcs(8)
    Main PID: 31627 (pcsd)
      CGroup: /system.slice/pcsd.service
              └─31627 /usr/bin/ruby /usr/lib/pcsd/pcsd
    Oct 23 21:17:03 maxdb-ha-vm-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Oct 23 21:17:05 maxdb-ha-vm-1 systemd[1]: Started PCS GUI and remote configuration interface.
  7. 確認兩個節點都已啟用並執行所有必要的高可用性服務。

    # systemctl enable pcsd.service pacemaker.service corosync.service
  8. /etc/hosts 檔案中,新增叢集中兩個主機的完整主機名稱和內部 IP 位址。例如:

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.0.0.40 maxdb-ha-vm-1.us-central1-a.c.example-project-123456.internal maxdb-ha-vm-1  # Added by Google
    10.0.0.41 maxdb-ha-vm-2.us-central1-c.c.example-project-123456.internal maxdb-ha-vm-2
    169.254.169.254 metadata.google.internal  # Added by Google

    如要進一步瞭解如何在 RHEL 叢集節點上設定 /etc/hosts 檔案,請參閱 Red Hat 的https://access.redhat.com/solutions/81123

建立叢集

  1. 在任一節點上以根身分授權 hacluster 使用者。按一下 RHEL 版本的標籤,即可查看指令:

    RHEL 8 以上版本

    # pcs host auth primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster auth primary-host-name secondary-host-name
  2. 按照提示輸入您為 hacluster 使用者設定的hacluster使用者名稱和密碼。

  3. 建立叢集:

    RHEL 8 以上版本

    # pcs cluster setup cluster-name primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster setup --name cluster-name primary-host-name secondary-host-name

編輯 corosync.conf 預設設定

在主要主機上編輯 /etc/corosync/corosync.conf 檔案,為測試 Google Cloud上高可用性叢集的容錯能力設定更合適的起點。

  1. 在任一主機上,使用偏好的文字編輯器開啟 /etc/corosync/corosync.conf 檔案進行編輯:

    # /etc/corosync/corosync.conf
  2. 如果 /etc/corosync/corosync.conf 是新檔案或空白檔案,您可以查看 /etc/corosync/ 目錄中的範例檔案,並將其做為 corosync 檔案的基礎。

  3. 在 corosync.conf 檔案的 totem 區段中,新增下列屬性,並使用建議值 (如 RHEL 版本所示):

    RHEL 8 以上版本

    • transport: knet
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    例如:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: knet
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...

    RHEL 7

    • transport: udpu
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    例如:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: udpu
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...
  4. 在包含已編輯 corosync.conf 檔案的主機上,跨叢集同步處理 corosync 設定:

    RHEL 8 以上版本

    # pcs cluster sync corosync

    RHEL 7

    # pcs cluster sync
  5. 設定叢集自動啟動:

    # pcs cluster enable --all
    # pcs cluster start --all
  6. 使用 corosync-cmapctl 公用程式,確認叢集已啟用新的 corosync 設定:

    # corosync-cmapctl

設定圍欄

Google Cloud 提供的 RHEL 映像檔包含 Google Cloud專屬的fence_gce 隔離代理程式。您可以使用 fence_gce 為每個主機 VM 建立隔離裝置。

為確保在防護動作後事件順序正確,請設定作業系統,在 VM 遭到防護後延遲重新啟動 Corosync。您也可以調整重新啟動的 Pacemaker 超時,以因應延遲。

如要查看 fence_gce 圍欄代理程式的所有可用選項,請發出 fence_gce -h

建立圍欄裝置資源

  1. 在主要主機上以超級使用者的身分執行下列操作:

    1. 為每個主機 VM 建立防護裝置:

      # pcs stonith create primary-fence-name fence_gce \
        port=primary-host-name \
        zone=primary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
      # pcs stonith create secondary-fence-name fence_gce \
        port=secondary-host-name \
        zone=secondary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
    2. 將每個柵欄裝置限制在其他主機 VM 上:

      # pcs constraint location primary-fence-name avoids primary-host-name
      # pcs constraint location secondary-fence-name avoids secondary-host-name
  2. 在主要主機上以超級使用者身分,測試次要柵欄裝置:

    1. 關閉次要主機 VM:

      # fence_gce -o off -n secondary-host-name --zone=secondary-host-zone

      如果指令執行成功,您會與次要主機 VM 中斷連線,且該 VM 會顯示為已停止,位於 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。你可能需要重新整理頁面。

    2. 重新啟動次要主機 VM:

      # fence_gce -o on -n secondary-host-name --zone=secondary-host-zone
  3. 在次要主機上以根身分,使用指令中的主要主機值重複上述步驟,測試主要防護裝置。

  4. 在任一主機上以根使用者身分檢查叢集狀態:

    # pcs status

    柵欄資源會顯示在叢集狀態的資源部分,如下列範例所示:

    [root@maxdb-ha-vm-2 ~]# pcs status
    Cluster name: maxdb-ha-cluster
    Stack: corosync
    Current DC: maxdb-ha-vm-1 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Mon Jun 15 17:19:07 2020
    Last change: Mon Jun 15 17:18:33 2020 by root via cibadmin on maxdb-ha-vm-1
    
    2 nodes configured
    2 resources configured
    
    Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
    Full list of resources:
    
     STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
     STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

設定延遲重新啟動 Corosync

  1. 在兩個主機上以根使用者身分建立 systemd 插入式檔案,延遲啟動 Corosync,確保遭隔離的 VM 重新啟動後,事件順序正確無誤:

    systemctl edit corosync.service
  2. 在檔案中新增下列幾行內容:

    [Service]
    ExecStartPre=/bin/sleep 60
  3. 儲存檔案並結束編輯器。

  4. 重新載入 systemd 管理工具設定。

    systemctl daemon-reload
  5. 確認是否已建立插入式檔案:

    service corosync status

    您應該會看到插入式檔案的行,如下列範例所示:

    ● corosync.service - Corosync Cluster Engine
       Loaded: loaded (/usr/lib/systemd/system/corosync.service; disabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/corosync.service.d
               └─override.conf
       Active: active (running) since Tue 2021-07-20 23:45:52 UTC; 2 days ago

安裝接聽器並建立健康狀態檢查資源

如要設定健康狀態檢查資源,請先安裝監聽器。

安裝監聽器

負載平衡器會使用每個主機健康狀態檢查通訊埠上的接聽器,判斷 MaxDB 執行個體的執行位置。

  1. 在兩個主機上以根身分安裝 TCP 監聽程式。這些操作說明會安裝 HAProxy 並將其做為接聽程式使用。

    # yum install haproxy
  2. 開啟設定檔 haproxy.cfg 進行編輯:

    # vi /etc/haproxy/haproxy.cfg
    1. haproxy.cfgdefaults 區段中,將 mode 變更為 tcplog

    2. defaults 區段後方,新增下列項目來建立新區段:

      #---------------------------------------------------------------------
      # Health check listener port for SAP MaxDB HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
        bind *:healthcheck-port-num

      繫結通訊埠與您建立健康狀態檢查時使用的通訊埠相同。

      完成後,更新內容應如下所示:

      #---------------------------------------------------------------------
      # common defaults that all the 'listen' and 'backend' sections will
      # use if not designated in their block
      #---------------------------------------------------------------------
      defaults
        mode                    tcp
        log                     global
        option                  tcplog
        option                  dontlognull
        option http-server-close
        # option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
      
      #---------------------------------------------------------------------
      # Set up health check listener for SAP MaxDB HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
       bind *:60000
  3. 在每個主機上以根身分啟動服務,確認設定正確無誤:

    # systemctl start haproxy.service
  4. 在 Google Cloud 控制台的「Load balancer」(負載平衡器) 頁面中,按一下負載平衡器項目:

    負載平衡頁面

    在「Load balancer details」(負載平衡器詳細資料) 頁面的「Backend」(後端) 區段中,如果 HAProxy 服務在兩個主機上都處於啟用狀態,您會在每個執行個體群組項目的「Healthy」(健康狀態良好) 資料欄中看到 1/1

  5. 在每個主機上停止 HAProxy 服務:

    # systemctl stop haproxy.service

    在每個主機上停止 HAProxy 服務後,每個執行個體群組的「健康狀態良好」欄會顯示 0/1

    稍後設定健康狀態檢查時,叢集會重新啟動有效節點上的接聽程式。

建立健康狀態檢查資源

  1. 在任一主機上以根身分,為 HAProxy 服務建立健康狀態檢查資源:

    # pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s —-group SAPMaxDB_Group
  2. 確認健康狀態檢查服務已在與 SAP MaxDB 執行個體相同的主機上啟用:

    # pcs status

    如果健康檢查資源與 MaxDB 不在同一主機上,請使用下列指令移動該資源:

    # pcs resource move healthcheck_resource_name target_host_name
    # pcs resource clear healthcheck_resource_name

    pcs resource clear 指令會將資源留在新位置,但會移除 pcs resource move 指令建立的不必要位置限制。

    在狀態中,資源部分應與下列範例類似:

    Full list of resources:
    
    STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
    STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Resource Group: SAPMaxDB_Group
      rsc_healthcheck_MDB    (service:haproxy):      Started maxdb-ha-vm-1

設定叢集預設值

設定遷移門檻和黏性,決定失敗前要嘗試的容錯移轉次數,並設定系統先嘗試在目前主機上重新啟動。您只需要在一個節點上設定此項目,即可套用至叢集。

  1. 在任一主機上以根使用者身分設定資源預設值:

    # pcs resource defaults resource-stickiness=1000
    # pcs resource defaults migration-threshold=5000

    resource-stickiness 屬性會控制服務在目前位置繼續執行的可能性。值越高,服務就越有可能繼續執行。1000 值表示服務非常黏著。

    migration-threshold 屬性會指定服務必須發生多少次故障,才會容錯移轉至其他主機。5000 的值夠高,可避免在存續時間較短的錯誤情況下進行容錯移轉。

    輸入 pcs resource defaults 即可查看資源預設值。

  2. 設定資源作業逾時預設值:

    # pcs resource op defaults timeout=600s

    輸入 pcs resource op defaults 即可查看資源作業預設值。

  3. 設定下列叢集屬性:

    # pcs property set stonith-enabled="true"
    # pcs property set stonith-timeout="300s"
    

    你可以使用 pcs property list 檢查資源設定。

在叢集中建立 MaxDB 資源

執行這些步驟前,請務必停止 MaxDB 和 x_server,並卸載 /sapdb 檔案系統。

建立 gcp-pd-move 資源

gcp-pd-move 資源是資源代理程式,用於在叢集容錯移轉期間,將永久磁碟從一個節點移至另一個節點。

  1. 在任一節點上以根層級執行下列指令,建立資源:

    # pcs resource create pd_move_resource_name gcp-pd-move \
      disk_name=regional_pd_name mode="READ_WRITE" disk_scope=regional \
      op monitor interval=10s timeout=15s \
      op start interval=0s timeout=300s \
      op stop interval=0s timeout=15s \
      --group SAPMaxDB_Group

建立 LVM 資源

磁碟移至其他節點後,系統會使用 LVM 啟用的資源代理程式啟動 LVM。

  1. 在任一節點上以根使用者身分執行下列指令,建立 LVM 資源:

    # pcs resource create lvm_resource_name LVM-activate \
      vgname=vgname_for_maxdb \
      vg_access_mode=system_id activation_mode=exclusive \
      --group SAPMaxDB_Group

    例如:

    # pcs resource create sapdb_lvm LVM-activate \
      vgname=sapdb vg_access_mode=system_id \
      activation_mode=exclusive \
      --group SAPMaxDB_Group

建立檔案系統資源

叢集會使用檔案系統資源卸載 /sapdb,並在容錯移轉作業期間將其掛接至另一個節點。

  1. 在任一節點上以根層級身分執行下列指令,建立檔案系統資源:

    # pcs resource create fs_resource_name Filesystem \
      device=filesystem directory=/sapdb fstype=fs_type \
      --group SAPMaxDB_Group

    例如:

    # pcs resource create sapdb_FS Filesystem \
      device=/dev/mapper/sapdb-sapdblv directory=/sapdb fstype=ext4 \
      --group SAPMaxDB_Group

準備 MaxDB 資源群組

如要啟用 MaxDB 資源群組,請按照下列步驟操作。

  1. 將您在 MaxDB 安裝節點上同步處理的使用者和群組,同步至其他節點。

    1. SAP MaxDB 使用者必須在節點之間同步,方法是複製 /etc/passwd 中的項目,例如:

       sdb:x:1002:1003:MaxDB User:/home/sdb:/bin/false
       madbadm:x:1003:1005:SAP System Administrator:/home/mdbadm:/bin/csh

    2. 同樣地,您也必須同步處理 SAP 群組,方法是將一個節點中的 /etc/group 項目複製到另一個節點,例如:

       dba:x:1003:mdbadm
       sapsys:x:1005:

  2. 同步處理儲存在作業系統目錄下的 MaxDB 特定檔案。以根使用者身分執行下列指令:

    # rsync -av /etc/services target_host:/etc/services
    # rsync -av /home/* target_host:/home
    # rsync -av --exclude=sapservices /usr/sap/* target_host:/usr/sap
    # rsync -av --ignore-existing /usr/sap/sapservicestarget_host:/usr/sap/sapservices
    # rsync -av /etc/init.d/sapinittarget_host:/etc/init.d/
    # MaxDB specific files
    # rsync -av /etc/opttarget_host:/etc
    # rsync -av /var/lib/sdbtarget_host:/var/lib
  3. 對於第二個節點上的 SAP OS 使用者,請重新命名下列環境檔案,以便在各自的主目錄中使用相應的主機名稱,例如:

    mv .sapenv_maxdb-ha-vm-1.sh .sapenv_maxdb-ha-vm-2.sh
    mv .sapenv_maxdb-ha-vm-1.csh .sapenv_maxdb-ha-vm-2.csh
    mv .sapsrc_maxdb-ha-vm-1.sh  .sapsrc_maxdb-ha-vm-2.sh
    mv .sapsrc_maxdb-ha-vm-1.csh  .sapsrc_maxdb-ha-vm-2.csh
    mv .dbenv_maxdb-ha-vm-1.sh .sapenv_maxdb-ha-vm-2.sh
    mv .dbenv_maxdb-ha-vm-1.csh .dbenv_maxdb-ha-vm-2.csh

SAPDatabase 資源代理程式不會使用任何資料庫專屬指令停止或啟動資料庫,而是依賴 saphostctrl 指令執行相同作業。SAP Host Agent 必須建立 xuser 項目,才能使用 saphostctrl 順利監控及控制 MAXDB。詳情請參閱 SAP Note 2435938 - SAP Host Agent SAP MaxDB: DBCredentials for DB connect

  1. 以根身分執行下列指令,在現用節點上 SetDatabaseProperty

    /usr/sap/hostctrl/exe/saphostctrl -host primary-host-name -user sapadm password \
      -dbname SID -dbtype ada -function SetDatabaseProperty DBCredentials=SET \
      -dboption User=SUPERDBA -dboption Password=password

    即使資料庫已停止,仍可使用下列指令測試項目,指令應可將狀態恢復原狀:

    /usr/sap/hostctrl/exe/saphostctrl -host secondary-host-name -dbname SID \
      -dbtype ada -function GetDatabaseStatus

saphostctrl 代理程式指令會使用 MaxDB 安裝中的 xuser 程式,因此如要準備第二個節點,請將 SAPMaxDB_group 移至 maxdb-node-b。

  1. 在任何節點上,以根身分執行下列指令:

    pcs resource move SAPMaxDB_group

請注意,四個建立的資源 (健康檢查、gcp-pd-move、LVM 和檔案系統) 現在已遷移,並在第二個節點上順利啟動。

  1. 您可以在任何節點上使用下列指令,監控執行的動作:

    watch pcs status

在第二個節點上成功啟動所有四項資源後,請執行 saphostctrl 指令。

  1. 以根使用者身分執行下列指令,在目前作用中的節點上設定 SetDatabaseProperty:

    /usr/sap/hostctrl/exe/saphostctrl -host secondary-host-name -user sapadm password \
      -dbname SID -dbtype ada -function SetDatabaseProperty DBCredentials=SET \
      -dboption User=SUPERDBA -dboption Password=password
  2. 在節點 b 上,手動啟動 MaxDB 和 x_server,檢查是否能正常啟動:

    # dbmcli -d SID -u control, and password db_online
    # x_server start
    

請繼續下一個步驟,為 SAP 資料庫建立資源。如果此時發現任何錯誤,請勿建立資料庫資源。

為 SAP MaxDB 建立資源

RHEL Pacemaker 會使用 SAP 資料庫資源代理程式監控及控制 SAP 資料庫。

  1. 在 SAPMaxDB_group 處於啟用狀態的節點上,使用下列指令建立資料庫資源:

    # pcs resource create SAPDatabase_resource_name SAPDatabase \
      DBTYPE="ADA" SID="SID" STRICT_MONITORING="TRUE" \
      MONITOR_SERVICES="Database|x_server" AUTOMATIC_RECOVER="TRUE"
      --group SAPMaxDB_Group

    您可以使用 pcs status 查看最終叢集資源,預期結果如下:

    # pcs status
      Cluster name: maxdb-cluster
      Stack: corosync
      Current DC: maxdb-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Wed Oct 23 02:04:32 2024
      Last change: Wed Oct 23 02:01:41 2024 by hacluster via crmd on maxdb-ha-vm-1
    
      2 nodes configured
      7 resource instances configured
    
      Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
      Full list of resources:
    
      STONITH-maxdb-ha-vm-1  (stonith:fence_gce):    Started maxdb-ha-vm-2
      STONITH-maxdb-ha-vm-2  (stonith:fence_gce):    Started maxdb-ha-vm-1
      Resource Group: SAPMaxDB_Group
         healthcheck_maxdb  (service:haproxy):      Started maxdb-ha-vm-1
         sapdb_regpd        (ocf::heartbeat:gcp-pd-move):   Started maxdb-ha-vm-1
         lvm_sapdb  (ocf::heartbeat:LVM-activate):  Started maxdb-ha-vm-1
         sapdb_fs   (ocf::heartbeat:Filesystem):    Started maxdb-ha-vm-1
         MDB_SAPMaxDB       (ocf::heartbeat:SAPDatabase):   Started maxdb-ha-vm-1
    
      Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

測試容錯移轉

模擬作用中主機發生故障,測試叢集。在發布系統供使用前,請先使用測試系統或在正式版系統上執行測試。

先備份系統再進行測試。

您可以透過多種方式模擬失敗,包括:

  • 手動停止 MaxDB 或 x_server
  • 終止 MaxDB 或 x_server 程序
  • reboot (在有效節點上)
  • ip link set eth0 down 適用於具有單一網路介面的執行個體
  • iptables ... DROP 適用於具有多個網路介面的執行個體
  • echo c > /proc/sysrq-trigger

這些操作說明會使用 ip link set eth0 downiptables,模擬叢集中兩個主機之間的網路中斷情形。在具有單一網路介面的執行個體上使用 ip link 指令,在具有一或多個網路介面的執行個體上使用 iptables 指令。這項測試會驗證容錯移轉和防護機制。如果執行個體定義了多個網路介面,您可以使用次要主機上的 iptables 指令,根據主要主機用於叢集通訊的 IP 捨棄傳入和傳出流量,藉此模擬主要主機的網路連線中斷。

  1. 在作用中主機上,以根使用者身分將網路介面設為離線:

    # ip link set eth0 down
  2. 使用 SSH 重新連線至任一主機,並切換到超級使用者。

  3. 輸入 pcs status,確認先前處於被動狀態的主機現在已附加區域性永久磁碟,並正在執行 MaxDB 服務。自動重新啟動功能會在叢集中啟用,因此已停止的主機會重新啟動,並假設為被動主機的角色。如以下範例所示:

    Cluster name: maxdb-ha-cluster
    Stack: corosync
    Current DC: maxdb-ha-vm-2 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
    Last updated: Wed Oct 23 02:01:45 2024
    Last change: Wed Oct 23 02:01:41 2024 by hacluster via crmdon maxdb-ha-vm-2
    
    2 nodes configured
    7 resources configured
    
    Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
    Full list of resources:
    
    STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
    STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Resource Group: SAPMaxDB_Group
     healthcheck_maxdb  (service:haproxy):      Started maxdb-ha-vm-2
     sapdb_regpd        (ocf::heartbeat:gcp-pd-move):   Started maxdb-ha-vm-2
     lvm_sapdb  (ocf::heartbeat:LVM-activate):  Started maxdb-ha-vm-2
     sapdb_fs   (ocf::heartbeat:Filesystem):    Started maxdb-ha-vm-2
     MDB_SAPMaxDB       (ocf::heartbeat:SAPDatabase):   Started maxdb-ha-vm-2
    
    Daemon Status:
     corosync: active/enabled
     pacemaker: active/enabled
     pcsd: active/enabled

疑難排解

如要排解 RHEL 上 SAP 系統高可用性設定的問題,請參閱「排解 SAP 高可用性設定的問題」。

取得 RHEL 上 SAP HANA 的支援

如需協助解決 RHEL 上 SAP HANA 高可用性叢集的問題,請收集必要的診斷資訊,然後與 Cloud Customer Care 團隊聯絡。詳情請參閱「RHEL 高可用性叢集診斷資訊」。