Terraform:SAP HANA 向上擴充高可用性叢集設定指南

本指南說明如何在 Red Hat Enterprise Linux (RHEL) 或 SUSE Linux Enterprise Server (SLES) 高可用性 (HA) 叢集中,使用內部轉送網路負載均衡器來管理虛擬 IP (VIP) 位址,自動部署 SAP HANA。

本指南會根據 Google Cloud、SAP 和作業系統供應商的最佳做法,使用 Terraform 部署兩部 Compute Engine 虛擬機器 (VM)、兩個 SAP HANA 向上擴充系統、具有內部通道 Network Load Balancer 實作的虛擬 IP 位址 (VIP),以及以作業系統為基礎的 HA 叢集。

其中一個 SAP HANA 系統設定為主要活動系統,另一個則設為次要備用系統。您可以在相同的地區中部署這兩個 SAP HANA 系統,最好是位於不同的區域。

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

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

  • Pacemaker 高可用性叢集資源管理員。
  • Google Cloud 防護機制。
  • 使用第 4 級 TCP 內部負載平衡器實作的虛擬 IP (VIP),包括:
    • 您為 VIP 選取的 IP 位址預留。
    • 兩個 Compute Engine 執行個體群組。
    • TCP 內部負載平衡器。
    • Compute Engine 健康狀態檢查。
  • 在 RHEL HA 叢集中:
    • Red Hat 高可用性模式。
    • Red Hat 資源代理程式和圍欄套件。
  • 在 SLES HA 叢集中:
    • SUSE 高可用性模式。
    • 如為 SLES for SAP 15 SP6 以上版本,則為 SUSE SAPHanaSR-angi 資源代理程式套件。適用於舊版 SLES 的 SUSE SAPHanaSR 資源代理程式套件。
  • 同步系統複製功能。
  • 預先載入記憶體。
  • 自動將故障的執行個體重新啟動為新的次要執行個體。

如果您需要為 SAP HANA 自動主機容錯移轉功能建立具有待命主機的向外擴充系統,請改為參閱 Terraform:具有主機自動容錯移轉功能的 SAP HANA 向外擴充系統部署指南

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

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

必備條件

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

建立網路

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

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

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

如要為專案建立虛擬私有雲網路,請完成下列步驟:

  1. 建立自訂模式網路。詳情請參閱「建立自訂模式網路」。

  2. 建立子網路,並指定地區和 IP 範圍。詳情請參閱「新增子網路」。

設定 NAT 閘道

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

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

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

新增防火牆規則

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

SAP HANA 的 HA 叢集至少需要兩個防火牆規則,一個允許 Compute Engine 健康檢查檢查叢集節點的健康狀態,另一個則允許叢集節點彼此通訊。

如果您未使用共用 VPC 網路,則需要為節點間的通訊建立防火牆規則,但不需為健康狀況檢查建立防火牆規則。Terraform 設定檔會為健康狀態檢查建立防火牆規則,您可以在部署完成後視需要修改。

如果您使用共用虛擬私有雲網路,網路管理員需要在主專案中建立這兩種防火牆規則。

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

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

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

  • 列於所有 SAP 產品的 TCP/IP 中的預設 SAP 通訊埠。
  • 從電腦或公司網路環境到 Compute Engine VM 執行個體的連線。如果不確定要使用哪一個 IP 位址,請詢問貴公司的網路管理員。
  • 連往 VM 執行個體的 SSH 連線,包括瀏覽器中的 SSH
  • 使用 Linux 第三方工具連到 VM 的連線。請建立防火牆規則以允許工具透過防火牆存取。

如要為專案建立防火牆規則,請參閱「建立防火牆規則」。

建立已安裝 SAP HANA 的高可用性 Linux 叢集。

以下說明如何使用 Terraform 設定檔,建立具備 2 個 SAP HANA 系統的 RHEL 或 SLES 叢集:在一個 VM 執行個體上的主要單一主機 SAP HANA 系統,以及在相同 Compute Engine 地區中另一個 VM 執行個體上建立的備用 SAP HANA 系統。SAP HANA 系統使用的是同步系統複製模式,備用系統會預先載入已複製的資料。

您將在 Terraform 設定檔中定義 SAP HANA 高可用性叢集的設定選項。

  1. 確認目前的永久磁碟和 CPU 等資源配額足夠您即將安裝的 SAP HANA 系統使用。如果配額不足,則部署會失敗。

    如要瞭解 SAP HANA 配額需求,請參閱「SAP HANA 的定價與配額考量事項」一文。

    前往配額頁面

  2. 開啟 Cloud Shell。

    開啟 Cloud Shell

  3. 將 SAP HANA 高可用性叢集的 sap_hana_ha.tf 設定檔下載到您的工作目錄:

    $ wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana_ha/terraform/sap_hana_ha.tf
  4. 在 Cloud Shell 程式碼編輯器中開啟 sap_hana_ha.tf 檔案。

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

  5. sap_hana_ha.tf 檔案中,使用安裝的值取代雙引號內的內容,即可更新引數值。下表說明引數。

    引數 資料類型 說明
    source 字串

    指定在部署期間要使用的 Terraform 模組位置和版本。

    sap_hana_ha.tf 設定檔包含兩個 source 引數例項:一個是處於啟用狀態,另一個則是做為註解加入。預設啟用的 source 引數會將 latest 指定為模組版本。source 引數的第二個例項預設會因開頭的 # 字元而停用,用來指定可識別模組版本的時間戳記。

    如果您需要所有部署作業都使用相同的模組版本,請從指定版本時間戳記的 source 引數中移除開頭的 # 字元,然後將其新增至指定 latestsource 引數。

    project_id 字串 指定您要部署此系統的 Google Cloud 專案 ID。例如:my-project-x
    machine_type 字串 指定您需要執行 SAP 系統的 Compute Engine 虛擬機器 (VM) 類型。如果您需要自訂的 VM 類型,請指定預先定義的 VM 類型,並將 vCPU 數量設為最接近您所需數量的數字,但仍要大於該數字。部署完成後,請修改 vCPU 數量和記憶體容量

    例如 n1-highmem-32

    sole_tenant_deployment 布林值

    (非必要) 如果您想為 SAP HANA 部署作業佈建單一租用戶節點,請指定 true 值。

    預設值為 false

    這個引數適用於 sap_hana_ha 1.3.704310921 以上版本。

    sole_tenant_name_prefix 字串

    (非必要) 如果您要為 SAP HANA 部署作業提供單一租用戶節點,可以使用這個引數指定 Terraform 為對應單一租用戶範本和單一租用戶群組的名稱設定的前置字串。

    預設值為 st-SID_LC

    如要瞭解單一用戶群範本和單一用戶群群組,請參閱單一用戶群總覽

    這個引數適用於 sap_hana_ha 1.3.704310921 以上版本。

    sole_tenant_node_type 字串

    選用。如果您想為 SAP HANA 部署佈建專屬節點,請指定要為對應節點範本設定的節點類型

    這個引數適用於 sap_hana_ha 1.3.704310921 以上版本。

    network 字串 指定您需要建立負責管理 VIP 的負載平衡器所在網路名稱。

    如果您使用共用虛擬私有雲網路,則必須將主專案的 ID 新增為網路名稱的父項目錄。例如:HOST_PROJECT_ID/NETWORK_NAME

    subnetwork 字串 指定您在先前步驟中建立的子網路名稱。如果您要部署共用虛擬私有雲端,請將這個值指定為 SHARED_VPC_PROJECT_ID/SUBNETWORK。例如:myproject/network1
    linux_image 字串 指定要部署 SAP 系統的 Linux 作業系統映像檔名稱。例如 rhel-9-2-sap-hasles-15-sp5-sap。如需可用的作業系統映像檔清單,請參閱 Google Cloud 控制台的「映像檔」頁面。
    linux_image_project 字串 請指定 Google Cloud 專案,該專案包含您為引數 linux_image 指定的圖片。這個專案可能是您自己的專案或 Google Cloud 映像檔專案。如果是 Compute Engine 映像檔,請指定 rhel-sap-cloudsuse-sap-cloud。如要查看作業系統的映像檔專案,請參閱「作業系統詳細資料」。
    primary_instance_name 字串 指定主要 SAP HANA 系統的 VM 執行個體名稱。 名稱可以使用小寫英文字母、數字或連字號。
    primary_zone 字串 指定部署主要 SAP HANA 系統的區域。主要和次要系統的區域須位於同一地區。例如:us-east1-c
    secondary_instance_name 字串 指定次要 SAP HANA 系統的 VM 執行個體名稱。名稱可以使用小寫英文字母、數字或連字號。
    secondary_zone 字串 指定部署次要 SAP HANA 系統的區域。主要和次要系統的區域須位於同一地區。例如:us-east1-b
    sap_hana_deployment_bucket 字串 如要在已部署的 VM 上自動安裝 SAP HANA,請指定包含 SAP HANA 安裝檔案的 Cloud Storage 值區路徑。請勿在路徑中加入 gs://,只需加入值區名稱和任何資料夾的名稱即可。例如:my-bucket-name/my-folder

    Cloud Storage 值區必須位於您為 project_id 引數指定的 Google Cloud 專案中。

    sap_hana_sid 字串 如要在已部署的 VM 上自動安裝 SAP HANA,請指定 SAP HANA 系統 ID。ID 必須包含 3 個英數字元,並以字母開頭。所有字母都必須大寫。例如:ED1
    sap_hana_instance_number 整數 (非必要) 指定 SAP HANA 系統的執行個體編號 (0 到 99)。 預設為 0
    sap_hana_sidadm_password 字串 如要在已部署的 VM 上自動安裝 SAP HANA,請為部署期間要使用的安裝指令碼指定臨時 SIDadm 密碼。密碼至少必須包含 8 個字元,且應包含至少一個大寫字母、一個小寫字母和一個數字。

    建議您改用密鑰,而非以純文字指定密碼。詳情請參閱「密碼管理」一文。

    sap_hana_sidadm_password_secret 字串 (非必要) 如果您使用 Secret Manager 儲存 SIDadm 密碼,請指定與此密碼相對應的密鑰名稱

    在 Secret Manager 中,請確認密鑰值 (即密碼) 至少包含 8 個字元,且包含至少一個大寫字母、一個小寫字母和一個數字。

    詳情請參閱「密碼管理」一文。

    sap_hana_system_password 字串 如要在已部署的 VM 上自動安裝 SAP HANA,請為安裝指令碼指定臨時資料庫超級使用者密碼,以便在部署期間使用。密碼至少必須包含 8 個字元,並包含至少 1 個大寫字母、1 個小寫字母與 1 個數字。

    建議您改用密鑰,而非以純文字指定密碼。詳情請參閱「密碼管理」一文。

    sap_hana_system_password_secret 字串 (非必要) 如果您使用 Secret Manager 來儲存資料庫超級使用者密碼,請指定與此密碼相對應的密鑰名稱

    在 Secret Manager 中,請確認密鑰值 (即密碼) 至少包含 8 個字元,且包含至少一個大寫字母、一個小寫字母和一個數字。

    詳情請參閱「密碼管理」一文。

    sap_hana_double_volume_size 布林值 (非必要) 如要使 HANA 磁碟區大小加倍,請指定 true。如要在同一個 VM 上部署多個 SAP HANA 執行個體或災難復原 SAP HANA 執行個體,這個引數就很實用。根據預設,系統會自動計算磁碟區大小,以滿足 VM 大小所需的最小大小,同時符合 SAP 認證和支援需求。預設值為 false
    sap_hana_backup_size 整數 (非必要) 以 GB 為單位指定 /hanabackup 磁碟區的大小。如果您未指定這個引數或將其設為 0,則安裝指令碼會為 Compute Engine 例項配置 HANA 備份磁碟區,其容量是總記憶體的兩倍。
    sap_hana_sidadm_uid 整數 (非必要) 指定值以覆寫 SID_LCadm 使用者 ID 的預設值。預設值為 900。您可以在 SAP 範圍內針對一致性的目的將其改為其他值。
    sap_hana_sapsys_gid 整數 (非必要) 覆寫 sapsys 的預設群組 ID。預設值為 79
    sap_vip 字串

    (非必要) 指定要用於 VIP 的 IP 位址。IP 位址必須位於已指派給子網路的 IP 位址範圍內。Terraform 設定檔會為您保留這個 IP 位址。

    sap_hana_ha 模組的 1.3.730053050 版本起,sap_vip 引數為選用項目。如果您未指定,Terraform 會自動從您為 subnetwork 引數指定的子網路中,指派可用的 IP 位址。

    primary_instance_group_name 字串 (非必要) 指定主要節點的非代管執行個體群組名稱。預設名稱為 ig-PRIMARY_INSTANCE_NAME
    secondary_instance_group_name 字串 (非必要) 指定次要節點的非代管執行個體群組名稱。預設名稱為 ig-SECONDARY_INSTANCE_NAME
    loadbalancer_name 字串 (非必要) 指定內部直通式網路負載平衡器的名稱。 預設名稱為 lb-SAP_HANA_SID-ilb
    network_tags 字串 (非必要) 指定一或多個以半形逗號分隔的網路標記,用於與 VM 執行個體建立關聯,以便用於防火牆或轉送。

    ILB 元件的網路標記會自動新增至 VM 的網路標記

    nic_type 字串 (非必要) 指定要與 VM 執行個體搭配使用的網路介面。您可以指定 GVNICVIRTIO_NET 值。如要使用 Google Virtual NIC (gVNIC),您必須指定支援 gVNIC 的 OS 映像檔,做為 linux_image 引數的值。如要查看作業系統映像檔清單,請參閱「作業系統詳細資料」。

    如果您未為這個引數指定值,系統會根據您為 machine_type 引數指定的機器類型,自動選取網路介面。

    這個引數適用於 sap_hana 模組 202302060649 以上版本。
    disk_type 字串 (非必要) 指定要為部署中的 SAP 資料和記錄磁碟區部署的預設 Persistent Disk 或 Hyperdisk 磁碟區類型。如要瞭解 Google Cloud提供的 Terraform 設定所執行的預設磁碟部署作業,請參閱「 Terraform 的磁碟部署作業」。

    此引數的有效值如下:pd-ssdpd-balancedhyperdisk-extremehyperdisk-balancedpd-extreme。在 SAP HANA 擴充部署中,也會為 /hana/shared 目錄部署獨立的平衡永久磁碟。

    您可以使用一些進階引數,覆寫這個預設磁碟類型、相關的預設磁碟大小和預設 IOPS。如需更多資訊,請前往工作目錄,然後執行 terraform init 指令,並查看 /.terraform/modules/sap_hana_ha/variables.tf 檔案。在正式環境中使用這些引數前,請務必先在非正式環境中進行測試。

    如果您想使用 SAP HANA 原生儲存空間擴充功能 (NSE),就必須使用進階引數來配置較大的磁碟。

    use_single_shared_data_log_disk 布林值 (非必要) 預設值為 false,可指示 Terraform 為下列每個 SAP 磁碟分割區部署個別的永久磁碟或 Hyperdisk:/hana/data/hana/log/hana/shared/usr/sap。如要在同一個永久磁碟或 Hyperdisk 上掛載這些 SAP 磁碟區,請指定 true
    enable_data_striping 布林值 (非必要) 這個引數可讓您在兩個磁碟上部署 /hana/data 磁碟區。預設值為 false,可指示 Terraform 部署單一磁碟,用於代管 /hana/data 磁碟區。

    這個引數適用於 sap_hana_ha 模組 1.3.674800406 以上版本。

    include_backup_disk 布林值 (非必要) 這個引數適用於 SAP HANA 向上擴充部署作業。預設值為 true,可指示 Terraform 部署單獨磁碟來代管 /hanabackup 目錄。

    磁碟類型取決於 backup_disk_type 參數。這個磁碟的大小取決於 sap_hana_backup_size 引數。

    如果您將 include_backup_disk 的值設為 false,則系統不會為 /hanabackup 目錄部署任何磁碟。

    backup_disk_type 字串 (非必要) 對於升級部署作業,請指定要為 /hanabackup 磁碟區部署的 Persistent Disk 或 Hyperdisk 類型。如要瞭解 Google Cloud提供的 Terraform 設定所執行的預設磁碟部署作業,請參閱「 Terraform 的磁碟部署作業」。

    以下是這個引數的有效值:pd-ssdpd-balancedpd-standardhyperdisk-extremehyperdisk-balancedpd-extreme

    這個引數適用於 sap_hana_ha 模組 202307061058 以上版本。

    enable_fast_restart 布林值 (非必要) 這個引數會決定是否為部署作業啟用 SAP HANA 快速重新啟動選項。預設值為 true。 Google Cloud 強烈建議您啟用 SAP HANA 快速重新啟動選項。

    這個引數適用於 sap_hana_ha 模組的 202309280828 以上版本。

    public_ip 布林值 (非必要) 指定是否要將公開 IP 位址加到您的 VM 執行個體。預設值為 true
    service_account 字串 (非必要) 指定使用者代管的服務帳戶電子郵件地址,供主機 VM 和在主機 VM 上執行的程式使用。例如:svc-acct-name@project-id.iam.gserviceaccount.com

    如果您指定這個引數但未附加值,或省略這個引數,安裝指令碼就會使用 Compute Engine 的預設服務帳戶。詳情請參閱「Google Cloud 中的 SAP 程式身分與存取權管理」。 Google Cloud

    sap_deployment_debug 布林值 (非必要) 只有在 Cloud 客戶服務團隊要求您為部署作業啟用偵錯功能時,才指定 true,這樣部署作業就會產生詳細的部署記錄。預設值為 false
    primary_reservation_name 字串 (非必要) 如要使用特定 Compute Engine VM 保留項目來佈建主機代管 HA 叢集主要 SAP HANA 執行個體的 VM 執行個體,請指定保留項目名稱。根據預設,安裝指令碼會根據下列條件選取任何可用的 Compute Engine 預留容量。

    無論您是否指定名稱,或安裝指令碼是否自動選取名稱,保留項目都必須設定下列項目,才能使用:

    • specificReservationRequired 選項已設為 true,或是在 Google Cloud 控制台中選取「Select specific reservation」(選取特定保留項目) 選項。
    • 部分 Compute Engine 機器類型支援的 CPU 平台並未納入機器類型的 SAP 認證範圍。如果目標保留項目適用於下列任何機器類型,則保留項目必須指定最低 CPU 平台,如下所示:
      • n1-highmem-32:Intel Broadwell
      • n1-highmem-64:Intel Broadwell
      • n1-highmem-96:Intel Skylake
      • m1-megamem-96:Intel Skylake
    • 所有其他機器類型 (已獲 SAP 認證,可用於 Google Cloud ) 的最低 CPU 平台,均符合 SAP 最低 CPU 需求。
    secondary_reservation_name 字串 (非必要) 如要使用特定的 Compute Engine VM 保留項目,為代管 HA 叢集次要 SAP HANA 執行個體的 VM 執行個體進行佈建,請指定保留項目名稱。根據預設,安裝指令碼會根據下列條件選取任何可用的 Compute Engine 預留容量。

    無論您是否指定名稱,或安裝指令碼是否自動選取名稱,保留項目都必須設定下列項目,才能使用:

    • specificReservationRequired 選項已設為 true,或是在 Google Cloud 控制台中選取「Select specific reservation」(選取特定保留項目) 選項。
    • 部分 Compute Engine 機器類型支援的 CPU 平台並未納入機器類型的 SAP 認證範圍。如果目標保留項目適用於下列任何機器類型,則保留項目必須指定最低 CPU 平台,如下所示:
      • n1-highmem-32:Intel Broadwell
      • n1-highmem-64:Intel Broadwell
      • n1-highmem-96:Intel Skylake
      • m1-megamem-96:Intel Skylake
    • 所有其他機器類型 (已獲 SAP 認證,可用於 Google Cloud ) 的最低 CPU 平台,均符合 SAP 最低 CPU 需求。
    primary_static_ip 字串 (非必要) 請為高可用性叢集中的主要 VM 執行個體指定有效的靜態 IP 位址。如果您未指定 IP 位址,系統會為 VM 執行個體自動產生 IP 位址。例如:128.10.10.10

    這個引數適用於 sap_hana_ha 模組 202306120959 以上版本。

    secondary_static_ip 字串 (非必要) 為高可用性叢集中的次要 VM 執行個體指定有效的靜態 IP 位址。如果您未指定 IP 位址,系統會為 VM 執行個體自動產生 IP 位址。例如:128.11.11.11

    這個引數適用於 sap_hana_ha 模組 202306120959 以上版本。

    can_ip_forward 布林值

    指定是否允許傳送和接收具有不相符來源或目的地 IP 的封包,這可讓 VM 像路由器一樣運作。預設值為 true

    如果您只想使用 Google 內部負載平衡器來管理已部署 VM 的虛擬 IP,請將值設為 false。系統會自動部署內部負載平衡器,做為高可用性範本的一部分。

    以下範例顯示已完成的設定檔,其中定義了 SAP HANA 的高可用性叢集。叢集會使用內部直通式網路負載平衡器來管理 VIP。

    Terraform 會部署設定檔中定義的 Google Cloud資源,然後由指令碼接手設定作業系統、安裝 SAP HANA、設定複寫作業,以及設定 Linux HA 叢集。

    按一下 RHELSLES,即可查看適用於您作業系統的範例。為方便說明,範例中省略了設定檔中的註解。

    RHEL

        # ...
        module "sap_hana_ha" {
        source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana_ha/sap_hana_ha_module.zip"
        #
        # By default, this source file uses the latest release of the terraform module
        # for SAP on Google Cloud.  To fix your deployments to a specific release
        # of the module, comment out the source argument above and uncomment the source argument below.
        #
        # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/YYYYMMDDHHMM/terraform/sap_hana_ha/sap_hana_ha_module.zip"
        #
        # ...
        #
        project_id = "example-project-123456"
        machine_type = "n2-highmem-32"
        network = "example-network"
        subnetwork = "example-subnet-us-central1"
        linux_image = "rhel-8-4-sap-ha"
        linux_image_project = "rhel-sap-cloud"
    
        primary_instance_name = "example-ha-vm1"
        primary_zone = "us-central1-a"
    
        secondary_instance_name = "example-ha-vm2"
        secondary_zone = "us-central1-c"
        # ...
        sap_hana_deployment_bucket = "my-hana-bucket"
        sap_hana_sid = "HA1"
        sap_hana_instance_number = 00
        sap_hana_sidadm_password = "TempPa55word"
        sap_hana_system_password = "TempPa55word"
        # ...
        sap_vip = 10.0.0.100
        primary_instance_group_name = ig-example-ha-vm1
        secondary_instance_group_name = ig-example-ha-vm2
        loadbalancer_name = lb-ha1
        # ...
        network_tags = hana-ha-ntwk-tag
        service_account = "sap-deploy-example@example-project-123456.iam.gserviceaccount.com"
        primary_static_ip = "10.0.0.1"
        secondary_static_ip = "10.0.0.2"
        enable_fast_restart = true
        # ...
        }

    SLES

        # ...
        module "sap_hana_ha" {
        source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana_ha/sap_hana_ha_module.zip"
        #
        # By default, this source file uses the latest release of the terraform module
        # for SAP on Google Cloud.  To fix your deployments to a specific release
        # of the module, comment out the source argument above and uncomment the source argument below.
        #
        # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/YYYYMMDDHHMM/terraform/sap_hana_ha/sap_hana_ha_module.zip"
        #
        # ...
        #
        project_id = "example-project-123456"
        machine_type = "n2-highmem-32"
        network = "example-network"
        subnetwork = "example-subnet-us-central1"
        linux_image = "sles-15-sp3-sap"
        linux_image_project = "suse-sap-cloud"
    
        primary_instance_name = "example-ha-vm1"
        primary_zone = "us-central1-a"
    
        secondary_instance_name = "example-ha-vm2"
        secondary_zone = "us-central1-c"
        # ...
        sap_hana_deployment_bucket = "my-hana-bucket"
        sap_hana_sid = "HA1"
        sap_hana_instance_number = 00
        sap_hana_sidadm_password = "TempPa55word"
        sap_hana_system_password = "TempPa55word"
        # ...
        sap_vip = 10.0.0.100
        primary_instance_group_name = ig-example-ha-vm1
        secondary_instance_group_name = ig-example-ha-vm2
        loadbalancer_name = lb-ha1
        # ...
        network_tags = hana-ha-ntwk-tag
        service_account = "sap-deploy-example@example-project-123456.iam.gserviceaccount.com"
        primary_static_ip = "10.0.0.1"
        secondary_static_ip = "10.0.0.2"
        enable_fast_restart = true
        # ...
        }
  6. 初始化目前的工作目錄,並下載 Google Cloud的 Terraform 供應器外掛程式和模組檔案:

    terraform init

    terraform init 指令會為其他 Terraform 指令準備工作目錄。

    如要強制重新整理工作目錄中的提供者外掛程式和設定檔,請指定 --upgrade 標記。如果省略 --upgrade 標記,且您未在工作目錄中進行任何變更,Terraform 會使用本機快取的副本,即使 source 網址中指定了 latest 也一樣。

    terraform init --upgrade 
  7. 視需要建立 Terraform 執行計畫:

    terraform plan

    terraform plan 指令會顯示目前設定所需的變更。如果您略過這個步驟,terraform apply 指令會自動建立新企劃書,並提示您核准。

  8. 套用執行計畫:

    terraform apply

    出現核准動作的提示時,請輸入 yes

    terraform apply 指令會設定 Google Cloud 基礎架構,然後將控制權交給指令碼,以便根據 terraform 設定檔中定義的引數設定 HA 叢集,並安裝 SAP HANA。

    在 Terraform 控制時,系統會將狀態訊息寫入 Cloud Shell。指令碼叫用後,系統會將狀態訊息寫入 Logging,並在 Google Cloud 主控台中顯示,如「檢查記錄」一節所述。

驗證 HANA HA 系統的部署作業

驗證 SAP HANA HA 叢集包含多種不同程序:

  • 檢查記錄
  • 檢查 VM 和 SAP HANA 安裝項目的配置
  • 檢查叢集設定
  • 檢查負載平衡器和執行個體群組的健康狀態
  • 使用 SAP HANA Studio 檢查 SAP HANA 系統
  • 執行容錯移轉測試

檢查記錄

  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. 開啟 Cloud Shell。

        前往 Cloud Shell

      3. 前往工作目錄並刪除部署,清除安裝失敗的 VM 與永久磁碟:

        terraform destroy

        出現是否核准該動作的提示時,請輸入 yes

      4. 重新執行部署。

檢查 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。確保畫面顯示 /hana 目錄的輸出內容,例如 /hana/data

    RHEL

    [root@example-ha-vm1 ~]# df -h
    Filesystem                        Size  Used Avail Use% Mounted on
    devtmpfs                          126G     0  126G   0% /dev
    tmpfs                             126G   54M  126G   1% /dev/shm
    tmpfs                             126G   25M  126G   1% /run
    tmpfs                             126G     0  126G   0% /sys/fs/cgroup
    /dev/sda2                          30G  5.4G   25G  18% /
    /dev/sda1                         200M  6.9M  193M   4% /boot/efi
    /dev/mapper/vg_hana-shared        251G   52G  200G  21% /hana/shared
    /dev/mapper/vg_hana-sap            32G  477M   32G   2% /usr/sap
    /dev/mapper/vg_hana-data          426G  9.8G  417G   3% /hana/data
    /dev/mapper/vg_hana-log           125G  7.0G  118G   6% /hana/log
    /dev/mapper/vg_hanabackup-backup  512G  9.3G  503G   2% /hanabackup
    tmpfs                              26G     0   26G   0% /run/user/900
    tmpfs                              26G     0   26G   0% /run/user/899
    tmpfs                              26G     0   26G   0% /run/user/1003

    SLES

    example-ha-vm1:~ # df -h
    Filesystem                        Size  Used Avail Use% Mounted on
    devtmpfs                          126G  8.0K  126G   1% /dev
    tmpfs                             189G   54M  189G   1% /dev/shm
    tmpfs                             126G   34M  126G   1% /run
    tmpfs                             126G     0  126G   0% /sys/fs/cgroup
    /dev/sda3                          30G  5.4G   25G  18% /
    /dev/sda2                          20M  2.9M   18M  15% /boot/efi
    /dev/mapper/vg_hana-shared        251G   50G  202G  20% /hana/shared
    /dev/mapper/vg_hana-sap            32G  281M   32G   1% /usr/sap
    /dev/mapper/vg_hana-data          426G  8.0G  418G   2% /hana/data
    /dev/mapper/vg_hana-log           125G  4.3G  121G   4% /hana/log
    /dev/mapper/vg_hanabackup-backup  512G  6.4G  506G   2% /hanabackup
    tmpfs                              26G     0   26G   0% /run/user/473
    tmpfs                              26G     0   26G   0% /run/user/900
    tmpfs                              26G     0   26G   0% /run/user/0
    tmpfs                              26G     0   26G   0% /run/user/1003
  4. 輸入適用於您作業系統的狀態指令,即可查看新叢集的狀態:

    RHEL

    pcs status

    SLES

    crm status

    輸出結果類似下列範例,其中兩個 VM 執行個體都已啟動,且 example-ha-vm1 是處於活動狀態的主要執行個體:

    RHEL

    [root@example-ha-vm1 ~]# pcs status
    Cluster name: hacluster
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm1 (version 2.0.3-5.el8_2.4-4b1f869f0f) - partition with quorum
      * Last updated: Wed Jul  7 23:05:11 2021
      * Last change:  Wed Jul  7 23:04:43 2021 by root via crm_attribute on example-ha-vm2
      * 2 nodes configured
      * 8 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1      (stonith:fence_gce):    Started example-ha-vm2
      * STONITH-example-ha-vm2      (stonith:fence_gce):    Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_healthcheck_HA1       (service:haproxy):      Started example-ha-vm2
        * rsc_vip_HA1_00    (ocf::heartbeat:IPaddr2):       Started example-ha-vm2
      * Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00] (promotable):
        * Masters: [ example-ha-vm2 ]
        * Slaves: [ example-ha-vm1 ]
    
    Failed Resource Actions:
      * rsc_healthcheck_HA1_start_0 on example-ha-vm1 'error' (1): call=29, status='complete', exitreason='', last-rc-change='2021-07-07 21:07:35Z', queued=0ms, exec=2097ms
      * SAPHana_HA1_00_monitor_61000 on example-ha-vm1 'not running' (7): call=44, status='complete', exitreason='', last-rc-change='2021-07-07 21:09:49Z', queued=0ms, exec=0ms
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

    SLES for SAP 15 SP5 或更早版本

    example-ha-vm1:~ # crm status
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm1 (version 2.0.4+20200616.2deceaa3a-3.9.1-2.0.4+20200616.2deceaa3a) - partition with quorum
      * Last updated: Wed Jul  7 22:57:59 2021
      * Last change:  Wed Jul  7 22:57:03 2021 by root via crm_attribute on example-ha-vm1
      * 2 nodes configured
      * 8 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1      (stonith:fence_gce):   Started example-ha-vm2
      * STONITH-example-ha-vm2      (stonith:fence_gce):   Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_vip_int-primary       (ocf::heartbeat:IPaddr2):        Started example-ha-vm1
        * rsc_vip_hc-primary        (ocf::heartbeat:anything):       Started example-ha-vm1
      * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        * Masters: [ example-ha-vm1 ]
        * Slaves: [ example-ha-vm2 ]

    SLES for SAP 15 SP6 以上版本

    example-ha-vm1:~ # crm status
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm1 (version 2.1.7+20231219.0f7f88312-150600.6.3.1-2.1.7+20231219.0f7f88312) - partition with quorum
      * Last updated: Mon Oct  7 22:57:59 2024
      * Last change:  Mon Oct  7 22:57:03 2024 by root via crm_attribute on example-ha-vm1
      * 2 nodes configured
      * 10 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1      (stonith:fence_gce):   Started example-ha-vm2
      * STONITH-example-ha-vm2      (stonith:fence_gce):   Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_vip_int-primary       (ocf::heartbeat:IPaddr2):        Started example-ha-vm1
        * rsc_vip_hc-primary        (ocf::heartbeat:anything):       Started example-ha-vm1
      * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: cln_SAPHanaFileSystem_HA1_HDB00 [rsc_SAPHanaFileSystem_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: mst_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        * Masters: [ example-ha-vm1 ]
        * Slaves: [ example-ha-vm2 ]
  5. 將以下指令中的 SID_LC 替換為您在 sap_hana_ha.tf 檔案中指定的 sap_hana_sid 值,以變更 SAP 管理員使用者。SID_LC 值必須為小寫。

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

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

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

檢查叢集設定

請檢查叢集的參數設定。請檢查叢集軟體顯示的設定,以及叢集設定檔中的參數設定。將您的設定與下方範例中的設定進行比較,這些設定是由本指南所使用的自動化動作指令碼建立。

按一下所用作業系統的分頁。

RHEL

  1. 顯示叢集資源設定:

    pcs config show

    以下範例顯示在 RHEL 8.1 以上版本中,由自動化指令碼建立的資源設定。

    如果您執行的是 RHEL 7.7 或更早版本,資源定義 Clone: SAPHana_HA1_00-clone 就不會包含 Meta Attrs: promotable=true

     Cluster Name: hacluster
     Corosync Nodes:
      example-rha-vm1 example-rha-vm2
     Pacemaker Nodes:
      example-rha-vm1 example-rha-vm2
    
     Resources:
      Group: g-primary
       Resource: rsc_healthcheck_HA1 (class=service type=haproxy)
        Operations: monitor interval=10s timeout=20s (rsc_healthcheck_HA1-monitor-interval-10s)
                    start interval=0s timeout=100 (rsc_healthcheck_HA1-start-interval-0s)
                    stop interval=0s timeout=100 (rsc_healthcheck_HA1-stop-interval-0s)
       Resource: rsc_vip_HA1_00 (class=ocf provider=heartbeat type=IPaddr2)
        Attributes: cidr_netmask=32 ip=10.128.15.100 nic=eth0
        Operations: monitor interval=3600s timeout=60s (rsc_vip_HA1_00-monitor-interval-3600s)
                    start interval=0s timeout=20s (rsc_vip_HA1_00-start-interval-0s)
                    stop interval=0s timeout=20s (rsc_vip_HA1_00-stop-interval-0s)
      Clone: SAPHanaTopology_HA1_00-clone
       Meta Attrs: clone-max=2 clone-node-max=1 interleave=true
       Resource: SAPHanaTopology_HA1_00 (class=ocf provider=heartbeat type=SAPHanaTopology)
        Attributes: InstanceNumber=00 SID=HA1
        Operations: methods interval=0s timeout=5 (SAPHanaTopology_HA1_00-methods-interval-0s)
                    monitor interval=10 timeout=600 (SAPHanaTopology_HA1_00-monitor-interval-10)
                    reload interval=0s timeout=5 (SAPHanaTopology_HA1_00-reload-interval-0s)
                    start interval=0s timeout=600 (SAPHanaTopology_HA1_00-start-interval-0s)
                    stop interval=0s timeout=300 (SAPHanaTopology_HA1_00-stop-interval-0s)
      Clone: SAPHana_HA1_00-clone
       Meta Attrs: promotable=true
       Resource: SAPHana_HA1_00 (class=ocf provider=heartbeat type=SAPHana)
        Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 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_00-demote-interval-0s)
                    methods interval=0s timeout=5 (SAPHana_HA1_00-methods-interval-0s)
                    monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_00-monitor-interval-61)
                    monitor interval=59 role=Master timeout=700 (SAPHana_HA1_00-monitor-interval-59)
                    promote interval=0s timeout=3600 (SAPHana_HA1_00-promote-interval-0s)
                    reload interval=0s timeout=5 (SAPHana_HA1_00-reload-interval-0s)
                    start interval=0s timeout=3600 (SAPHana_HA1_00-start-interval-0s)
                    stop interval=0s timeout=3600 (SAPHana_HA1_00-stop-interval-0s)
    
     Stonith Devices:
      Resource: STONITH-example-rha-vm1 (class=stonith type=fence_gce)
       Attributes: pcmk_delay_max=30 pcmk_monitor_retries=4 pcmk_reboot_timeout=300 port=example-rha-vm1 project=example-project-123456 zone=us-central1-a
       Operations: monitor interval=300s timeout=120s (STONITH-example-rha-vm1-monitor-interval-300s)
                   start interval=0 timeout=60s (STONITH-example-rha-vm1-start-interval-0)
      Resource: STONITH-example-rha-vm2 (class=stonith type=fence_gce)
       Attributes: pcmk_monitor_retries=4 pcmk_reboot_timeout=300 port=example-rha-vm2 project=example-project-123456 zone=us-central1-c
       Operations: monitor interval=300s timeout=120s (STONITH-example-rha-vm2-monitor-interval-300s)
                   start interval=0 timeout=60s (STONITH-example-rha-vm2-start-interval-0)
     Fencing Levels:
    
     Location Constraints:
       Resource: STONITH-example-rha-vm1
         Disabled on: example-rha-vm1 (score:-INFINITY) (id:location-STONITH-example-rha-vm1-example-rha-vm1--INFINITY)
       Resource: STONITH-example-rha-vm2
         Disabled on: example-rha-vm2 (score:-INFINITY) (id:location-STONITH-example-rha-vm2-example-rha-vm2--INFINITY)
     Ordering Constraints:
       start SAPHanaTopology_HA1_00-clone then start SAPHana_HA1_00-clone (kind:Mandatory) (non-symmetrical) (id:order-SAPHanaTopology_HA1_00-clone-SAPHana_HA1_00-clone-mandatory)
     Colocation Constraints:
       g-primary with SAPHana_HA1_00-clone (score:4000) (rsc-role:Started) (with-rsc-role:Master) (id:colocation-g-primary-SAPHana_HA1_00-clone-4000)
     Ticket Constraints:
    
     Alerts:
      No alerts defined
    
     Resources Defaults:
      migration-threshold=5000
      resource-stickiness=1000
     Operations Defaults:
      timeout=600s
    
     Cluster Properties:
      cluster-infrastructure: corosync
      cluster-name: hacluster
      dc-version: 2.0.2-3.el8_1.2-744a30d655
      have-watchdog: false
      stonith-enabled: true
      stonith-timeout: 300s
    
     Quorum:
       Options:
    
  2. 顯示叢集設定檔 corosync.conf

    cat /etc/corosync/corosync.conf

    以下範例顯示自動化指令碼為 RHEL 8.1 以上版本設定的參數。

    如果您使用的是 RHEL 7.7 或更早版本,transport: 的值為 udpu,而非 knet

     totem {
         version: 2
         cluster_name: hacluster
         transport: knet
         join: 60
         max_messages: 20
         token: 20000
         token_retransmits_before_loss_const: 10
         crypto_cipher: aes256
         crypto_hash: sha256
     }
    
     nodelist {
         node {
             ring0_addr: example-rha-vm1
             name: example-rha-vm1
             nodeid: 1
         }
    
         node {
             ring0_addr: example-rha-vm2
             name: example-rha-vm2
             nodeid: 2
         }
     }
    
     quorum {
         provider: corosync_votequorum
         two_node: 1
     }
    
     logging {
         to_logfile: yes
         logfile: /var/log/cluster/corosync.log
         to_syslog: yes
         timestamp: on
     }
    

SLES for SAP 15 SP5 或更早版本

  1. 顯示叢集資源設定:

    crm config show

    本指南使用的自動化指令碼會建立下列範例所示的資源設定:

     node 1: example-ha-vm1 \
             attributes hana_ha1_op_mode=logreplay lpa_ha1_lpt=1635380335 hana_ha1_srmode=syncmem hana_ha1_vhost=example-ha-vm1 hana_ha1_remoteHost=example-ha-vm2 hana_ha1_site=example-ha-vm1
     node 2: example-ha-vm2 \
             attributes lpa_ha1_lpt=30 hana_ha1_op_mode=logreplay hana_ha1_vhost=example-ha-vm2 hana_ha1_site=example-ha-vm2 hana_ha1_srmode=syncmem hana_ha1_remoteHost=example-ha-vm1
     primitive STONITH-example-ha-vm1 stonith:fence_gce \
             op monitor interval=300s timeout=120s \
             op start interval=0 timeout=60s \
             params port=example-ha-vm1 zone="us-central1-a" project="example-project-123456" pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30
     primitive STONITH-example-ha-vm2 sstonith:fence_gce \
             op monitor interval=300s timeout=120s \
             op start interval=0 timeout=60s \
             params port=example-ha-vm2 zone="us-central1-c" project="example-project-123456" pcmk_reboot_timeout=300 pcmk_monitor_retries=4
     primitive rsc_SAPHanaTopology_HA1_HDB00 ocf:suse:SAPHanaTopology \
             operations $id=rsc_sap2_HA1_HDB00-operations \
             op monitor interval=10 timeout=600 \
             op start interval=0 timeout=600 \
             op stop interval=0 timeout=300 \
             params SID=HA1 InstanceNumber=00
     primitive rsc_SAPHana_HA1_HDB00 ocf:suse:SAPHana \
             operations $id=rsc_sap_HA1_HDB00-operations \
             op start interval=0 timeout=3600 \
             op stop interval=0 timeout=3600 \
             op promote interval=0 timeout=3600 \
             op demote interval=0 timeout=3600 \
             op monitor interval=60 role=Master timeout=700 \
             op monitor interval=61 role=Slave timeout=700 \
             params SID=HA1 InstanceNumber=00 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true
     primitive rsc_vip_hc-primary anything \
             params binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:60000,backlog=10,fork,reuseaddr /dev/null" \
             op monitor timeout=20s interval=10s \
             op_params depth=0
     primitive rsc_vip_int-primary IPaddr2 \
             params ip=10.128.15.101 cidr_netmask=32 nic=eth0 \
             op monitor interval=3600s timeout=60s
     group g-primary rsc_vip_int-primary rsc_vip_hc-primary meta resource-stickiness=0
     ms msl_SAPHana_HA1_HDB00 rsc_SAPHana_HA1_HDB00 \
             meta notify=true clone-max=2 clone-node-max=1 target-role=Started interleave=true
     clone cln_SAPHanaTopology_HA1_HDB00 rsc_SAPHanaTopology_HA1_HDB00 \
             meta clone-node-max=1 target-role=Started interleave=true
     location LOC_STONITH_example-ha-vm1 STONITH-example-ha-vm1 -inf: example-ha-vm1
     location LOC_STONITH_example-ha-vm2 STONITH-example-ha-vm2 -inf: example-ha-vm2
     colocation col_saphana_ip_HA1_HDB00 4000: g-primary:Started msl_SAPHana_HA1_HDB00:Master
     order ord_SAPHana_HA1_HDB00 Optional: cln_SAPHanaTopology_HA1_HDB00 msl_SAPHana_HA1_HDB00
     property cib-bootstrap-options: \
             have-watchdog=false \
             dc-version="1.1.24+20210811.f5abda0ee-3.18.1-1.1.24+20210811.f5abda0ee" \
             cluster-infrastructure=corosync \
             cluster-name=hacluster \
             maintenance-mode=false \
             stonith-timeout=300s \
             stonith-enabled=true
     rsc_defaults rsc-options: \
             resource-stickiness=1000 \
             migration-threshold=5000
     op_defaults op-options: \
             timeout=600
    
  2. 顯示叢集設定檔 corosync.conf

    cat /etc/corosync/corosync.conf

    本指南使用的自動化指令碼會在 corosync.conf 檔案中指定參數設定,如以下範例所示:

     totem {
       version: 2
       secauth: off
       crypto_hash: sha1
       crypto_cipher: aes256
       cluster_name: hacluster
       clear_node_high_bit: yes
       token: 20000
       token_retransmits_before_loss_const: 10
       join: 60
       max_messages: 20
       transport: udpu
       interface {
         ringnumber: 0
         bindnetaddr: 10.128.1.63
         mcastport: 5405
         ttl: 1
       }
     }
     logging {
       fileline: off
       to_stderr: no
       to_logfile: no
       logfile: /var/log/cluster/corosync.log
       to_syslog: yes
       debug: off
       timestamp: on
       logger_subsys {
         subsys: QUORUM
         debug: off
       }
     }
     nodelist {
       node {
         ring0_addr: example-ha-vm1
         nodeid: 1
       }
       node {
         ring0_addr: example-ha-vm2
         nodeid: 2
       }
     }
     quorum {
       provider: corosync_votequorum
       expected_votes: 2
       two_node: 1
     }
    

SLES for SAP 15 SP6 以上版本

  1. 顯示叢集資源設定:

    crm config show

    本指南使用的自動化指令碼會建立下列範例所示的資源設定:

    node 1: example-ha-vm1 \
            attributes hana_ha1_vhost=example-ha-vm1 hana_ha1_site=example-ha-vm1
    node 2: example-ha-vm2 \
            attributes hana_ha1_vhost=example-ha-vm2 hana_ha1_site=example-ha-vm2
    primitive STONITH-example-ha-vm1 stonith:fence_gce \
            op monitor interval=300s timeout=120s \
            op start interval=0 timeout=60s \
            params port=example-ha-vm1 zone="us-central1-a" project="example-project-123456" pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30
    primitive STONITH-example-ha-vm2 sstonith:fence_gce \
            op monitor interval=300s timeout=120s \
            op start interval=0 timeout=60s \
            params port=example-ha-vm2 zone="us-central1-c" project="example-project-123456" pcmk_reboot_timeout=300 pcmk_monitor_retries=4
    primitive rsc_SAPHanaTopology_HA1_HDB00 ocf:suse:SAPHanaTopology \
            operations $id=rsc_sap2_HA1_HDB00-operations \
            op monitor interval=10 timeout=600 \
            op start interval=0 timeout=600 \
            op stop interval=0 timeout=300 \
            params SID=HA1 InstanceNumber=00
    primitive rsc_SAPHanaFileSystem_HA1_HDB00 ocf:suse:SAPHanaFilesystem \
            operations $id=rsc_sap3_HA1_HDB00-operations \
            op monitor interval=10 timeout=600 \
            op start interval=0 timeout=600 \
            op stop interval=0 timeout=300 \
            params SID=HA1 InstanceNumber=00
    primitive rsc_SAPHana_HA1_HDB00 ocf:suse:SAPHanaController \
            operations $id=rsc_sap_HA1_HDB00-operations \
            op start interval=0 timeout=3600 \
            op stop interval=0 timeout=3600 \
            op promote interval=0 timeout=3600 \
            op demote interval=0 timeout=3600 \
            op monitor interval=60 role=Promoted timeout=700 \
            op monitor interval=61 role=Unpromoted timeout=700 \
            params SID=HA1 InstanceNumber=00 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true
    primitive rsc_vip_hc-primary anything \
            params binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:60000,backlog=10,fork,reuseaddr /dev/null" \
            op monitor timeout=20s interval=10s \
            op_params depth=0
    primitive rsc_vip_int-primary IPaddr2 \
            params ip=10.128.15.101 cidr_netmask=32 nic=eth0 \
            op monitor interval=3600s timeout=60s
    group g-primary rsc_vip_int-primary rsc_vip_hc-primary meta resource-stickiness=0
    clone mst_SAPHana_HA1_HDB00 rsc_SAPHana_HA1_HDB00 \
            meta clone-node-max=1 promotable=true interleave=true
    clone cln_SAPHanaFileSystem_HA1_HDB00
            rsc_SAPHanaFileSystem_HA1_HDB00 \
            meta clone-node-max=1 interleave=true
    clone cln_SAPHanaTopology_HA1_HDB00 rsc_SAPHanaTopology_HA1_HDB00 \
            meta clone-node-max=1 interleave=true
    location LOC_STONITH_example-ha-vm1 STONITH-example-ha-vm1 -inf: example-ha-vm1
    location LOC_STONITH_example-ha-vm2 STONITH-example-ha-vm2 -inf: example-ha-vm2
    colocation col_saphana_ip_HA1_HDB00 4000: g-primary:Started mst_SAPHana_HA1_HDB00:Promoted
    order ord_SAPHana_HA1_HDB00 Optional: cln_SAPHanaTopology_HA1_HDB00 mst_SAPHana_HA1_HDB00
    property cib-bootstrap-options: \
            have-watchdog=false \
            dc-version="1.1.24+20210811.f5abda0ee-3.18.1-1.1.24+20210811.f5abda0ee" \
            cluster-infrastructure=corosync \
            cluster-name=hacluster \
            maintenance-mode=false \
            stonith-timeout=300s \
            stonith-enabled=true
    rsc_defaults rsc-options: \
            resource-stickiness=1000 \
            migration-threshold=5000
    op_defaults op-options: \
        timeout=600
    
  2. 顯示叢集設定檔 corosync.conf

    cat /etc/corosync/corosync.conf

    本指南使用的自動化指令碼會在 corosync.conf 檔案中指定參數設定,如以下範例所示:

     totem {
       version: 2
       secauth: off
       crypto_hash: sha1
       crypto_cipher: aes256
       cluster_name: hacluster
       clear_node_high_bit: yes
       token: 20000
       token_retransmits_before_loss_const: 10
       join: 60
       max_messages: 20
       transport: udpu
       interface {
         ringnumber: 0
         bindnetaddr: 10.128.1.63
         mcastport: 5405
         ttl: 1
       }
     }
     logging {
       fileline: off
       to_stderr: no
       to_logfile: no
       logfile: /var/log/cluster/corosync.log
       to_syslog: yes
       debug: off
       timestamp: on
       logger_subsys {
         subsys: QUORUM
         debug: off
       }
     }
     nodelist {
       node {
         ring0_addr: example-ha-vm1
         nodeid: 1
       }
       node {
         ring0_addr: example-ha-vm2
         nodeid: 2
       }
     }
     quorum {
       provider: corosync_votequorum
       expected_votes: 2
       two_node: 1
     }
    

檢查負載平衡器和執行個體群組的健康狀態

如要確認負載平衡器和健康狀態檢查設定正確無誤,請在 Google Cloud 主控台中檢查負載平衡器和執行個體群組。

  1. 在 Google Cloud 控制台中開啟「負載平衡」頁面:

    前往 Cloud Load Balancing

  2. 在負載平衡器清單中,確認已為高可用性叢集建立負載平衡器。

  3. 在「Load balancer details」(負載平衡器詳細資料) 頁面的「Backend」(後端) 區段中,確認「Instance group」(執行個體群組) 下方「Healthy」(健康狀態良好) 資料欄中的值是否為「1/1」和「0/1」。容錯移轉後,健康狀態指標「1/1」會切換至新的有效執行個體群組。

    顯示負載平衡器詳細資料頁面,其中「1/1」代表有效的主要執行個體群組,「0/1」代表無效的次要執行個體群組。

使用 SAP HANA Studio 檢查 SAP HANA 系統

您可以使用 SAP HANA 主控台或 SAP HANA Studio 監控及管理高可用性叢集中的 SAP HANA 系統。

  1. 使用 SAP HANA Studio 連線至 HANA 系統。定義連線時請指定下列值:

    • 在「Specify System」(指定系統) 面板上,將浮動 IP 位址指定為「主機名稱」。
    • 在「連線屬性」面板中,為資料庫使用者驗證指定您在 sap_hana_ha.tf 檔案中為 sap_hana_system_password 引數指定的資料庫超級使用者名稱和密碼。

    如需 SAP 提供的 SAP HANA Studio 安裝相關資訊,請參閱 SAP HANA 安裝與更新指南

  2. SAP HANA Studio 連線至 HANA HA 系統後,按兩下視窗左側導覽窗格中的系統名稱,即可查看系統總覽。

    SAP HANA Studio 中導覽窗格的螢幕擷圖

  3. 在「Overview」(總覽) 分頁的「General Information」(一般資訊) 下方確認以下事項:

    • 「Operational Status」(運作狀態) 顯示「All services started」(所有裝置已啟動)。
    • 「System Replication Status」(系統複製狀態) 顯示「All services are active and in sync」(所有服務皆啟用中且保持同步)。

    SAP HANA Studio 中「Overview」(總覽) 分頁的螢幕擷圖

  4. 按一下「General Information」(一般資訊) 下方的 [System Replication Status] (系統複製狀態) 連結以查看複寫模式。「System Replication」(系統複製) 分頁的「REPLICATION_MODE」(複寫模式) 欄位的 SYNCMEM 即表示已同步複製。

    SAP HANA Studio 中「System Replication Status」(系統複製狀態) 分頁的螢幕擷圖

清除並重試部署

如果先前各節中的任何部署驗證步驟顯示安裝失敗,則必須撤銷部署,並完成下列步驟重試:

  1. 解決所有錯誤,確保部署作業不會因相同原因再次失敗。如要瞭解如何檢查記錄或解決配額相關錯誤,請參閱「檢查記錄」。

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

    開啟 Cloud Shell

  3. 前往包含您用於此部署作業的 Terraform 設定檔的目錄。

  4. 執行下列指令,刪除部署作業中的所有資源:

    terraform destroy

    出現是否核准該動作的提示時,請輸入 yes

  5. 請按照本指南前述的操作說明重試部署作業。

執行容錯移轉測試

如要執行容錯移轉測試,請完成下列步驟:

  1. 使用 SSH 連線至主要 VM。按一下每個 VM 執行個體的 SSH 按鈕,即可從 Compute Engine 的 「VM instances」(VM 執行個體) 頁面連線,或者可以使用您偏好的 SSH 方法。

  2. 在命令提示字元中,輸入下列指令:

    sudo ip link set eth0 down

    ip link set eth0 down 指令會藉由分割主要主機的通訊功能觸發容錯移轉。

  3. 使用 SSH 重新連線至任一主機,並切換到超級使用者。

  4. 確認主要主機已在包含次要主機的 VM 中啟用。自動重新啟動功能會在叢集中啟用,因此已停止的主機會重新啟動,並假設為次要主機的角色。

    RHEL

    pcs status

    SLES

    crm status

    以下範例顯示每個主機上的角色已切換。

    RHEL

    [root@example-ha-vm1 ~]# pcs status
    Cluster name: hacluster
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm1 (version 2.0.3-5.el8_2.3-4b1f869f0f) - partition with quorum
      * Last updated: Fri Mar 19 21:22:07 2021
      * Last change:  Fri Mar 19 21:21:28 2021 by root via crm_attribute on example-ha-vm2
      * 2 nodes configured
      * 8 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1  (stonith:fence_gce):    Started example-ha-vm2
      * STONITH-example-ha-vm2  (stonith:fence_gce):    Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_healthcheck_HA1   (service:haproxy):  Started example-ha-vm2
        * rsc_vip_HA1_00    (ocf::heartbeat:IPaddr2):   Started example-ha-vm2
      * Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00] (promotable):
        * Masters: [ example-ha-vm2 ]
        * Slaves: [ example-ha-vm1 ]
    

    SLES for SAP 15 SP5 或更早版本

    example-ha-vm2:~ #
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm2 (version 2.0.4+20200616.2deceaa3a-3.9.1-2.0.4+20200616.2deceaa3a) - partition with quorum
      * Last updated: Thu Jul  8 17:33:44 2021
      * Last change:  Thu Jul  8 17:33:07 2021 by root via crm_attribute on example-ha-vm2
      * 2 nodes configured
      * 8 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1      (stonith:fence_gce):   Started example-ha-vm2
      * STONITH-example-ha-vm2      (stonith:fence_gce):   Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_vip_int-primary       (ocf::heartbeat:IPaddr2):        Started example-ha-vm2
        * rsc_vip_hc-primary        (ocf::heartbeat:anything):       Started example-ha-vm2
      * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        * Masters: [ example-ha-vm2 ]
        * Slaves: [ example-ha-vm1 ]

    SLES for SAP 15 SP6 以上版本

    example-ha-vm2:~ #
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-ha-vm2 (version 2.1.7+20231219.0f7f88312-150600.6.3.1-2.1.7+20231219.0f7f88312) - partition with quorum
      * Last updated: Tue Oct  8 21:47:19 2024
      * Last change:  Tue Oct  8 21:47:13 2024 by root via crm_attribute on example-ha-vm2
      * 2 nodes configured
      * 10 resource instances configured
    
    Node List:
      * Online: [ example-ha-vm1 example-ha-vm2 ]
    
    Full List of Resources:
      * STONITH-example-ha-vm1      (stonith:fence_gce):   Started example-ha-vm2
      * STONITH-example-ha-vm2      (stonith:fence_gce):   Started example-ha-vm1
      * Resource Group: g-primary:
        * rsc_vip_int-primary       (ocf::heartbeat:IPaddr2):        Started example-ha-vm2
        * rsc_vip_hc-primary        (ocf::heartbeat:anything):       Started example-ha-vm2
      * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: cln_SAPHanaFileSystem_HA1_HDB00 [rsc_SAPHanaFileSystem_HA1_HDB00]:
        * Started: [ example-ha-vm1 example-ha-vm2 ]
      * Clone Set: mst_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        * Masters: [ example-ha-vm2 ]
        * Slaves: [ example-ha-vm1 ]
  5. 在控制台的「Load Balancer details」頁面中,確認新的有效主要執行個體在「Healthy」資料欄中顯示「1/1」。視需要重新整理頁面。

    前往 Cloud Load Balancing

    例如:

    顯示負載平衡器詳細資料頁面,其中「ig-example-ha-vm2」執行個體在「Healthy」欄中顯示「1/1」。

  6. 在 SAP HANA Studio 中,按兩下導覽窗格中的系統項目以重新整理系統資訊,確定仍與系統保持連線。

  7. 按一下 [System Replication Status] (系統複製狀態) 連結,確認主要主機和次要主機皆已切換主機並處於啟用狀態。

    SAP HANA Studio 中「System Replication Status」(系統複製狀態) 分頁的螢幕擷圖

驗證 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 代理程式監控 HA 叢集,請務必遵循「代理程式高可用性設定」中的指示。

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

連線至 SAP HANA

請注意,由於以下指示並沒有為 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 資料庫。

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

自 SAP HANA 2.0 SPS1 起,您可以在 Pacemaker 叢集中設定 HANA 主動/主動 (啟用讀取)。如需操作說明,請參閱:

執行部署後工作

使用 SAP HANA 執行個體之前,建議您執行下列部署後步驟。詳情請參閱 SAP HANA 安裝與更新指南

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

  2. 使用最新的修補程式更新 SAP HANA 軟體。

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

  4. 安裝其他任何元件,例如 Application Function Libraries (AFL) 或 Smart Data Access (SDA)。

  5. 設定並備份新的 SAP HANA 資料庫。詳情請參閱 SAP HANA 作業指南

評估 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 建立及執行評估作業,請參閱「建立並執行評估作業」。

後續步驟