RHEL 上 SAP HANA 的 HA 向上擴充叢集設定指南

本指南說明如何在 Google Cloud上,為 SAP HANA 1.0 SPS 12 以上版本的擴充系統部署及設定 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 叢集。

本指南包含下列步驟:

本指南也包含設定 SAP HANA 系統複製功能的步驟,但請參閱 SAP 說明文件,取得明確的操作說明。

如要部署沒有 Linux 高可用性叢集或待命節點主機的 SAP HANA 系統,請改用 SAP HANA 部署指南

如要在 SUSE Linux Enterprise Server (SLES) 上為 SAP HANA 設定 HA 叢集,請參閱 SLES 上 SAP HANA 擴充 HA 叢集設定指南

本指南適用對象為進階 SAP HANA 使用者,其熟悉如何針對 SAP HANA 進行 Linux 高可用性設定。

本指南部署的系統

您將按照本指南的說明,部署兩個 SAP HANA 執行個體,並在 RHEL 上設定 HA 叢集。您可以在相同區域內的不同區域中,將每個 SAP HANA 執行個體部署在 Compute Engine VM 上。本指南不涵蓋 SAP NetWeaver 的高可用性安裝作業。

適用單一節點 SAP HANA 擴充系統的高可用性 Linux 叢集總覽

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

  • 兩個主機 VM,每個 VM 都有一個 SAP HANA 執行個體
  • 同步 SAP HANA 系統複製功能。
  • Pacemaker 高可用性叢集資源管理員。
  • STONITH 防護機制。
  • 自動將故障的執行個體重新啟動為新的次要執行個體。

本指南會說明如何使用 Google Cloud 提供的 Cloud Deployment Manager 範本,部署 Compute Engine 虛擬機器 (VM) 和 SAP HANA 執行個體,確保 VM 和基礎 SAP HANA 系統符合 SAP 支援需求,並遵循目前的最佳做法。

本指南會使用 SAP HANA Studio 測試 SAP HANA 系統複製功能。如有需要,您可以改用 SAP HANA 主控台。如要瞭解如何安裝 SAP HANA Studio,請參閱:

事前準備

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

建立網路

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

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

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

如要設定網路:

控制台

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

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

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

    名稱必須遵守命名慣例。虛擬私有雲網路會使用 Compute Engine 命名慣例。

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

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

    4. 按一下「完成」
  6. 如要新增其他子網路,請按一下「Add subnet」(新增子網路),然後重複上述步驟。建立網路後,您可以新增更多子網路。
  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以 CIDR 格式指定的 IP 位址範圍,例如 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 位址,請詢問貴公司的網路管理員。
  • SAP HANA 子網路中 VM 之間的通訊,包括 SAP HANA 擴充系統中節點之間的通訊,或 3 層架構中資料庫伺服器和應用程式伺服器之間的通訊。您可以建立防火牆規則,允許來自子網路的流量,藉此啟用 VM 之間的通訊。

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

主控台

  1. 在 Google Cloud 控制台中,前往「VPC network」(虛擬私有雲網路) 「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 位址連入的流量。請在「Source IP ranges」(來源 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 和 SAP HANA

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

如要定義及部署系統,請使用 SAP HANA 部署指南中用來部署 SAP HANA 系統的 Cloud Deployment Manager 範本。

不過,如果要部署兩個系統,而非一個,您必須複製並貼上第一個系統的定義,將第二個系統的定義新增至設定檔。建立第二個定義後,您需要變更第二個定義中的資源和執行個體名稱。如要防範可用區故障,請指定同區域中的其他可用區。這兩個定義中的所有其他屬性值都保持不變。

成功部署 SAP HANA 系統後,您就可以定義及設定 HA 叢集。

以下操作說明使用的是 Cloud Shell,不過這些步驟通常也適用於 Google Cloud CLI。

  1. 確認目前的永久磁碟和 CPU 等資源配額足夠您即將安裝的 SAP HANA 系統使用。如果配額不足則會部署失敗。如要瞭解 SAP HANA 配額需求,請參閱 SAP HANA 的定價與配額考量事項一文。

    前往「配額」頁面

  2. 開啟 Cloud Shell;如果您在本機工作站上安裝了 gcloud CLI,請開啟終端機。

    前往 Cloud Shell

  3. 在 Cloud Shell 或 gcloud CLI 中輸入以下指令,將 SAP HANA 高可用性叢集的 template.yaml 設定檔範本下載到您的工作目錄:

    wget https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/template.yaml
  4. 或者,您也可以重新命名 template.yaml 檔案,藉此識別該檔案定義的設定。

  5. 在 Cloud Shell 程式碼編輯器中開啟 template.yaml 檔案;如果您目前使用 gcloud CLI,請選擇您要用的文字編輯器。

    如要開啟 Cloud Shell 程式碼編輯器,請按一下 Cloud Shell 終端機視窗右上角的鉛筆圖示。

  6. template.yaml 檔案中,完成主要 SAP HANA 系統的定義。使用安裝作業的值取代括號及其內容,即可指定屬性值。屬性說明如下表所示。

    如果要在不安裝 SAP HANA 的情況下建立 VM 執行個體,請刪除以 sap_hana_ 開頭的所有資料行。

    屬性 資料類型 說明
    類型 字串

    指定在部署期間要使用的 Deployment Manager 範本位置、類型和版本。

    YAML 檔案包含兩個 type 規格,其中一個已註解掉。預設啟用的 type 規格會將範本版本指定為 latest。註解掉的 type 規格會指定具有時間戳記的特定範本版本。

    如果您需要所有部署都使用相同的範本版本,請使用包含時間戳記的 type 規格。

    instanceName 字串 目前定義的 VM 執行個體名稱。在主要和次要 VM 定義中指定不同的名稱。名稱只能以小寫英文字母、數字或連字號指定。
    instanceType 字串 您需要執行 SAP HANA 的 Compute Engine 虛擬機器類型。如果您需要自訂 VM 類型,請指定預先定義的 VM 類型,並將 vCPU 數量設為最接近您所需數量的數字,但仍要大於該數字。部署完成後,請修改 vCPU 數量和記憶體容量
    zone 字串 要部署您定義的 VM 執行個體的 Google Cloud 區域。為主要和次要 HANA 定義指定同一區域中的不同區域。這些區域必須位於您為子網路選取的地區內。
    subnetwork 字串 您在先前步驟中建立的子網路名稱。如果您要部署共用虛擬私人雲端,請將這個值指定為 [SHAREDVPC_PROJECT]/[SUBNETWORK]。例如:myproject/network1
    linuxImage 字串 要用於 SAP HANA 的 Linux 作業系統映像檔或映像檔系列的名稱。如要指定映像檔系列,請在系列名稱加上 family/ 前置字串。例如:family/rhel-7-6-sap-ha。如要指定特定映像檔,請只指定映像檔名稱。如需可用映像檔和系列的清單,請參閱 Google Cloud 主控台中的「映像檔」頁面。
    linuxImageProject 字串 您要使用的映像檔所在的 Google Cloud 專案。這個專案可能是您自有的專案或 Google Cloud 映像檔專案,例如 rhel-sap-cloud。如要進一步瞭解 Google Cloud 映像檔專案,請參閱 Compute Engine 說明文件中的「映像檔」頁面。
    sap_hana_deployment_bucket 字串 專案中 Google Cloud 儲存空間值區的名稱,其中包含您在上一個步驟中上傳的 SAP HANA 安裝檔案和修訂檔案。值區中的所有升級修訂檔案都會在部署期間中套用至 SAP HANA。
    sap_hana_sid 字串 SAP HANA 系統 ID (SID)。ID 必須包含 3 個英數字元,並以字母開頭。所有字母都必須大寫。
    sap_hana_instance_number 整數 SAP HANA 系統的執行個體編號,從 0 到 99。預設值為 0。
    sap_hana_sidadm_password 字串 作業系統 (OS) 管理員的密碼。密碼至少必須為 8 個字元,並包含至少 1 個大寫字母、1 個小寫字母與 1 個數字。
    sap_hana_system_password 字串 資料庫超級使用者的密碼。密碼至少必須為 8 個字元,並包含至少 1 個大寫字母、1 個小寫字母與 1 個數字。
    sap_hana_sidadm_uid 整數 SID_LCadm 使用者 ID 的預設值為 900,可避免使用者建立的群組與 SAP HANA 發生衝突。如有需要,您可以將這個值變更為其他值。
    sap_hana_sapsys_gid 整數 sapsys 的預設群組 ID 為 79。您可以指定上述值,將這個值覆寫為自己的需求。
    sap_hana_scaleout_nodes 整數 指定 0。這些操作說明僅適用於向上擴充 SAP HANA 系統。
    networkTag 字串 代表您 VM 執行個體的網路標記,供防火牆或轉送使用。如果您指定 publicIP: No 但未指定網路標記,請務必提供其他能存取網際網路的方式。
    nic_type 字串 選用,但如果目標機器和 OS 版本提供此選項,則建議使用。指定要與 VM 執行個體搭配使用的網路介面。您可以指定 GVNICVIRTIO_NET 值。如要使用 Google Virtual NIC (gVNIC),您必須指定支援 gVNIC 的 OS 映像檔,做為 linuxImage 屬性的值。如需作業系統映像檔清單,請參閱「作業系統詳細資料」。

    如果您未為此屬性指定值,系統會根據您為 instanceType 屬性指定的機器類型,自動選取網路介面。

    這個引數適用於 Deployment Manager 範本 202302060649 以上版本。
    publicIP 布林值 (非必要) 指定是否要將公開 IP 位址加到您的 VM 執行個體。預設為 Yes
    serviceAccount 字串 (非必要) 指定主機 VM 和主機 VM 上執行的程式要使用的服務帳戶。指定服務帳戶的電子郵件地址。例如 svc-acct-name@project-id.iam.gserviceaccount.com。根據預設,系統會使用 Compute Engine 預設服務帳戶。詳情請參閱「Google Cloud 中的 SAP 程式身分與存取權管理」。 Google Cloud
  7. 建立次要 SAP HANA 系統的定義,方法是複製主要 SAP HANA 系統的定義,然後將複本貼在主要 SAP HANA 系統定義後方。請參考以下步驟的範例。

  8. 在次要 SAP HANA 系統的定義中,為下列屬性指定與主要 SAP HANA 系統定義中不同的值:

    • name
    • instanceName
    • zone

  9. 建立執行個體:

    gcloud deployment-manager deployments create DEPLOYMENT_NAME --config TEMPLATE_NAME.yaml

    上述指令會叫用 Deployment Manager,依據 template.yaml 檔案中的規格部署 VM、從儲存空間值區下載 SAP HANA 軟體,並安裝 SAP HANA。

    部署處理程序分為兩個階段。在第一階段,Deployment Manager 會將其狀態寫入主控台。在第二階段,部署指令碼會將狀態寫入 Cloud Logging。

完整 template.yaml 設定檔範例

以下範例顯示已完成的 template.yaml 設定檔,該檔案會部署兩個 VM 執行個體,並安裝 SAP HANA 系統。

這個檔案包含兩個要部署的資源定義:sap_hana_primarysap_hana_secondary。每個資源定義都包含 VM 和 SAP HANA 執行個體的定義。

sap_hana_secondary 資源定義是透過複製及貼上第一個定義,然後修改 nameinstanceNamezone 屬性的值而建立。這兩個資源定義中的所有其他屬性值都相同。

屬性 networkTagserviceAccountsap_hana_sidadm_uidsap_hana_sapsys_gid 來自設定檔範本的「進階選項」部分。屬性 sap_hana_sidadm_uidsap_hana_sapsys_gid 會納入,以顯示其預設值,因為屬性已註解掉。

resources:
- name: sap_hana_primary
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/sap_hana.py
  #
  # By default, this configuration file uses the latest release of the deployment
  # scripts for SAP on Google Cloud.  To fix your deployments to a specific release
  # of the scripts, comment out the type property above and uncomment the type property below.
  #
  # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana/sap_hana.py
  #
  properties:
    instanceName: hana-ha-vm-1
    instanceType: n2-highmem-32
    zone: us-central1-a
    subnetwork: example-subnet-us-central1
    linuxImage: family/rhel-8-1-sap-ha
    linuxImageProject: rhel-sap-cloud
    sap_hana_deployment_bucket: hana2-sp4-rev46
    sap_hana_sid: HA1
    sap_hana_instance_number: 22
    sap_hana_sidadm_password: Tempa55word
    sap_hana_system_password: Tempa55word
    sap_hana_scaleout_nodes: 0
    networkTag: cluster-ntwk-tag
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
    # sap_hana_sidadm_uid: 900
    # sap_hana_sapsys_gid: 79

- name: sap_hana_secondary
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/sap_hana.py
  #
  # By default, this configuration file uses the latest release of the deployment
  # scripts for SAP on Google Cloud.  To fix your deployments to a specific release
  # of the scripts, comment out the type property above and uncomment the type property below.
  #
  # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana/sap_hana.py
  #
  properties:
    instanceName: hana-ha-vm-2
    instanceType: n2-highmem-32
    zone: us-central1-c
    subnetwork: example-subnet-us-central1
    linuxImage: family/rhel-8-1-sap-ha
    linuxImageProject: rhel-sap-cloud
    sap_hana_deployment_bucket: hana2-sp4-rev46
    sap_hana_sid: HA1
    sap_hana_instance_number: 22
    sap_hana_sidadm_password: Google123
    sap_hana_system_password: Google123
    sap_hana_scaleout_nodes: 0
    networkTag: cluster-ntwk-tag
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
    # sap_hana_sidadm_uid: 900
    # sap_hana_sapsys_gid: 79
    

建立防火牆規則,允許存取主機 VM

如果您尚未建立防火牆規則,請建立防火牆規則,允許從下列來源存取每個主機 VM:

  • 設定本機工作站、防禦主機或跳板伺服器
  • 叢集節點之間的存取權,以及 HA 叢集中的其他主機 VM

建立 VPC 防火牆規則時,您必須指定在 template.yaml 設定檔中定義的網路標記,將主機 VM 指定為規則的目標。

如要驗證部署作業,請定義規則,允許防禦主機或本機工作站透過通訊埠 22 建立 SSH 連線。

如要允許叢集節點之間的存取權,請新增防火牆規則,允許同一個子網路中其他 VM 的所有連接埠上的所有連線類型。

請務必先建立用於驗證部署作業和叢集內通訊的防火牆規則,再繼續閱讀下一節。如需操作說明,請參閱「新增防火牆規則」。

驗證 VM 和 SAP HANA 的部署作業

如要驗證部署作業,您可以檢查 Cloud Logging 中的部署記錄,並檢查主要與次要主機 VM 上的磁碟和服務。

  1. 在 Google Cloud 控制台中開啟 Cloud Logging,監控安裝進度及檢查錯誤。

    前往 Cloud Logging

  2. 篩選記錄:

    記錄檔探索工具

    1. 在「Logs Explorer」頁面中,前往「查詢」窗格。

    2. 在「Resource」下拉式選單中,選取「Global」,然後點選「Add」

      如果找不到「Global」選項,請在查詢編輯器中輸入以下查詢:

      resource.type="global"
      "Deployment"
      
    3. 點選「執行查詢」

    舊版記錄檢視器

    • 在「Legacy Logs Viewer」頁面中,從基本選取器選單中選取「Global」做為記錄資源。
  3. 分析篩選過的記錄:

    • 如果顯示 "--- Finished",表示部署程序已完成,您可以繼續進行下一個步驟。
    • 如果畫面顯示配額錯誤:

      1. 在 IAM 和管理員「Quotas」(配額) 頁面上,增加 SAP HANA 規劃指南中所列出不符 SAP HANA 規定的任何配額。

      2. 在 Deployment Manager「Deployments」(部署) 頁面上,刪除部署以清除安裝失敗的 VM 與永久磁碟。

      3. 重新執行部署。

檢查 VM 和 SAP HANA 的設定

  1. SAP HANA 系統部署後如沒有任何錯誤,請使用 SSH 連線到 VM。您可以從 Compute Engine 的「VM instances」(VM 執行個體) 頁面按一下 VM 執行個體的 SSH 按鈕,或者使用您偏好的 SSH 方法。

    Compute Engine VM 執行個體頁面中的 [SSH] 按鈕。

  2. 變更為超級使用者:

    $ sudo su -
  3. 在命令提示字元中輸入 df -h。請確認每個 VM 都顯示 /hana 目錄,例如 /hana/data

    Filesystem                        Size  Used Avail Use% Mounted on
    /dev/sda2                          30G  4.0G   26G  14% /
    devtmpfs                          126G     0  126G   0% /dev
    tmpfs                             126G     0  126G   0% /dev/shm
    tmpfs                             126G   17M  126G   1% /run
    tmpfs                             126G     0  126G   0% /sys/fs/cgroup
    /dev/sda1                         200M  9.7M  191M   5% /boot/efi
    /dev/mapper/vg_hana-shared        251G   49G  203G  20% /hana/shared
    /dev/mapper/vg_hana-sap            32G  240M   32G   1% /usr/sap
    /dev/mapper/vg_hana-data          426G  7.0G  419G   2% /hana/data
    /dev/mapper/vg_hana-log           125G  4.2G  121G   4% /hana/log
    /dev/mapper/vg_hanabackup-backup  512G   33M  512G   1% /hanabackup
    tmpfs                              26G     0   26G   0% /run/user/900
    tmpfs                              26G     0   26G   0% /run/user/899
    tmpfs                              26G     0   26G   0% /run/user/1000
  4. 將以下指令中的 SID_LC 替換為您在設定檔範本中指定的系統 ID,以變更 SAP 管理員使用者。請使用小寫字母。

    # su - SID_LCadm
  5. 輸入下列指令,確定 hdbnameserverhdbindexserver 和其他 SAP HANA 服務都在執行個體上執行:

    > HDB info
  6. 如果您使用的是 RHEL for SAP 9.0 以上版本,請務必在 VM 執行個體上安裝 chkconfigcompat-openssl11 套件。

    如需 SAP 的更多資訊,請參閱 SAP 附註 3108316 - Red Hat Enterprise Linux 9.x:安裝和設定

驗證 Google Cloud的 Agent for SAP 安裝狀態

部署 VM 並安裝 SAP 系統後,請確認Google Cloud的 SAP 代理程式是否正常運作。

確認 Google Cloud的 Agent for SAP 是否正在執行

如要確認代理程式是否正在執行,請按照下列步驟操作:

  1. 建立與 Compute Engine 執行個體的 SSH 連線。

  2. 執行下列指令:

    systemctl status google-cloud-sap-agent

    如果代理程式運作正常,輸出內容就會包含 active (running)。例如:

    google-cloud-sap-agent.service - Google Cloud Agent for SAP
    Loaded: loaded (/usr/lib/systemd/system/google-cloud-sap-agent.service; enabled; vendor preset: disabled)
    Active:  active (running)  since Fri 2022-12-02 07:21:42 UTC; 4 days ago
    Main PID: 1337673 (google-cloud-sa)
    Tasks: 9 (limit: 100427)
    Memory: 22.4 M (max: 1.0G limit: 1.0G)
    CGroup: /system.slice/google-cloud-sap-agent.service
           └─1337673 /usr/bin/google-cloud-sap-agent
    

如果代理程式未執行,請重新啟動代理程式

確認 SAP Host Agent 正在接收指標

如要確認Google Cloud的 Agent for SAP 是否收集基礎架構指標,並正確傳送至 SAP Host Agent,請按照下列步驟操作:

  1. 在 SAP 系統中輸入交易 ST06
  2. 在「Overview」(總覽) 窗格中,查看以下欄位的可用性和內容,確認 SAP 和 Google 監控基礎架構已做好正確的端對端設定:

    • 雲端服務供應商Google Cloud Platform
    • Enhanced Monitoring Access (強化版監控功能存取權)TRUE
    • Enhanced Monitoring Details (強化版監控功能詳細資料)ACTIVE

設定 SAP HANA 監控

您也可以使用Google Cloud的 SAP 代理程式監控 SAP HANA 執行個體。自 2.0 版起,您可以設定代理程式收集 SAP HANA 監控指標,然後將指標傳送至 Cloud Monitoring。Cloud Monitoring 可讓您建立資訊主頁,以圖表呈現這些指標,並依據指標門檻設定快訊等。

如要進一步瞭解如何使用Google Cloud的 SAP 代理程式收集 SAP HANA 監控指標,請參閱「SAP HANA 監控指標收集」一文。

啟用 SAP HANA 快速重新啟動功能

Google Cloud 強烈建議您為每個 SAP HANA 執行個體啟用 SAP HANA 快速重新啟動功能,尤其是較大的執行個體。如果 SAP HANA 終止,但作業系統仍在執行,SAP HANA 快速重新啟動功能可縮短重新啟動時間。

根據 Google Cloud 提供的自動化指令碼設定,作業系統和核心設定已支援 SAP HANA 快速重新啟動。您需要定義 tmpfs 檔案系統,並設定 SAP HANA。

如要定義 tmpfs 檔案系統並設定 SAP HANA,您可以按照手動步驟操作,也可以使用Google Cloud 提供的自動化指令碼啟用 SAP HANA 快速重新啟動功能。詳情請參閱:

如需 SAP HANA 快速重新啟動功能的完整操作說明,請參閱 SAP HANA 快速重新啟動選項說明文件

手動步驟

設定 tmpfs 檔案系統

主機 VM 和基礎 SAP HANA 系統成功部署後,您需要在 tmpfs 檔案系統中為 NUMA 節點建立及掛載目錄。

顯示 VM 的 NUMA 拓撲

您必須先瞭解 VM 有多少個 NUMA 節點,才能對應必要的 tmpfs 檔案系統。如要顯示 Compute Engine VM 上的可用 NUMA 節點,請輸入下列指令:

lscpu | grep NUMA

舉例來說,m2-ultramem-208 VM 類型有四個 NUMA 節點,編號為 0 到 3,如以下範例所示:

NUMA node(s):        4
NUMA node0 CPU(s):   0-25,104-129
NUMA node1 CPU(s):   26-51,130-155
NUMA node2 CPU(s):   52-77,156-181
NUMA node3 CPU(s):   78-103,182-207
建立 NUMA 節點目錄

為 VM 中的每個 NUMA 節點建立目錄,並設定權限。

舉例來說,如果有四個 NUMA 節點,編號為 0 到 3:

mkdir -pv /hana/tmpfs{0..3}/SID
chown -R SID_LCadm:sapsys /hana/tmpfs*/SID
chmod 777 -R /hana/tmpfs*/SID
將 NUMA 節點目錄掛接至 tmpfs

掛接 tmpfs 檔案系統目錄,並使用 mpol=prefer 為每個目錄指定 NUMA 節點偏好設定:

SID 請使用大寫英文字母指定 SID。

mount tmpfsSID0 -t tmpfs -o mpol=prefer:0 /hana/tmpfs0/SID
mount tmpfsSID1 -t tmpfs -o mpol=prefer:1 /hana/tmpfs1/SID
mount tmpfsSID2 -t tmpfs -o mpol=prefer:2 /hana/tmpfs2/SID
mount tmpfsSID3 -t tmpfs -o mpol=prefer:3 /hana/tmpfs3/SID
更新「/etc/fstab

為確保掛接點在作業系統重新啟動後可供使用,請在檔案系統表格 /etc/fstab 中新增項目:

tmpfsSID0 /hana/tmpfs0/SID tmpfs rw,nofail,relatime,mpol=prefer:0
tmpfsSID1 /hana/tmpfs1/SID tmpfs rw,nofail,relatime,mpol=prefer:1
tmpfsSID1 /hana/tmpfs2/SID tmpfs rw,nofail,relatime,mpol=prefer:2
tmpfsSID1 /hana/tmpfs3/SID tmpfs rw,nofail,relatime,mpol=prefer:3

選用:設定記憶體用量限制

tmpfs 檔案系統可動態擴充及縮減。

如要限制 tmpfs 檔案系統使用的記憶體,您可以使用 size 選項為 NUMA 節點磁碟機容納的大小設定限制。例如:

mount tmpfsSID0 -t tmpfs -o mpol=prefer:0,size=250G /hana/tmpfs0/SID

您也可以在 global.ini 檔案的 [memorymanager] 區段中設定 persistent_memory_global_allocation_limit 參數,為特定 SAP HANA 例項和特定伺服器節點的所有 NUMA 節點限制整體 tmpfs 記憶體用量。

快速重新啟動的 SAP HANA 設定

如要設定 SAP HANA 以便快速重新啟動,請更新 global.ini 檔案,並指定要儲存在永久性記憶體中的資料表。

更新 global.ini 檔案中的 [persistence] 區段

設定 SAP HANA global.ini 檔案中的 [persistence] 區段,以參照 tmpfs 位置。請使用半形分號分隔每個 tmpfs 位置:

[persistence]
basepath_datavolumes = /hana/data
basepath_logvolumes = /hana/log
basepath_persistent_memory_volumes = /hana/tmpfs0/SID;/hana/tmpfs1/SID;/hana/tmpfs2/SID;/hana/tmpfs3/SID

上述範例為四個 NUMA 節點指定四個記憶體磁碟區,對應至 m2-ultramem-208。如果您在 m2-ultramem-416 上執行,則需要設定八個記憶體磁區 (0..7)。

修改 global.ini 檔案後,請重新啟動 SAP HANA。

SAP HANA 現在可以使用 tmpfs 位置做為永久記憶體空間。

指定要儲存在永久性記憶體中的資料表

指定要儲存在永久性記憶體中的特定資料欄資料表或分區。

舉例來說,如要為現有資料表開啟持久性記憶體,請執行 SQL 查詢:

ALTER TABLE exampletable persistent memory ON immediate CASCADE

如要變更新資料表的預設值,請在 indexserver.ini 檔案中新增 table_default 參數。例如:

[persistent_memory]
table_default = ON

如要進一步瞭解如何控制資料欄、資料表,以及哪些監控檢視畫面可提供詳細資訊,請參閱「SAP HANA 永久記憶體」。

自動化步驟

Google Cloud 提供的自動化指令碼可啟用 SAP HANA 快速重新啟動功能,並修改目錄 /hana/tmpfs*、檔案 /etc/fstab 和 SAP HANA 設定。執行指令碼時,您可能需要執行額外步驟,具體取決於這是 SAP HANA 系統的初始部署作業,還是將機器大小調整為不同的 NUMA 大小。

如要初始部署 SAP HANA 系統,或調整機器大小以增加 NUMA 節點數量,請務必在執行 Google Cloud提供的自動化指令碼時,讓 SAP HANA 執行,以便啟用 SAP HANA 快速重新啟動功能。

當您調整機器大小以減少 NUMA 節點數時,請務必在執行 Google Cloud 提供的自動化指令碼時,停止 SAP HANA,以便啟用 SAP HANA 快速重新啟動功能。執行指令碼後,您必須手動更新 SAP HANA 設定,才能完成 SAP HANA 快速重新啟動設定。詳情請參閱「SAP HANA 快速重新啟動設定」。

如要啟用 SAP HANA 快速重新啟動功能,請按照下列步驟操作:

  1. 與主機 VM 建立 SSH 連線。

  2. 切換至根目錄:

    sudo su -

  3. 下載 sap_lib_hdbfr.sh 指令碼:

    wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/lib/sap_lib_hdbfr.sh
  4. 將檔案設為可執行檔:

    chmod +x sap_lib_hdbfr.sh
  5. 確認指令碼沒有錯誤:

    vi sap_lib_hdbfr.sh
    ./sap_lib_hdbfr.sh -help

    如果指令傳回錯誤,請與 Cloud Customer Care 團隊聯絡。如要進一步瞭解如何與客戶服務團隊聯絡,請參閱「取得 SAP 支援 Google Cloud」一文。

  6. 請先為 SAP HANA 資料庫的系統使用者,替換 SAP HANA 系統 ID (SID) 和密碼,再執行指令碼。為確保密碼安全,建議您在 Secret Manager 中使用密鑰。

    使用 Secret Manager 中的密鑰名稱執行指令碼。這個機密金鑰必須存在於包含主機 VM 執行個體的 Google Cloud 專案中。

    sudo ./sap_lib_hdbfr.sh -h 'SID' -s SECRET_NAME 

    更改下列內容:

    • SID:請使用大寫字母指定 SID。例如:AHA
    • SECRET_NAME:指定與 SAP HANA 資料庫系統使用者密碼相對應的機密金鑰名稱。這個祕密值必須存在於 Google Cloud 專案中,且該專案包含主機 VM 執行個體。

    或者,您也可以使用純文字密碼執行指令碼。啟用 SAP HANA 快速重新啟動功能後,請務必變更密碼。我們不建議使用純文字密碼,因為密碼會記錄在 VM 的指令列記錄中。

    sudo ./sap_lib_hdbfr.sh -h 'SID' -p 'PASSWORD'

    更改下列內容:

    • SID:請使用大寫字母指定 SID。例如:AHA
    • PASSWORD:指定 SAP HANA 資料庫系統使用者的密碼。

如果初次執行成功,您應該會看到類似以下的輸出內容:

INFO - Script is running in standalone mode
ls: cannot access '/hana/tmpfs*': No such file or directory
INFO - Setting up HANA Fast Restart for system 'TST/00'.
INFO - Number of NUMA nodes is 2
INFO - Number of directories /hana/tmpfs* is 0
INFO - HANA version 2.57
INFO - No directories /hana/tmpfs* exist. Assuming initial setup.
INFO - Creating 2 directories /hana/tmpfs* and mounting them
INFO - Adding /hana/tmpfs* entries to /etc/fstab. Copy is in /etc/fstab.20220625_030839
INFO - Updating the HANA configuration.
INFO - Running command: select * from dummy
DUMMY
"X"
1 row selected (overall time 4124 usec; server time 130 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') SET ('persistence', 'basepath_persistent_memory_volumes') = '/hana/tmpfs0/TST;/hana/tmpfs1/TST;'
0 rows affected (overall time 3570 usec; server time 2239 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') SET ('persistent_memory', 'table_unload_action') = 'retain';
0 rows affected (overall time 4308 usec; server time 2441 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') SET ('persistent_memory', 'table_default') = 'ON';
0 rows affected (overall time 3422 usec; server time 2152 usec)

選用:在主要和次要 VM 上設定 SSH 金鑰

您必須在 HA 叢集中的主機之間同步 SAP HANA 安全儲存庫 (SSFS) 金鑰。為了簡化同步作業,並允許在 HA 叢集中的主機之間複製備份等檔案,這些操作說明會授權兩個主機之間的直接 SSH 連線。

貴機構可能會制定內部網路通訊規範。如有需要,您可以在部署完成後,從 VM 中移除中繼資料,並從 authorized_keys 目錄中移除金鑰。

如果設定直接 SSH 連線不符合貴機構的規範,您可以使用其他方法來同步處理 SSFS 金鑰和傳輸檔案,例如:

如要啟用主要和次要執行個體之間的 SSH 連線,請按照下列步驟操作。

  1. 在主要主機 VM 上:

    1. 透過 SSH 連線至 VM。

    2. 為需要主機對主機 SSH 連線的使用者產生安全殼層金鑰。使用者通常是您自己。

      $ ssh-keygen
    3. 在系統提示時,按下 Enter 鍵接受預設值。

    4. 更新主要 VM 的中繼資料,加入次要 VM 的安全殼層金鑰資訊。

      $ gcloud compute instances add-metadata secondary-host-name \
           --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \
           --zone secondary-zone
    5. 授權主要 VM 對自身進行存取

      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  2. 在次要主機 VM 上:

    1. 透過 SSH 連線至 VM。

    2. 為需要主機對主機 SSH 連線的使用者產生 SSH 金鑰。

      $ ssh-keygen
    3. 更新次要 VM 的中繼資料,加入主要 VM 的 SSH 金鑰資訊。

      $ gcloud compute instances add-metadata primary-host-name \
            --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \
            --zone primary-zone
    4. 將次要 VM 授權給自身

      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    5. 開啟從次要系統到主要系統的 SSH 連線,確認 SSH 金鑰是否已正確設定。

      $ ssh primary-host-name
  3. 在主要主機 VM 上,開啟與次要主機 VM 的 SSH 連線,確認連線:

    $ ssh secondary-host-name

備份資料庫

建立資料庫備份,以便啟動 SAP HANA 系統複製的資料庫記錄,並建立復原點。

如果 MDC 設定中有多個租戶資料庫,請備份每個租戶資料庫。

Deployment Manager 範本會使用 /hanabackup/data/SID 做為預設備份目錄。

如要為新的 SAP HANA 資料庫建立備份,請按照下列步驟操作:

  1. 在主要主機上,切換至 SID_LCadm。指令可能會因 OS 映像檔而異。

    sudo -i -u SID_LCadm
  2. 建立資料庫備份:

    • 針對 SAP HANA 單一資料庫容器系統:

      > hdbsql -t -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"

      以下範例顯示新 SAP HANA 系統的成功回應:

      0 rows affected (overall time 18.416058 sec; server time 18.414209 sec)
    • 針對 SAP HANA 多資料庫容器系統 (MDC),請為系統資料庫和任何租用戶資料庫建立備份:

      > hdbsql -t -d SYSTEMDB -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"
      > hdbsql -t -d SID -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"

    以下範例顯示新 SAP HANA 系統的成功回應:

    0 rows affected (overall time 16.590498 sec; server time 16.588806 sec)
  3. 確認記錄模式已設為正常:

    > hdbsql -u system -p SYSTEM_PASSWORD -i INST_NUM \
      "select value from "SYS"."M_INIFILE_CONTENTS" where key='log_mode'"

    畫面上會顯示下列訊息:

    VALUE
    "normal"

啟用 SAP HANA 系統複製

啟用 SAP HANA 系統複製功能時,您必須將檔案系統 (SSFS) 上 SAP HANA 安全儲存庫的資料和金鑰檔案,從主要主機複製到次要主機。這個程序用來複製檔案的方法只是其中一種可能的方法。

  1. 在主要主機上以 SID_LCadm 身分啟用系統複製:

    > hdbnsutil -sr_enable --name=primary-host-name
  2. 在次要主機上以 SID_LCadm 的身份停止 SAP HANA:

    > HDB stop
  3. 在主要主機上,使用您在主機 VM 之間設定 SSH 時使用的相同使用者帳戶,將金鑰檔案複製到次要主機。為了方便起見,下列指令也會為您的使用者帳戶 ID 定義環境變數:

    $ sudo cp /usr/sap/SID/SYS/global/security/rsecssfs ~/rsecssfs -r
    $ myid=$(whoami)
    $ sudo chown ${myid} -R /home/"${myid}"/rsecssfs
    $ scp -r rsecssfs $(whoami)@secondary-host-name:rsecssfs
    $ rm -r /home/"${myid}"/rsecssfs
    
  4. 在次要主機上,以與上一個步驟相同的使用者身分:

    1. 將 rsecssfs 目錄中的現有金鑰檔案,替換為主要主機的檔案,並設定檔案權限以限制存取權:

      $ SAPSID=SID
      $ sudo rm /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo rm /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ myid=$(whoami)
      $ sudo cp /home/"${myid}"/rsecssfs/data/SSFS_"${SAPSID}".DAT \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo cp /home/"${myid}"/rsecssfs/key/SSFS_"${SAPSID}".KEY \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ sudo chown "${SAPSID,,}"adm:sapsys \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo chown "${SAPSID,,}"adm:sapsys \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ sudo chmod 644 \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo chmod 640 \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
    2. 清理主目錄中的檔案。

      $ rm -r /home/"${myid}"/rsecssfs
    3. SID_LCadm 身分,將次要 SAP HANA 系統註冊至 SAP HANA 系統複製:

      > hdbnsutil -sr_register --remoteHost=primary-host-name --remoteInstance=inst_num \
      --replicationMode=syncmem --operationMode=logreplay --name=secondary-host-name
    4. SID_LCadm 身分啟動 SAP HANA:

      > HDB start

驗證系統複製作業

在主要主機上以 SID_LCadm 的身份執行下列 Python 指令碼,確認 SAP HANA 系統複製功能是否處於啟用狀態:

$ python $DIR_INSTANCE/exe/python_support/systemReplicationStatus.py

如果複製作業設定正確,系統會在其他指標中,為 xsenginenameserverindexserver 服務顯示下列值:

  • Secondary Active StatusYES
  • Replication StatusACTIVE

此外,overall system replication status 會顯示 ACTIVE

設定 Cloud Load Balancing 容錯移轉支援功能

內部直通式網路負載平衡器服務提供容錯支援,可根據健康檢查服務將流量轉送至 SAP HANA 叢集中的有效主機。

為虛擬 IP 保留 IP 位址

虛擬 IP (VIP) 位址有時也稱為浮動 IP 位址,會追隨啟用的 SAP HANA 系統。負載平衡器會將傳送至 VIP 的流量,路由至目前代管啟用中 SAP HANA 系統的 VM。

  1. 開啟 Cloud Shell:

    前往 Cloud Shell

  2. 為虛擬 IP 保留 IP 位址。這是應用程式用來存取 SAP HANA 的 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: '2020-05-20T14:19:03.109-07:00'
    description: ''
    id: '8961491304398200872'
    kind: compute#address
    name: vip-for-hana-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-hana-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
    hana-ha-ig-1  us-central1-a  example-network  example-project-123456 No       1
    hana-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: '2020-05-20T21:03:06.924-07:00'
    healthyThreshold: 2
    id: '4963070308818371477'
    kind: compute#healthCheck
    name: hana-health-check
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/hana-health-check
    tcpHealthCheck:
     port: 60000
     portSpecification: USE_FIXED_PORT
     proxyHeader: NONE
    timeoutSec: 10
    type: TCP
    unhealthyThreshold: 2

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

為私人範圍中的通訊埠定義防火牆規則,允許 Compute Engine 健康檢查 35.191.0.0/16130.211.0.0/22 使用的 IP 範圍存取主機 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 HANA 系統,請在定義中加入標記 --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 HANA 高可用性系統,請參閱「內部 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/hana-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-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/hana-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth

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

如果主機 VM 上的 SSH 連線已開啟通訊埠 22,您可以暫時編輯健康檢查器,讓它使用通訊埠 22,這個通訊埠有可回應健康檢查器的監聽器。

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

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

    前往「Health checks」(健康狀態檢查) 頁面

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

設定 Pacemaker

以下程序會在 SAP HANA 適用的 Compute Engine VM 上,設定 Red Hat 實作 Pacemaker 叢集。

此程序是根據 Red Hat 說明文件設定高可用性叢集,包括 (需要 Red Hat 訂閱):

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

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

  1. 以 root 身分安裝 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 2020-06-13 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
    Jun 13 21:17:03 hana-ha-vm-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Jun 13 21:17:05 hana-ha-vm-1 systemd[1]: Started PCS GUI and remote configuration interface.
  7. /etc/hosts 檔案中,新增叢集中兩部主機的完整主機名稱和內部 IP 位址。例如:

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

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

建立叢集

  1. 以任一節點的 root 身分,授權 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. 設定叢集自動啟動:

    1. # pcs cluster enable --all
    2. # 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」 頁面上顯示為已停止。你可能需要重新整理頁面。

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

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

  4. 以 root 身分在任一主機上檢查叢集狀態:

    # pcs status

    圍欄資源會顯示在叢集狀態的資源部分,類似以下範例:

    [root@hana-ha-vm-2 ~]# pcs status
    Cluster name: hana-ha-cluster
    Stack: corosync
    Current DC: hana-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 hana-ha-vm-1
    
    2 nodes configured
    2 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
    
     STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
     STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-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

啟用 SAP HANA HA/DR 供應器掛鉤

Red Hat 建議您啟用 SAP HANA HA/DR 供應器掛鉤,讓 SAP HANA 針對特定事件傳送通知,並改善失敗偵測功能。SAP HANA HA/DR 供應器鉤子需要 SAP HANA 2.0 SPS 03 以上版本。

在主要和次要網站上完成下列步驟:

  1. SID_LCadm 身分停止 SAP HANA:

    > HDB stop

  1. 以 root 或 SID_LCadm 身分開啟 global.ini 檔案進行編輯:

    > vi /hana/shared/SID/global/hdb/custom/config/global.ini
  2. 請在 global.ini 檔案中加入下列定義:

    [ha_dr_provider_SAPHanaSR]
    provider = SAPHanaSR
    path = /usr/share/SAPHanaSR/srHook
    execution_order = 1
    
    
    [ha_dr_provider_chksrv]
    provider = ChkSrv
    path = /usr/share/SAPHanaSR/srHook
    execution_order = 2
    action_on_lost = stop
    
    [trace]
    ha_dr_saphanasr = info
    ha_dr_chksrv = info

  3. 以 root 身分執行下列指令,在 /etc/sudoers.d 目錄中建立自訂設定檔。這個新的設定檔可讓 SID_LCadm 使用者在呼叫 srConnectionChanged() 鉤子方法時存取叢集節點屬性。

    > visudo -f /etc/sudoers.d/20-saphana
  4. /etc/sudoers.d/20-saphana 檔案中,新增下列文字:

    替換下列內容:
    • SITE_A:主要 SAP HANA 伺服器的網站名稱
    • SITE_B:次要 SAP HANA 伺服器的網站名稱
    • SID_LC:請使用小寫字母指定 SID
    如要查看站點名稱,您可以以超級使用者的身分,在 SAP HANA 主要伺服器或次要伺服器上執行 crm_mon -A1 | grep site 指令。
    Cmnd_Alias SITEA_SOK = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_A -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEA_SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_A -v SFAIL -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEB_SOK = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_B -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEB_SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_B -v SFAIL -t crm_config -s SAPHanaSR
    SID_LCadm ALL=(ALL) NOPASSWD: SITEA_SOK, SITEA_SFAIL, SITEB_SOK, SITEB_SFAIL
    Defaults!SITEA_SOK, SITEA_SFAIL, SITEB_SOK, SITEB_SFAIL !requiretty

  5. 請確認 /etc/sudoers 檔案包含下列文字:

    #includedir /etc/sudoers.d

    請注意,這段文字中的 # 是語法的一環,並不表示該行是註解。

  6. SID_LCadm 身分啟動 SAP HANA:

    > HDB start

  7. 在主要主機上以 SID_LCadm 的身份,測試鉤子指令碼回報的狀態:

    > cdtrace
    > awk '/ha_dr_SAPHanaSR.*crm_attribute/ { printf "%s %s %s %s\n",$2,$3,$5,$16 }' nameserver_*

設定叢集預設值

設定遷移門檻和黏性,以決定在發生失敗前要嘗試的備援次數,並將系統設為先嘗試在目前主機上重新啟動。只要在一個節點上設定這項值,即可套用至叢集。

  1. 以兩個主機的 root 身分啟動叢集:

    # pcs cluster start --all #start the cluster
  2. 設定資源預設值:

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

    屬性 resource-stickiness 可控制服務在原處運作的可能性。值越高,服務就越容易保持運作。如果值為 1000,表示服務非常黏滯。

    屬性 migration-threshold 會指定服務必須發生多少次失敗,才會轉移至其他主機。值為 5000 的情況下,可避免在較短時間內發生錯誤時發生備援。

    您可以輸入 pcs resource defaults 來查看資源預設值。

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

    # pcs resource op defaults timeout=600s

    您可以輸入 pcs resource op defaults 來查看資源操作預設值。

  4. 設定下列叢集屬性:

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

    您可以使用 pcs property list 查看資源設定。

建立 SAPHanaTopology 資源

SAPHanaTopology 資源會取得節點上的 HANA 系統複製功能狀態和設定。並檢查 SAP 主機代理程式。

  1. 在任一主機上以超級使用者的身分,建立 SAPHanaTopology 資源:

    # pcs resource create topology_resource_name SAPHanaTopology SID=SID \
       InstanceNumber=inst_num \
       op start timeout=600 \
       op stop timeout=300 \
       op monitor interval=10 timeout=600 \
       clone clone-max=2 clone-node-max=1 interleave=true
  2. 建立資源後,請檢查設定。將 -clone 附加至資源名稱,即可在回應中加入複本集合資訊:

    RHEL 8 和後續版本

    # pcs resource config topology_resource_name-clone

    RHEL 7

    # pcs resource show topology_resource_name-clone

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

    Clone: SAPHanaTopology_HA1_22-clone
    Meta Attrs: clone-max=2 clone-node-max=1 interleave=true
    Resource: SAPHanaTopology_HA1_22 (class=ocf provider=heartbeat type=SAPHanaTopology)
     Attributes: InstanceNumber=22 SID=HA1
     Operations: methods interval=0s timeout=5 (SAPHanaTopology_HA1_22-methods-interval-0s)
                 monitor interval=10 timeout=600 (SAPHanaTopology_HA1_22-monitor-interval-10)
                 reload interval=0s timeout=5 (SAPHanaTopology_HA1_22-reload-interval-0s)
                 start interval=0s timeout=600 (SAPHanaTopology_HA1_22-start-interval-0s)
                 stop interval=0s timeout=300 (SAPHanaTopology_HA1_22-stop-interval-0s)

您也可以使用 crm_mon -A1 指令檢查叢集屬性。

建立 SAPHana 資源

SAPHana 資源代理程式會管理為 SAP HANA 系統複製功能設定的資料庫。

SAPHana 資源定義中的下列參數為選用項目:

  • AUTOMATED_REGISTER,如果設為 true,系統會在 DUPLICATE_PRIMARY_TIMEOUT 在接管後到期時,自動將前者註冊為次要。預設值為 false

    對於多層 SAP HANA HA 叢集,如果您使用的是 SAP HANA 2.0 SP03 以下版本,請將 AUTOMATED_REGISTER 設為 false。這樣可防止已復原的執行個體嘗試向已設定複製目標的 HANA 系統進行複製自我註冊。針對使用多層系統複製的 SAP HANA 設定,您可以將 SAP HANA 2.0 SP03 以上版本的 AUTOMATED_REGISTER 設為 true

  • DUPLICATE_PRIMARY_TIMEOUT:如果發生雙主時間戳記的情況,則會以秒為單位設定兩個主要時間戳記之間的時間差異。預設值為 7200

  • PREFER_SITE_TAKEOVER,用於決定是否會在啟動備援程序前嘗試本機重新啟動。預設值為 false

如要進一步瞭解這些參數,請參閱「在 Google Cloud 上安裝及設定 Red Hat Enterprise Linux 7.6 (含以上版本) 高可用性叢集」。必須訂閱 Red Hat。

  1. 在任一主機上以超級使用者身分建立 SAP HANA 資源:

    RHEL 8 和後續版本

    # pcs resource create sap_hana_resource_name SAPHana SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op start timeout=3600 \
    op stop timeout=3600 \
    op monitor interval=61 role="Slave" timeout=700 \
    op monitor interval=59 role="Master" timeout=700 \
    op promote timeout=3600 \
    op demote timeout=3600 \
    promotable meta notify=true clone-max=2 clone-node-max=1 interleave=true

    RHEL 7

    # pcs resource create sap_hana_resource_name SAPHana SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op start timeout=3600 \
    op stop timeout=3600 \
    op monitor interval=61 role="Slave" timeout=700 \
    op monitor interval=59 role="Master" timeout=700 \
    op promote timeout=3600 \
    op demote timeout=3600 \
    master meta notify=true clone-max=2 clone-node-max=1 interleave=true
  2. 檢查產生的資源屬性:

    RHEL 8 和後續版本

    # pcs resource config sap_hana_resource_name

    RHEL 7

    # pcs resource show sap_hana_resource_name

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

     Resource: SAPHana_HA1_22 (class=ocf provider=heartbeat type=SAPHana)
      Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=22 PREFER_SITE_TAKEOVER=true SID=HA1
      Meta Attrs: clone-max=2 clone-node-max=1 interleave=true notify=true
      Operations: demote interval=0s timeout=3600 (SAPHana_HA1_22-demote-interval-0s)
                  methods interval=0s timeout=5 (SAPHana_HA1_22-methods-interval-0s)
                  monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_22-monitor-interval-61)
                  monitor interval=59 role=Master timeout=700 (SAPHana_HA1_22-monitor-interval-59)
                  promote interval=0s timeout=3600 (SAPHana_HA1_22-promote-interval-0s)
                  reload interval=0s timeout=5 (SAPHana_HA1_22-reload-interval-0s)
                  start interval=0s timeout=3600 (SAPHana_HA1_22-start-interval-0s)
                  stop interval=0s timeout=3600 (SAPHana_HA1_22-stop-interval-0s)
  3. 資源啟動後,請檢查節點屬性,查看節點上 SAP HANA 資料庫目前的狀態:

    # crm_mon -A1

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

    Stack: corosync
    Current DC: hana-ha-vm-2 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Tue Jun 16 20:07:51 2020
    Last change: Tue Jun 16 20:07:26 2020 by root via crm_attribute on hana-ha-vm-1
    
    2 nodes configured
    6 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Active resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    
    Node Attributes:
    * Node hana-ha-vm-1:
       + hana_ha1_clone_state              : PROMOTED
       + hana_ha1_op_mode                  : logreplay
       + hana_ha1_remoteHost               : hana-ha-vm-2
       + hana_ha1_roles                    : 4:P:master1:master:worker:master
       + hana_ha1_site                     : hana-ha-vm-1
       + hana_ha1_srmode                   : syncmem
       + hana_ha1_sync_state               : PRIM
       + hana_ha1_version                  : 1.00.122.27.1568902538
       + hana_ha1_vhost                    : hana-ha-vm-1
       + lpa_ha1_lpt                       : 1592338046
       + master-SAPHana_HA1_22             : 150
    * Node hana-ha-vm-2:
       + hana_ha1_clone_state              : DEMOTED
       + hana_ha1_op_mode                  : logreplay
       + hana_ha1_remoteHost               : hana-ha-vm-1
       + hana_ha1_roles                    : 4:S:master1:master:worker:master
       + hana_ha1_site                     : hana-ha-vm-2
       + hana_ha1_srmode                   : syncmem
       + hana_ha1_sync_state               : SOK
       + hana_ha1_version                  : 1.00.122.27.1568902538
       + hana_ha1_vhost                    : hana-ha-vm-2
       + lpa_ha1_lpt                       : 30
       + master-SAPHana_HA1_22             : 100

建立虛擬 IP 位址資源

您需要為 VIP 建立叢集資源。VIP 資源會在主要作業系統上進行本地化,且無法由其他主機路由。負載平衡器會根據健康狀態檢查,將傳送至 VIP 的流量路由至後端主機。

在任一主機上以超級使用者的身分:

# pcs resource create resource_name \
  IPaddr2 ip="vip-address" nic=eth0 cidr_netmask=32 \
  op monitor interval=3600s timeout=60s

vip-address 值與您先前保留的 IP 位址相同,並在負載平衡器前端的轉送規則中指定。視設定而定,適當變更網路介面。

建立限制

您可以建立限制,定義哪些服務需要先啟動,以及哪些服務需要在同一主機上一起執行。舉例來說,IP 位址必須與主要 HANA 執行個體位於相同主機上。

  1. 定義開始順序限制:

    RHEL 8 和後續版本

    # pcs constraint order topology_resource_name-clone \
    then sap_hana_resource_name-clone symmetrical=false

    RHEL 7

    # pcs constraint order topology_resource_name-clone \
    then sap_hana_resource_name-master symmetrical=false

    symmetrical=false 的規格表示限制條件僅適用於啟動,而非關閉。

    不過,由於您在先前的步驟中為這些資源設定了 interleave=true,因此程序可以並行啟動。換句話說,只要 SAPHanaTopology 正在執行,您就可以在任何節點上啟動 SAPHana。

  2. 檢查限制:

    # pcs constraint

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

    Location Constraints:
     Resource: STONITH-hana-ha-vm-1
       Disabled on:
         Node: hana-ha-vm-1 (score:-INFINITY)
     Resource: STONITH-hana-ha-vm-2
       Disabled on:
         Node: hana-ha-vm-2 (score:-INFINITY)
    Ordering Constraints:
     start SAPHanaTopology_HA1_22-clone then start SAPHana_HA1_22-master (kind:Mandatory) (non-symmetrical)
    Colocation Constraints:
    Ticket Constraints:

安裝事件監聽器並建立健康檢查資源

如要設定健康檢查資源,您必須先安裝事件監聽器。

安裝監聽器

負載平衡器會使用每個主機健康狀態檢查通訊埠上的監聽器,判斷 SAP HANA 叢集的主要執行個體執行的位置。1. 在主要和次要系統的 master 執行個體上以 root 身分安裝 TCP 監聽器。這些操作說明會安裝及使用 HAProxy 做為收聽端。

# yum install haproxy

  1. 開啟設定檔 haproxy.cfg 進行編輯:

    # vi /etc/haproxy/haproxy.cfg
    1. haproxy.cfg 的「預設值」部分,將 mode 變更為 tcp

    2. 在「預設值」部分後方,新增下列項目:

      #---------------------------------------------------------------------
      # Health check listener port for SAP HANA 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 HANA HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
       bind *:60000
  2. 以 root 身分在每個主機上啟動服務,確認服務設定正確無誤:

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

    「負載平衡」頁面

    在「負載平衡器詳細資料」頁面的「後端」部分,如果 HAProxy 服務在兩個主機上都處於有效狀態,則每個執行個體群組項目的「Healthy」欄會顯示 1/1

    螢幕截圖顯示兩個執行個體群組的「Healthy」(健康) 欄位中顯示「1/1」,表示兩者均為健康狀態。

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

    # systemctl stop haproxy.service

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

    螢幕截圖顯示各執行個體群組的「Healthy」欄中顯示「0/1」,表示沒有有效的事件監聽器。

    稍後,在設定健康狀態檢查後,叢集會重新啟動主節點上的監聽器。

建立健康狀態檢查資源

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

    # pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s
  2. 確認健康狀態檢查服務在主 SAP HANA 執行個體和 VIP 資源所在的主機上處於啟用狀態:

    # pcs status

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

    # 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-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    rsc_vip_HA1_22 (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
    rsc_healthcheck_HA1    (service:haproxy):      Started hana-ha-vm-2
  3. 將 VIP 和健康狀態檢查資源分組:

    # pcs resource group add rsc-group-name healthcheck_resource_name vip_resource_name

    在叢集狀態中,資源部分應類似於以下範例:

    Full list of resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    Resource Group: g-primary
        rsc_healthcheck_HA1        (service:haproxy):      Started hana-ha-vm-1
        rsc_vip_HA1_22     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
  4. 建立限制,將新群組放在與主 SAP HANA 執行個體相同的節點上。

    RHEL 8 和後續版本

    # pcs constraint colocation add rsc-group-name with master sap_hana_resource_name-clone 4000

    RHEL 7

    # pcs constraint colocation add rsc-group-name with master sap_hana_resource_name-master 4000

    最終的限制條件應類似下列範例:

    # pcs constraint
    Location Constraints:
     Resource: STONITH-hana-ha-vm-1
       Disabled on:
         Node: hana-ha-vm-1 (score:-INFINITY)
     Resource: STONITH-hana-ha-vm-2
       Disabled on:
         Node: hana-ha-vm-2 (score:-INFINITY)
    Ordering Constraints:
     start SAPHanaTopology_HA1_22-clone then start SAPHana_HA1_22-master (kind:Mandatory) (non-symmetrical)
    Colocation Constraints:
     g-primary with SAPHana_HA1_22-master (score:4000) (rsc-role:Started) (with-rsc-role:Master)
    Ticket Constraints:

測試容錯移轉

模擬主要主機的失敗情況,測試叢集。在發布系統供使用前,請使用測試系統或在正式版系統上執行測試。

在測試前備份系統。

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

  • HDB stop
  • HDB kill
  • 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

    或者,如果有多個網路介面處於作用中狀態,請在次要主機上使用 iptables

    # iptables -A INPUT -s PRIMARY_CLUSTER_IP -j DROP; iptables -A OUTPUT -d PRIMARY_CLUSTER_IP -j DROP
  2. 使用 SSH 重新連線至任一主機,並切換到超級使用者。

  3. 輸入 pcs status 以確認主要主機已在包含次要主機的 VM 中啟用。自動重新啟動功能會在叢集中啟用,因此已停止的主機會重新啟動,並假設為次要主機的角色,如以下範例所示。

    Cluster name: hana-ha-cluster
    Stack: corosync
    Current DC: hana-ha-vm-2 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Wed Jun 17 01:04:36 2020
    Last change: Wed Jun 17 01:03:58 2020 by root via crm_attribute on hana-ha-vm-2
    
    2 nodes configured
    8 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2  ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-2 ]
        Slaves: [ hana-ha-vm-1  ]
    Resource Group: g-primary
        rsc_healthcheck_HA1        (service:haproxy):      Started hana-ha-vm-2
        rsc_vip_HA1_22     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-2
    
    Daemon Status:
     corosync: active/enabled
     pacemaker: active/enabled
     pcsd: active/enabled

設定 HANA 主動/主動 (啟用讀取)

自 SAP HANA 2.0 SPS1 起,您可以在 Pacemaker 叢集中設定 HANA 主動/主動 (啟用讀取)。您可以視需要決定是否啟用。

如要在 Pacemaker 叢集中設定 HANA 主動/主動 (啟用讀取),請完成下列步驟。

為次要主機設定雲端負載平衡器容錯移轉支援

內部直通式網路負載平衡器服務具有容錯支援功能,可根據健康檢查服務將流量轉送至 SAP HANA 叢集中的次要主機。

如要為次要主機設定備援支援功能,請按照下列步驟操作:

  1. 開啟 Cloud Shell:

    前往 Cloud Shell

  2. 請執行下列指令,為虛擬 IP 保留 IP 位址。

    虛擬 IP (VIP) 位址會跟隨次要 SAP HANA 系統。這是應用程式用來存取次要 SAP HANA 系統的 IP 位址。負載平衡器會將傳送至 VIP 的流量,路由至目前代管次要系統的 VM 執行個體。

    如果您在下列指令中省略 --addresses 旗標,系統會為您選擇指定子網路中的 IP 位址。如要進一步瞭解如何預留靜態 IP,請參閱「預留靜態內部 IP 位址」。

    $ gcloud compute addresses create secondary-vip-name \
      --region cluster-region --subnet cluster-subnet \
      --addresses secondary-vip-address
  3. 執行下列指令,建立 Compute Engine 健康狀態檢查。

    針對健康檢查使用的通訊埠,請選擇位於私人範圍 (49152-65535) 的通訊埠,以免與其他服務發生衝突。這個通訊埠應與用於 HANA 主要系統存取的健康狀態檢查所設定的通訊埠不同。檢查間隔和逾時值會比預設值稍長,以便在 Compute Engine 即時遷移事件期間提高容錯能力。您可以視需要調整這些值。

    $ gcloud compute health-checks create tcp secondary-health-check-name \
      --port=secondary-healthcheck-port-num \
      --proxy-header=NONE --check-interval=10 --timeout=10 --unhealthy-threshold=2 \
      --healthy-threshold=2
  4. 執行下列指令,設定負載平衡器和備援群組。

    在此建立額外的後端服務,並使用先前為 SAP HANA 主要系統內部 TCP/UDP 負載平衡器後端服務所建立的相同執行個體群組。

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

      $ gcloud compute backend-services create secondary-backend-service-name \
        --load-balancing-scheme internal \
        --health-checks secondary-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 secondary-backend-service-name \
        --instance-group primary-ig-name \
        --instance-group-zone primary-zone \
        --region cluster-region
    3. 將次要容錯移轉執行個體群組新增至後端服務:

      $ gcloud compute backend-services add-backend secondary-backend-service-name \
        --instance-group secondary-ig-name \
        --instance-group-zone secondary-zone \
        --failover \
        --region cluster-region
    4. 建立轉送規則。

      針對 IP 位址標記,請指定您為 VIP 預留的 IP 位址。如果您需要從下列指令中指定的區域以外的地方存取 HANA 次要系統,請在轉送規則定義中加入 --allow-global-access 標記。

      $ gcloud compute forwarding-rules create secondary-rule-name \
        --load-balancing-scheme internal \
        --address secondary-vip-name \
        --subnet cluster-subnet \
        --region cluster-region \
        --backend-service secondary-backend-service-name \
        --ports ALL

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

啟用 HANA 主動/主動 (啟用讀取)

在次要主機上,按照下列步驟為 SAP HANA 系統複製作業啟用主動/主動 (啟用讀取) 模式:

  1. 以 root 身分將叢集設為維護模式:

    $ pcs property set maintenance-mode=true

  2. SID_LCadm 身分停止 SAP HANA:

    > HDB stop
  3. SID_LCadm 身分,使用 logreplay_readaccess 作業模式,將 HANA 次要系統重新註冊至 SAP HANA 系統複製:

    > hdbnsutil -sr_register --remoteHost=primary-host-name --remoteInstance=inst_num \
     --replicationMode=syncmem --operationMode=logreplay_readaccess --name=secondary-host-name
  4. SID_LCadm 身分啟動 SAP HANA:

    > HDB start
  5. SID_LCadm 身分確認 HANA 同步處理狀態為 ACTIVE

    > cdpy; python systemReplicationStatus.py --sapcontrol=1 | grep overall_replication_status

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

    overall_replication_status=ACTIVE

設定 Pacemaker

以系統管理員身分執行下列指令,為 Pacemaker HA 叢集設定主動/主動 (啟用讀取):

  1. 為健康狀態檢查設定事件監聽器:

    1. 複製並重新命名預設的 haproxy.service 設定檔,將其設為多個 haproxy 執行個體的範本檔案:

      # cp /usr/lib/systemd/system/haproxy.service \
           /etc/systemd/system/haproxy@.service
    2. 編輯 haproxy@.service 檔案的 [Unit][Service] 區段,加入 %i 例項參數,如以下範例所示:

      RHEL 7

      [Unit]
      Description=HAProxy Load Balancer %i
      After=network-online.target

      [Service] EnvironmentFile=/etc/sysconfig/haproxy ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy-%i.cfg -p /run/haproxy-%i.pid $OPTIONS ...

      RHEL 8

      [Unit]
      Description=HAProxy Load Balancer %i
      After=network-online.target
      Wants=network-online.target

      [Service] Environment="CONFIG=/etc/haproxy/haproxy-%i.cfg" "PIDFILE=/run/haproxy-%i.pid" ...

      如要進一步瞭解 Red Hat 的 systemd 單位範本,請參閱「使用已實例化的單位」。

    3. 為 SAP HANA 主要系統建立 haproxy.cfg 設定檔。例如:

      # vi /etc/haproxy/haproxy-primary.cfg
    4. 在 SAP HANA 主要系統的 haproxy-primary.cfg 設定檔中插入下列設定,並將 healthcheck-port-num 替換為您先前為 HANA 主要系統建立 Compute Engine 健康檢查時指定的連接埠號碼:

      global
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy-%i.pid
        user        haproxy
        group       haproxy
        daemon
      defaults
        mode                    tcp
        log                     global
        option                  dontlognull
        option                  redispatch
        retries                 3
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout check           10s
        maxconn                 3000
      
      # Listener for SAP healthcheck
      listen healthcheck
        bind *:healthcheck-port-num
    5. 為您的 SAP HANA 次要系統建立 haproxy.cfg 設定檔。例如:

      # vi /etc/haproxy/haproxy-secondary.cfg
    6. 在 SAP HANA 次要系統的 haproxy-secondary.cfg 設定檔中插入下列設定,並將 secondary-healthcheck-port-num 替換為您先前為 HANA 次要系統建立 Compute Engine 健康檢查時指定的連接埠號碼:

      global
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy-%i.pid
        user        haproxy
        group       haproxy
        daemon
      defaults
        mode                    tcp
        log                     global
        option                  dontlognull
        option                  redispatch
        retries                 3
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout check           10s
        maxconn                 3000
      
      # Listener for SAP healthcheck
      listen healthcheck
        bind *:secondary-healthcheck-port-num
    7. /etc/haproxy/haproxy.cfg 中移除現有的監聽器設定:

      #---------------------------------------------------------------------
      # Health check listener port for SAP HANA HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
        bind *:healthcheck-port-num
    8. 重新載入 systemd 服務來載入變更:

      # systemctl daemon-reload
    9. 確認兩個 HAProxy 服務已正確設定:

      # systemctl start haproxy@primary
      # systemctl start haproxy@secondary
      
      # systemctl status haproxy@primary
      # systemctl status haproxy@secondary

      傳回的狀態應顯示 haproxy@primary.servicehaproxy@secondary.serviceactive (running)。以下是 haproxy@primary.service 的輸出範例:

      ● haproxy@primary.service - Cluster Controlled haproxy@primary
        Loaded: loaded (/etc/systemd/system/haproxy@.service; disabled; vendor preset: disabled)
        Drop-In: /run/systemd/system/haproxy@primary.service.d
                 └─50-pacemaker.conf
        Active: active (running) since Fri 2022-10-07 23:36:09 UTC; 1h 13min ago
      Main PID: 21064 (haproxy-systemd)
        CGroup: /system.slice/system-haproxy.slice/haproxy@primary.service
                ├─21064 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy-primary.cfg -p /run/hapro...
                ├─21066 /usr/sbin/haproxy -f /etc/haproxy/haproxy-primary.cfg -p /run/haproxy-primary.pid -...
                └─21067 /usr/sbin/haproxy -f /etc/haproxy/haproxy-primary.cfg -p /run/haproxy-primary.pid -...
      
      Oct 07 23:36:09 hana-ha-vm-1 systemd[1]: Started Cluster Controlled haproxy@primary.
    10. 在 Cloud Shell 中,等待幾秒讓健康狀態檢查偵測到監聽器後,請檢查主要和次要後端服務中的後端執行個體群組健康狀態:

      $ gcloud compute backend-services get-health backend-service-name \
        --region cluster-region
      $ gcloud compute backend-services get-health secondary-backend-service-name \
        --region cluster-region

      您應該會看到類似以下的輸出內容,其中顯示您目前正在使用的 VM,healthStateHEALTHY

      ---
      backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/hana-ha-ig-1
      status:
      healthStatus:
      ‐ healthState: HEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1
        ipAddress: 10.0.0.35
        port: 80
      kind: compute#backendServiceGroupHealth
      
    11. 停止這兩項服務,讓 Pacemaker 管理服務:

      # systemctl stop haproxy@primary
      # systemctl stop haproxy@secondary
    12. 針對叢集中的每個主機重複執行上述步驟。

  2. 針對您為次要系統保留的 VIP 位址,建立本機叢集 IP 資源:

    # pcs resource create secondary_vip_resource_name \
      IPaddr2 ip="secondary-vip-address" nic=eth0 cidr_netmask=32 \
      op monitor interval=3600s timeout=60s
  3. 請執行下列指令,設定輔助健康狀態檢查服務。

    負載平衡器會使用每個主機的健康狀態檢查通訊埠上的監聽器,判斷 SAP HANA 叢集的次要執行個體執行的位置。

    1. 如要管理叢集中的事件監聽器,請為事件監聽器建立資源:

      1. 刪除 HANA 主要系統健康狀態檢查服務的資源:

        # pcs resource delete healthcheck_resource_name --force
      2. 為 HANA 主要系統的健康狀態檢查服務新增資源:

        # pcs resource create primary_healthcheck_resource_name \
         service:haproxy@primary op monitor interval=10s timeout=20s
      3. 為 HANA 次要系統的健康狀態檢查服務新增資源:

        # pcs resource create secondary_healthcheck_resource_name \
         service:haproxy@secondary op monitor interval=10s timeout=20s
    2. 將 VIP 和輔助健康狀態檢查服務資源分組

      1. 將新的健康狀態檢查資源新增至主要 VIP 資源的現有資源群組:

        # pcs resource group add rsc-group-name primary_healthcheck_resource_name \
         --before vip_resource_name
      2. 新增資源群組,將 HANA 次要系統的 VIP 和輔助健康檢查服務資源分組:

        # pcs resource group add secondary-rsc-group-name \
         secondary_healthcheck_resource_name secondary_vip_resource_name
  4. 執行下列指令,建立兩個位置限制:

    這些限制條件可確保次要 VIP 資源群組放置在正確的叢集節點:

    # pcs constraint location secondary-rsc-group-name rule score=INFINITY \
      hana_sid_sync_state eq SOK and hana_sid_roles eq 4:S:master1:master:worker:master
    # pcs constraint location secondary-rsc-group-name rule score=2000 \
      hana_sid_sync_state eq PRIM and hana_sid_roles eq 4:P:master1:master:worker:master
  5. 退出叢集維護模式:

    # pcs property set maintenance-mode=false
  6. 檢查叢集的狀態:

    # pcs status

    下列範例顯示主動/主動 (啟用讀取) 的 SAP HANA 系統複製功能,為已正確設定的叢集顯示狀態。您應該會看到輔助系統 VIP 資源的額外資源群組。在以下範例中,該資源群組的名稱為 g-secondary

    Cluster name: hacluster
      Stack: corosync
      Current DC: hana-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Sat Oct  8 00:37:08 2022
      Last change: Sat Oct  8 00:36:57 2022 by root via crm_attribute on hana-test-2
    
      2 nodes configured
      10 resource instances configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
      STONITH-hana-ha-vm-1    (stonith:fence_gce):    Started hana-ha-vm-2
      STONITH-hana-ha-vm-2    (stonith:fence_gce):    Started hana-ha-vm-1
      Resource Group: g-primary
        rsc_healthcheck_HA1-primary        (service:haproxy@primary):      Started hana-ha-vm-1
        rsc_vip_HA1_00     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
      Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
      Master/Slave Set: SAPHana_HA1_00-master [SAPHana_HA1_00]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
      Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
      Resource Group: g-secondary
        rsc_healthcheck_HA1-secondary        (service:haproxy@secondary):      Started hana-ha-vm-2
        rsc_vip_HA1_00-secondary     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-2
    

評估 SAP HANA 工作負載

如要為在 Google Cloud上執行的 SAP HANA 高可用性工作負載自動執行持續驗證檢查,您可以使用Workload Manager

您可以使用 Workload Manager,根據 SAP、 Google Cloud和作業系統供應商的最佳做法,自動掃描及評估 SAP HANA 高可用性工作負載。這有助於改善工作負載的品質、效能和可靠性。

如要瞭解 Workload Manager 支援的最佳做法,以便評估在 Google Cloud上執行的 SAP HANA 高可用性工作負載,請參閱 Workload Manager 適用於 SAP 的最佳做法。如要瞭解如何使用 Workload Manager 建立及執行評估作業,請參閱「建立並執行評估作業」。

疑難排解

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

取得 RHEL 上的 SAP HANA 支援

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

支援

如果是基礎架構或服務相關問題,請與客戶服務團隊聯絡。 Google Cloud 您可以在 Google Cloud 控制台的「支援總覽」頁面中找到聯絡資訊。如果客戶服務團隊判定問題出在 SAP 系統,就會將您轉介給 SAP 支援團隊。

如要進一步瞭解 SAP 產品相關問題,請使用 SAP 支援登錄您的支援要求。SAP 會評估支援票證,如確定為 Google Cloud基礎架構方面的問題,就會將票證轉移至系統中的適當Google Cloud 元件:BC-OP-LNX-GOOGLEBC-OP-NT-GOOGLE

支援相關規定

您必須符合支援方案的最低需求,才能獲得 SAP 系統和Google Cloud基礎架構和服務的支援服務。

如要進一步瞭解Google Cloud上 SAP 的最低支援需求,請參閱:

連線至 SAP HANA

如果主機 VM 沒有 SAP HANA 的外部 IP 位址,您只能使用 SSH,透過防禦執行個體連線至 SAP HANA 執行個體,或使用 SAP HANA Studio,透過 Windows 伺服器連線至 SAP HANA 執行個體。

  • 如要透過防禦執行個體連線至 SAP HANA,請使用您選擇的 SSH 用戶端連線至防禦主機,然後連線至 SAP HANA 執行個體。

  • 如要透過 SAP HANA Studio 連線至 SAP HANA 資料庫,請使用遠端桌面用戶端連線至 Windows Server 執行個體。連線之後,請手動安裝 SAP HANA Studio,並存取您的 SAP HANA 資料庫。

部署後工作

完成部署後,請完成下列步驟:

  1. 變更 SAP HANA 系統管理員和資料庫超級使用者的臨時密碼。例如:

    sudo passwd SID_LCadm

    如要瞭解 SAP 提供的密碼變更資訊,請參閱「Reset the SYSTEM User Password of the System Database」。

  2. 使用 SAP HANA 執行個體之前,請設定並備份新的 SAP HANA 資料庫。

  3. 如果 SAP HANA 系統部署在 VirtIO 網路介面上,建議您確認 TCP 參數 /proc/sys/net/ipv4/tcp_limit_output_bytes 的值已設為 1048576。這項修改可改善 VirtIO 網路介面上的整體網路總處理量,且不會影響網路延遲時間。

如需詳細資訊,請參閱:

後續步驟

詳情請參閱下列資源: