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

本指南說明如何為 SAP HANA 向外擴充系統部署並手動設定 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 叢集,該系統使用內部傳遞網路負載平衡器來管理虛擬 IP (VIP) 位址。 Google Cloud

本指南包含下列步驟:

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

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

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

本指南部署的系統

按照本指南的說明,您將部署多節點 SAP HANA HA 系統,並設定為全區域備援,其中額外的執行個體會充當多數決策者 (也稱為平手節點),確保叢集法定人數在遺失一個區域時維持不變。

最終部署作業包含下列資源:

  • 主要和次要網站,每個網站都有對應的可用區。
  • 兩個已設定同步複製功能的網站。
  • 單一運算執行個體,用於擔任多數決機制。
  • 具備圍欄機制的 Pacemaker 高可用性叢集資源管理員。
  • 用於 SAP HANA 資料和記錄檔磁碟區的永久磁碟,已連結至每個 SAP HANA 執行個體。

適用於多節點 SAP HANA 向外擴充系統的高可用性 Linux 叢集總覽

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

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

事前準備

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

  • 您已閱讀 SAP HANA 規劃指南SAP HANA 高可用性規劃指南
  • 您或您的機構擁有 Google Cloud 帳戶,且您已針對 SAP HANA 部署建立專案。如要瞭解如何建立Google Cloud 帳戶和專案,請參閱 SAP HANA 部署指南中的設定 Google 帳戶一文。
  • 如果您希望 SAP 工作負載在符合資料落地、存取權控管、支援人員或法規規定的情況下執行,則必須建立必要的 Assured Workloads 資料夾。詳情請參閱「SAP on Google Cloud的符合性和主權控管措施」。
  • SAP HANA 安裝媒體儲存在可在部署專案和地區中使用的 Cloud Storage 值區中。如要瞭解如何將 SAP HANA 安裝媒體上傳至 Cloud Storage 值區,請參閱「SAP HANA 部署指南」中的下載 SAP HANA

  • 如果專案中繼資料中已啟用 OS 登入,您必須暫時停用 OS 登入功能,直到部署作業完成為止。為了部署目的,這個程序會在執行個體中繼資料中設定 SSH 金鑰。啟用 OS 登入功能後,系統會停用中繼資料型安全殼層金鑰設定,這項部署作業就會失敗。部署完成後,您可以再次啟用 OS 登入功能。

    如需詳細資訊,請參閱:

  • 如果您使用VPC 內部 DNS,專案中繼資料中的 vmDnsSetting 變數值必須為 GlobalOnlyZonalPreferred,才能在各區域中解析節點名稱。vmDnsSetting 的預設設定為 ZonalOnly。詳情請參閱:

  • 您擁有 NFS 解決方案 (例如代管的 Filestore 解決方案),可在向外擴充 SAP HANA 系統的主機之間共用 SAP HANA /hana/shared/hanabackup 磁碟區。如要部署 Filestore NFS 伺服器,請參閱「建立執行個體」一文。

    • 請注意,主網站和次要網站必須有權存取各自的專屬 NFS 路徑,才能避免資料覆寫。如要使用單一 Filestore 執行個體,您必須將部署作業設定為使用不同的子目錄做為掛載路徑。

建立網路

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

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

在部署期間,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 建立連入連線後,系統會允許該連線上雙向的流量。

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

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

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

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

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

部署 VM 和 SAP HANA

本指南會說明如何使用 Google Cloud 提供的 Terraform 設定檔,部署下列項目:

  • 兩個相符的 SAP HANA 系統,每個系統都有兩個或更多 VM 執行個體。
  • 單一多數製造者執行個體,也稱為平手節點,可確保叢集過半數節點在一個區域損壞時維持運作。

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

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

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

以下操作說明使用的是 Cloud Shell,不過這些步驟通常也適用於已安裝 Terraform 並使用 Google 供應器進行設定的本地端終端機。

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

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

    前往配額頁面

  2. 開啟 Cloud Shell 或本機終端機。

    開啟 Cloud Shell

  3. 在 Cloud Shell 或終端機中執行以下指令,將 manual_sap_hana_scaleout_ha.tf 設定檔下載到工作目錄:

    $ wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana_ha/terraform/manual_sap_hana_scaleout_ha.tf
  4. 在 Cloud Shell 程式碼編輯器中開啟 manual_sap_hana_scaleout_ha.tf 檔案;如果您使用的是終端機,請在您選擇的文字編輯器中開啟檔案。

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

  5. manual_sap_hana_scaleout_ha.tf 檔案中,針對 sap_hana_primarysap_hana_secondary 更新引數值,方法是將雙引號內的內容替換為安裝作業的值。下表說明引數。

    引數 資料類型 說明
    source 字串

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

    manual_sap_hana_scaleout_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

    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_scaleout_nodes 整數 指定在擴展系統中所需的工作站主機數量。如要部署外推系統,您至少需要一個 worker 主機。

    Terraform 會建立工作站主機,但不包含主要 SAP HANA 執行個體。舉例來說,如果您指定 3,向外擴充系統中就會部署四個 SAP HANA 執行個體。

    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 執行個體建立關聯,以便用於防火牆或轉送。

    如果您指定 public_ip = false 但未指定網路標記,請務必提供其他能存取網際網路的方式。

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

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

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

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

    如果您指定這個引數但未附加值,或省略這個引數,安裝指令碼就會使用 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 以上版本。

    primary_worker_static_ips List(String) (非必要) 為 SAP HANA 向外擴充 HA 系統的主要執行個體中的工作站執行個體,指定有效的靜態 IP 位址陣列。如果您未為這個引數指定值,系統會為每個 worker VM 執行個體自動產生 IP 位址。例如:[ "1.0.0.1", "2.3.3.4" ]

    系統會依建立執行個體的順序指派靜態 IP 位址。舉例來說,如果您選擇部署 3 個 worker 執行個體,但只為引數 primary_worker_static_ips 指定 2 個 IP 位址,則這些 IP 位址會指派給 Terraform 設定部署的頭兩個 VM 執行個體。第三個 worker VM 執行個體的 IP 位址會自動產生。

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

    secondary_worker_static_ips List(String) (非必要) 為 SAP HANA 向外擴充 HA 系統的次要執行個體,為工作站執行個體指定有效的靜態 IP 位址陣列。如果您未為這個引數指定值,系統會為每個 worker VM 執行個體自動產生 IP 位址。例如:[ "1.0.0.2", "2.3.3.5" ]

    系統會依建立執行個體的順序指派靜態 IP 位址。舉例來說,如果您選擇部署 3 個 worker 執行個體,但只為引數 secondary_worker_static_ips 指定 2 個 IP 位址,則這些 IP 位址會指派給 Terraform 設定部署的頭兩個 VM 執行個體。第三個 worker VM 執行個體的 IP 位址會自動產生。

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

    以下範例顯示已完成的設定檔,這些檔案會為 SAP HANA 向外擴充系統定義高可用性叢集。叢集會使用內部直通式網路負載平衡器來管理 VIP。

    Terraform 會部署設定檔中定義的 Google Cloud 資源,然後由指令碼接手設定作業系統並安裝 SAP HANA。

  6. 在同一個 manual_sap_hana_scaleout_ha.tf 檔案中,更新 majority_maker 的引數值。下表說明引數。

    引數 資料類型 說明
    project 字串 指定您要部署此系統的 Google Cloud 專案 ID。
    majority_maker_instance_name 字串

    指定 Compute Engine VM 執行個體的名稱,做為多數製作者。

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

    majority_maker_instance_type 字串 指定要用於大多數製作者執行個體的 Compute Engine 虛擬機器 (VM) 類型。例如:n1-highmem-32

    如果您想使用自訂的 VM 類型,請指定預先定義的 VM 類型,其中的 vCPU 數量應盡可能接近您所需的數量,但仍要大於該數量。部署完成後,請修改 vCPU 數量和記憶體容量

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

    majority_maker_zone 字串 指定部署多數製造商 VM 執行個體的可用區。這個區域必須與主要和次要區域位於相同的地區。例如:us-east1-d

    Google Cloud 建議將主要製造商 VM 例項部署在與主要和次要 SAP HANA 系統不同的區域。

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

    majority_maker_linux_image 字串 使用與上一個步驟相同的值,將完整圖片路徑指定為 "linux_image_project/linux_image"。例如 "rhel-sap-cloud/rhel-9-0-sap-v20230708"
    subnetwork 字串 指定您在先前步驟中建立的子網路名稱。如果您要部署共用虛擬私有雲端,請將這個值指定為 SHARED_VPC_PROJECT_ID/SUBNETWORK。例如:myproject/network1
    service_account 字串 (非必要) 指定使用者代管的服務帳戶電子郵件地址,供主機 VM 和在主機 VM 上執行的程式使用。例如:svc-acct-name@project-id.

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

    metadata_startup_script 字串 請勿編輯這個引數。根據預設,多數製造商會下載最新的開機指令碼,為 Pacemaker 叢集準備執行個體。

    為求清楚,以下範例設定中的註解已省略。

  module "sap_hana_primary" {
    source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"

    project_id                     = "example-project-123456"
    zone                           = "us-west1-a"
    machine_type                   = "n1-highmem-32"
    subnetwork                     = "default"
    linux_image                    = "rhel-9-0-sap-v20230711"
    linux_image_project            = "rhel-sap-cloud"
    instance_name                  = "hana-ha-1"
    sap_hana_sid                   = "HA1"

    sap_hana_deployment_bucket      = "my-hana-bucket"
    sap_hana_sidadm_password_secret = "hana_sid_adm_pwd"
    sap_hana_system_password_secret = "hana_sys_pwd"
    sap_hana_scaleout_nodes         = 1
    sap_hana_shared_nfs             = "10.10.10.1:/hana_scaleout/hana_a/shared"
    sap_hana_backup_nfs             = "10.10.10.1:/hana_scaleout/hana_a/backup"

  }
  module "sap_hana_secondary" {
    source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"

    project_id                     = "example-project-123456"
    zone                           = "us-west1-b"
    machine_type                   = "n1-highmem-32"
    subnetwork                     = "default"
    linux_image                    = "rhel-9-0-sap-v20230711"
    linux_image_project            = "rhel-sap-cloud"
    instance_name                  = "hana-ha-2"
    sap_hana_sid                   = "HA1"

    sap_hana_deployment_bucket      = "my-hana-bucket"
    sap_hana_sidadm_password_secret = "hana_sid_adm_pwd"
    sap_hana_system_password_secret = "hana_sys_pwd"
    sap_hana_scaleout_nodes         = 1
    sap_hana_shared_nfs             = "10.10.10.2:/hana_scaleout/hana_b/shared"
    sap_hana_backup_nfs             = "10.10.10.2:/hana_scaleout/hana_b/backup"
  }

  resource "google_compute_instance" "majority_maker" {

    project =  "example-project-123456"

    # majority_maker_instance_name
    name         = "majority-maker"

    # majority_maker_instance_type
    machine_type = "n1-standard-8"

    # majority_maker_zone
    zone         = "us-west1-c"

    boot_disk {
      initialize_params {
        # majority_maker_linux_image
        image = "rhel-sap-cloud/rhel-9-0-sap-v20230711"
      }
    }

    network_interface {
      # network or subnetwork
      network = "default"
    }

      service_account {
      # service_account (Optional)
      # email  = svc-acct-name@project-id..
      scopes = ["cloud-platform"]
    }

    # Do not edit
    metadata_startup_script = "curl -s https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_majoritymaker/startup.sh | bash -s https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_majoritymaker/startup.sh"

  }
  1. 初始化目前的工作目錄,並下載 Google Cloud的 Terraform 供應器外掛程式和模組檔案:

    terraform init

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

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

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

    terraform plan

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

  3. 套用執行計畫:

    terraform apply

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

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

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

驗證 HANA HA 系統的部署作業

檢查記錄

  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

    [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

清除並重試部署

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

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

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

    開啟 Cloud Shell

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

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

    terraform destroy

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

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

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

部署所有執行個體並安裝 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 系統和 Pacemaker 叢集的部分重複工作,您可以使用 Bash 指令碼。在本指南中,我們會使用這類 bash 指令碼,加快 SAP HANA 系統和 Pacemaker 叢集的設定速度。這些指令碼需要所有已部署的 VM 執行個體和對應區域的清單做為輸入內容。

如要啟用這項自動化功能,請建立名為 nodes.txt 的檔案,並以以下格式加入所有已部署 VM 執行個體的詳細資料:可用區名稱、空格,然後是 VM 執行個體名稱。本指南會使用以下範例檔案:

# cat nodes.txt
  us-west1-a hana-ha-vm-1
  us-west1-a hana-ha-vm-1w1
  us-west1-a hana-ha-vm-1w2
  us-west1-b hana-majoritymaker
  us-west1-c hana-ha-vm-2
  us-west1-c hana-ha-vm-2w1
  us-west1-c hana-ha-vm-2w2
 

設定無密碼 SSH 存取權

如要設定 Pacemaker 叢集,並同步 SAP HANA 安全儲存庫 (SSFS) 金鑰,所有節點 (包括多數製造商執行個體) 之間都必須具備無密碼 SSH 存取權。如要使用無密碼 SSH 存取權,您必須將 SSH 公開金鑰新增至所有已部署執行個體的執行個體中繼資料。

中繼資料的格式為 USERNAME: PUBLIC-KEY-VALUE

如要進一步瞭解如何在 VM 中新增安全殼層金鑰,請參閱「在使用中繼資料型 SSH 金鑰的 VM 中新增安全殼層金鑰」。

手動步驟

  1. 針對主要和次要系統中的每個執行個體,以及多數製作者執行個體,收集使用者 root 的公開金鑰。

    gcloud compute ssh --quiet --zone ZONE_ID INSTANCE_NAME -- sudo cat /root/.ssh/id_rsa.pub
  2. 在金鑰前方加上字串 root:,並將金鑰寫入名為 public-ssh-keys.txt 的檔案中,例如:

    root:ssh-rsa AAAAB3NzaC1JfuYnOI1vutCs= root@INSTANCE_NAME
  3. 收集所有 SSH 公開金鑰後,請將金鑰做為中繼資料上傳至所有執行個體:

    gcloud compute instances add-metadata --metadata-from-file ssh-keys=public-ssh-keys.txt --zone ZONE_ID INSTANCE_NAME

自動化步驟

或者,如要為 nodes.txt 中列出的所有執行個體,自動設定無密碼 SSH 存取權,請透過 Google Cloud 控制台執行下列步驟:

  1. 建立所有已部署執行個體的公開金鑰清單:

    while read -u10 ZONE HOST ;  do echo "Collecting public-key from $HOST"; { echo 'root:'; gcloud compute ssh --quiet --zone $ZONE $HOST --tunnel-through-iap -- sudo cat /root/.ssh/id_rsa.pub; } | tr -ds '\n' " " >> public-ssh-keys.txt; done 10< nodes.txt

  2. 將安全殼層公開金鑰指派為所有執行個體的中繼資料項目:

    while read -u10 ZONE HOST ;  do echo "Adding public keys to $HOST"; gcloud compute instances add-metadata --metadata-from-file ssh-keys=public-ssh-keys.txt --zone $ZONE $HOST; done 10< nodes.txt 

停用 SAP HANA 自動啟動

手動步驟

針對叢集中的每個 SAP HANA 執行個體,請確認已停用 SAP HANA 自動啟動功能。針對備援,Pacemaker 會管理叢集中 SAP HANA 執行個體的啟動和停止作業。

  1. SID_LCadm 身分在每個主機上停止 SAP HANA:

    > HDB stop
  2. 在每個主機上,使用編輯器 (例如 vi) 開啟 SAP HANA 設定檔:

    vi /usr/sap/SID/SYS/profile/SID_HDBINST_NUM_HOST_NAME
  3. Autostart 屬性設為 0

    Autostart=0
  4. 儲存設定檔。

  5. SID_LCadm 身分在每個主機上啟動 SAP HANA:

    > HDB start

自動化步驟

或者,如要為 nodes.txt 中列出的所有執行個體停用 SAP HANA 自動啟動功能,請從 Google Cloud 主控台執行下列指令碼:

while read -u10 ZONE HOST ;
 do gcloud compute ssh --verbosity=none --zone $ZONE $HOST -- "echo Setting Autostart=0 on \$HOSTNAME;
 sudo sed -i 's/Autostart=1/Autostart=0/g' /usr/sap/SID/SYS/profile/SID_HDBINST_NUM_\$HOSTNAME";
 done 10< nodes.txt
 

啟用 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)

自動化步驟

如要自動執行這項程序,請使用 nodes.txt 和 Google Cloud 主控台中的以下指令碼:

  1. 產生包含 IP 位址和主機名稱清單的 hosts.txt 檔案:

    while read -u10 ZONE HOST ; do gcloud compute instances list --filter="name=( 'NAME' $HOST )" --format="csv[separator=' ',no-heading](networkInterfaces[0].networkIP,name)" >> hosts.txt; done 10< nodes.txt
  2. 確認 hosts.txt 檔案是否如下所示:

    10.138.0.1 rhel-hana-primary
    10.138.0.2 rhel-hana-primaryw1
    10.138.0.3 rhel-hana-secondary
    10.138.0.4 rhel-hana-secondaryw1
    10.138.0.5 rhel-sap-mm
    
  3. 在叢集中的所有主機 (包括多數製造商) 上更新 /etc/hosts 檔案,以便納入 Pacemaker 叢集中所有執行個體的主機名稱和內部 IP 位址。

    while read -u10 ZONE HOST ;  do gcloud compute ssh --tunnel-through-iap --quiet $HOST --zone $ZONE -- "sudo tee -a /etc/hosts" < hosts.txt; done 10< nodes.txt

備份資料庫

建立資料庫備份,以便啟動 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. 在次要主機上:

    1. SID_LCadm 身分停止 SAP HANA:

      > sapcontrol -nr INST_NUM -function StopSystem
    2. 以 root 身分封存現有的 SSFS 資料和金鑰檔案:

      # cd /usr/sap/SID/SYS/global/security/rsecssfs/
      # mv data/SSFS_SID.DAT data/SSFS_SID.DAT-ARC
      # mv key/SSFS_SID.KEY key/SSFS_SID.KEY-ARC
    3. 從主要主機複製資料檔案:

      # scp -o StrictHostKeyChecking=no \
      PRIMARY_HOST_NAME:/usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT \
      /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
    4. 從主要主機複製金鑰檔案:

      # scp -o StrictHostKeyChecking=no \
      PRIMARY_HOST_NAME:/usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY \
      /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    5. 更新檔案的擁有權:

      # chown SID_LCadm:sapsys /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
      # chown SID_LCadm:sapsys /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    6. 更新檔案的權限:

      # chmod 644 /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
      # chmod 640 /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    7. SID_LCadm 身分,將次要 SAP HANA 系統註冊至 SAP HANA 系統複製:

      > hdbnsutil -sr_register --remoteHost=PRIMARY_HOST_NAME --remoteInstance=INST_NUM \
      --replicationMode=syncmem --operationMode=logreplay --name=SECONDARY_HOST_NAME
    8. SID_LCadm 身分啟動 SAP HANA:

      > sapcontrol -nr INST_NUM -function StartSystem

驗證系統複製作業

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

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

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

  • Secondary Active StatusYES
  • Replication StatusACTIVE

此外,overall system replication status 會顯示 ACTIVE

啟用 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:

    > sapcontrol -nr 00 -function StopSystem

  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-ScaleOut/
    execution_order = 1
    
    [ha_dr_provider_chksrv]
    provider = ChkSrv
    path = /usr/share/SAPHanaSR-ScaleOut/
    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 檔案中,新增下列文字:

    SID_LC 取代為小寫的 SID。
    Cmnd_Alias SOK = /usr/sbin/crm_attribute -n hana_SID_LC_glob_srHook -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_glob_srHook -v SFAIL -t crm_config -s SAPHanaSR
    SID_LCadm ALL=(ALL) NOPASSWD: SOK, SFAIL
    Defaults!SOK, SFAIL !requiretty

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

    #includedir /etc/sudoers.d

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

  6. SID_LCadm 身分啟動 SAP HANA:

    > sapcontrol -nr 00 -function StartSystem

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

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

設定 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 訂閱):

手動步驟

請在所有主機上完成下列步驟。在 Google 提供的 SAP 專用 RHEL 映像檔中,部分套件已安裝,但仍需要進行一些額外的修改。

  1. 以 root 身分移除映像檔預先安裝的 SAP HANA Scale-Up 資源代理程式:

    # yum -y remove resource-agents-sap-hana
  2. 安裝 Pacemaker 和缺少的資源代理程式:

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

  3. Update packages to latest version:

    # yum update -y

  4. hacluster 使用者設定密碼,該使用者是在建立套件時建立的:

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

  6. 在 Google Cloud提供的 RHEL-for-SAP 映像檔中,OS 防火牆服務預設為啟用。設定防火牆服務,允許高可用性流量:

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

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  8. 檢查 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-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Jun 13 21:17:05 hana-ha-1 systemd[1]: Started PCS GUI and remote configuration interface.

自動化步驟

如要自動執行這項程序,您可以使用 nodes.txt 和 Google Cloud 控制台的以下指令碼。

系統顯示提示時,請輸入密碼,供在安裝 Pacemaker 資源代理程式期間建立的 hacluster 使用者使用。

echo "Set password for hacluster user:"; read -r HA_PASSWD; while read -u10 HOST ;  do gcloud compute ssh --tunnel-through-iap --quiet --zone $HOST -- "sudo yum -y remove resource-agents-sap-hana; sudo yum -y install pcs pacemaker fence-agents-gce resource-agents-sap-hana-scaleout resource-agents-gcp; sudo yum update -y; sudo firewall-cmd --permanent --add-service=high-availability; sudo firewall-cmd --reload; sudo systemctl start pcsd.service; sudo systemctl enable pcsd.service; yes $HA_PASSWD | sudo passwd hacluster"; done 10< nodes.txt

更新 /etc/hosts 檔案

在叢集中的所有主機 (包括多數製造商) 上更新 /etc/hosts 檔案,以便納入 Pacemaker 叢集中所有執行個體的主機名稱和內部 IP 位址。

/etc/hosts 檔案的輸出內容應如下所示:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1                localhost localhost.localdomain localhost6 localhost6.localdomain6
10.138.0.1 rhel-hana-primary.us-west1-a.c.project-name.internal rhel-hana-primary # Added by Google
169.254.169.254 metadata.google.internal # Added by Google
10.138.0.1 rhel-hana-primary
10.138.0.2 rhel-hana-primaryw1
10.138.0.3 rhel-hana-secondary
10.138.0.4 rhel-hana-secondaryw1
10.138.0.5 rhel-sap-mm

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

建立叢集

  1. 以主要主機上的超級使用者身分,授權 hacluster 使用者。請務必在這個指令中加入叢集的每個主機,這些主機應屬於叢集。

    RHEL 8.0 以上版本

    pcs host auth primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name
    

    RHEL 7.6 以上版本

    pcs cluster auth primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name
    
  2. 在提示訊息中,輸入您在上一個章節為 hacluster 使用者設定的 hacluster 使用者名稱和密碼。

  3. 將叢集設為維護模式。

    pcs property set maintenance-mode=true
  4. 產生並同步化 corosync 設定。

    RHEL 8.0 以上版本

    pcs cluster setup scale_out_hsr primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name

    RHEL 7.6 以上版本

    pcs cluster setup --start --name hanascaleoutsr primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name

編輯 corosync.conf 預設設定

  1. 使用您選擇的編輯器開啟 /etc/corosync/corosync.conf 檔案。

  2. 移除 consensus 參數。

  3. 根據 Google Cloud的建議修改其他參數。

    下表列出 Google Cloud建議值的 totem 參數,以及變更值的影響。如要瞭解這些參數的預設值 (Linux 發行版可能不同),請參閱 Linux 發行版的說明文件。
    參數 建議值 變更值的影響
    secauth off 停用所有 totem 訊息的驗證和加密功能。
    join 60 (毫秒) 增加節點在會員通訊協定中等待 join 訊息的時間。
    max_messages 20 增加節點在收到權杖後可能傳送的訊息數量上限。
    token 20000 (毫秒)

    增加節點等待 totem 通訊協定權杖的時間長度,以便節點宣告權杖遺失、假設節點發生錯誤,並開始採取行動。

    提高 token 參數的值,可讓叢集更能容許短暫的基礎架構事件,例如即時遷移。不過,這也可能導致叢集需要較長時間偵測及復原節點故障。

    token 參數的值也會決定 consensus 參數的預設值,後者用於控制節點在嘗試重新建立設定成員資格前,等待達成共識的時間長度。

    consensus 不適用

    以毫秒為單位,指定在等待達成共識後,才開始進行新一輪會員設定的等待時間。

    建議您省略這個參數。如果未指定 consensus 參數,Corosync 會將其值設為 token 參數值的 1.2 倍。如果您使用 token 參數的建議值 20000,則 consesus 參數會設為 24000 值。

    如果您明確指定 consensus 的值,請確認該值為 240001.2*token (以較大者為準)。

    token_retransmits_before_loss_const 10 在節點判斷收件節點已失敗並採取行動前,增加節點嘗試重新傳送符記的次數。
    transport
    • 針對 SLES:udpu
    • RHEL 8 以上版本:knet
    • RHEL 7:udpu
    指定 corosync 使用的傳輸機制。
  4. 從包含已編輯 corosync.conf 檔案的主機,在叢集中同步處理 Corosync 設定:

    RHEL 8 和後續版本

    # pcs cluster sync corosync

    RHEL 7

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

    # pcs cluster enable --all
    # pcs cluster start --all
  6. 使用 corosync-cmapctl 公用程式,確認新的 corosync 設定在叢集中是否有效:

    # corosync-cmapctl

設定 Corosync 的重新啟動延遲時間

手動步驟

  1. 在所有主機上以 root 身分建立 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

自動化步驟

或者,如要針對 nodes.txt 中列出的所有執行個體自動執行這項程序,請從 Google Cloud 主控台執行下列指令碼:

while read -u10 HOST;  do gcloud compute ssh --tunnel-through-iap --quiet --zone $HOST   --  "sudo mkdir -p /etc/systemd/system/corosync.service.d/; sudo echo -e '[Service]\nExecStartPre=/bin/sleep 60' | sudo tee -a /etc/systemd/system/corosync.service.d/override.conf; sudo systemctl daemon-reload"; done 10< nodes.txt

設定圍欄

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

為確保在柵欄動作後發生正確的事件順序,您必須設定作業系統,在 VM 遭到柵欄後延遲重新啟動 Corosync。您也必須調整 Pacemaker 的重新啟動逾時時間,以便考量延遲時間。

如要查看 fence_gce 圍欄代理程式提供的所有選項,請執行 fence_gce -h

手動步驟

  1. 在主要主機上以超級使用者的身分,為所有主機建立圍欄裝置,包括多數製造商:

    pcs stonith create STONITH-host-name fence_gce \
    port=host-name \
    zone=host-zone \
    project=project-id \
    pcmk_host_list=host-name pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \
    op monitor interval="300s" timeout="120s" \
    op start interval="0" timeout="60s"
  2. 設定圍欄裝置的位置限制:

    pcs constraint location STONITH-host-name avoids host-name

  3. 針對主要和次要叢集中的所有其他主機,以及多數製作者主機,重複執行上述兩個步驟,並輸入 host-namehost-zone 變數的適當值。

自動化步驟

如要自動執行這項程序,您必須使用 nodes.txt 檔案和 Google Cloud 主控台中的下列指令碼:

while read -u10 ZONE HOST; do gcloud compute ssh $HOST --tunnel-through-iap --quiet --zone $ZONE -- "sudo pcs stonith create STONITH-$HOST fence_gce project=project-id port=$HOST zone=$ZONE pcmk_host_list=$HOST pcmk_reboot_timeout=300 pcmk_monitor_retries=4 op monitor interval=300s timeout=120s op start interval=0 timeout=60s && sudo pcs constraint location STONITH-$HOST avoids $HOST"; done 10< nodes.txt

設定叢集預設值

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

  1. 以任何主機的超級使用者身分設定資源預設值:

    RHEL 8.0 以上版本

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

    RHEL 7.6 以上版本

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

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

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

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

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

    RHEL 8.0 以上版本

    # pcs resource op defaults update timeout=600s

    RHEL 7.6 以上版本

    # pcs resource op defaults timeout=600s

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

  3. 設定下列叢集屬性:

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

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

建立 SAPHanaTopology 資源

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

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

    RHEL 8.0 以上版本

    # pcs resource create rsc_SAPHanaTopology_SID_HDBinstNr SAPHanaTopology SID=SID \
    InstanceNumber=inst_num \
    op methods interval=0s timeout=5 \
    op monitor interval=10 timeout=600 \
    clone meta clone-node-max=1 interleave=true

    RHEL 7.6 以上版本

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

    RHEL 8.0 以上版本

    # pcs resource config rsc_SAPHanaTopology_SID_HDBinstNr-clone

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

    Clone: SAPHanaTopology_HA1_00-clone
    Meta Attrs: 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)
           start interval=0s timeout=600 (SAPHanaTopology_HA1_00-start-interval-0s)
           stop interval=0s timeout=300 (SAPHanaTopology_HA1_00-stop-interval-0s)

    RHEL 7.6 以上版本

    # pcs resource show rsc_SAPHanaTopology_SID_HDBinstNr-clone

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

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

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

建立 SAPHanaController 資源

SAPHanaController 資源代理程式會管理為 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. 在任一主機上以超級使用者的身分,建立 SAPHanaController 資源:

    RHEL 8.0 以上版本

    # pcs resource create rsc_SAPHana_SID_HDBinstNr SAPHanaController SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op demote interval=0s timeout=320 \
    op methods interval=0s timeout=5 \
    op monitor interval=59 \
    role="Master" timeout=700 \
    op monitor interval=61 \
    role="Slave" timeout=700 \
    op promote interval=0 timeout=3600 \
    op start interval=0 timeout=3600 \
    op stop interval=0 timeout=3600e
    # pcs resource promotable rsc_SAPHana_SID_HDBinstNr meta master-max="1" clone-node-max=1 interleave=true

    RHEL 7.6 以上版本

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

    RHEL 8.0 以上版本

    # pcs resource config rsc_SAPHana_SID_HDBinstNr-clone

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

    Resource: SAPHana_HA1_00 (class=ocf provider=heartbeat type=SAPHanaController)
    Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 PREFER_SITE_TAKEOVER=true SID=HA1
    Operations: demote interval=0s timeout=320 (SAPHana_HA1_00-demote-interval-0s)
          methods interval=0s timeout=5 (SAPHana_HA1_00-methods-interval-0s)
          monitor interval=59 role=Master timeout=700 (SAPHana_HA1_00-monitor-interval-59)
          promote interval=0 timeout=3600 (SAPHana_HA1_00-promote-interval-0)
          reload interval=0s timeout=5 (SAPHana_HA1_00-reload-interval-0s)
          start interval=0 timeout=3600 (SAPHana_HA1_00-start-interval-0)
          stop interval=0 timeout=3600 (SAPHana_HA1_00-stop-interval-0)
          monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_00-monitor-interval-61)

    RHEL 7.6 以上版本

    # pcs resource show msl_rsc_SAPHana_SID_HDBinstNr

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

    Master: msl_rsc_SAPHana_HA1_HDB00
    Meta Attrs: clone-node-max=1 interleave=true master-max=1
    Resource: rsc_SAPHana_HA1_HDB00 (class=ocf provider=heartbeat type=SAPHanaController)
    Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 PREFER_SITE_TAKEOVER=true SID=HA1
    Operations: demote interval=0s timeout=320 (rsc_SAPHana_HA1_HDB00-demote-interval-0s)
           methods interval=0s timeout=5 (rsc_SAPHana_HA1_HDB00-methods-interval-0s)
           monitor interval=60 role=Master timeout=700 (rsc_SAPHana_HA1_HDB00-monitor-interval-60)
           monitor interval=61 role=Slave timeout=700 (rsc_SAPHana_HA1_HDB00-monitor-interval-61)
           promote interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-promote-interval-0)
           start interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-start-interval-0)
           stop interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-stop-interval-0)

建立虛擬 IP 位址資源

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

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

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

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

建立限制

您可以建立限制,定義哪些服務需要先啟動,以及哪些服務需要在同一主機上一起執行。

  1. 定義開始順序限制:

    RHEL 8.0 以上版本

    # pcs constraint order start rsc_SAPHanaTopology_SID_HDBinstNr-clone then start rsc_SAPHana_SID_HDBinstNr-clone

    RHEL 7.6

    # pcs constraint order rsc_SAPHanaTopology_SID_HDBinstNr-clone then rsc_SAPHana_SID_HDBinstNr-master

  2. Configure the majority maker to avoid taking an an active role in the cluster environment:

    RHEL 8.0 and later

    # pcs constraint location rsc_SAPHana_SID_HDBinstNr-clone avoids majority-maker-name
    
    # pcs constraint location rsc_SAPHanaTopology_SID_HDBinstNr-clone avoids majoritymaker

    RHEL 7.6

    # pcs constraint location msl_rsc_SAPHana_SID_HDBinstNr avoids majoritymaker
    
    # pcs constraint location rsc_SAPHanaTopology_SID_HDBinstNr-clone avoids majoritymaker
  3. 檢查限制:

    # pcs constraint

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

    Location Constraints:
    Resource: STONITH-hana-ha-1
      Disabled on: hana-ha-1 (score:-INFINITY)
    Resource: STONITH-hana-ha-1w1
      Disabled on: hana-ha-1w1 (score:-INFINITY)
    Resource: STONITH-hana-ha-2
      Disabled on: hana-ha-2 (score:-INFINITY)
    Resource: STONITH-hana-ha-2w1
      Disabled on: hana-ha-2w1 (score:-INFINITY)
    Resource: STONITH-majority-maker
      Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHanaTopology_HA1_HDB00-clone
      Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHana_HA1_HDB00-master
      Disabled on: majority-maker (score:-INFINITY)
    Ordering Constraints:
      start rsc_SAPHanaTopology_HA1_HDB00-clone then start rsc_SAPHana_HA1_HDB00-master (kind:Mandatory)

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

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

安裝監聽器

負載平衡器會使用每個主機健康狀態檢查通訊埠上的監聽器,判斷 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. 以根目錄使用者身分,從任何主機建立 HAProxy 服務的健康狀態檢查資源:

    # pcs resource create hc_SID_HDBinstNr service:haproxy op monitor interval=10s timeout=20s
  2. 將 VIP 和健康狀態檢查資源分組:

    # pcs resource group add rsc-group-name hc_SID_HDBinstNr rsc_ip_SAPHANA_SID_HDBinstNr
  3. 建立限制,將群組與主 SAP HANA 執行個體放在同一個節點上。

    RHEL 8.0 以上版本

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

    RHEL 7.6 以上版本

    # pcs constraint colocation add rsc-group-name with master msl_rsc_SAPHana_SID_HDBinstNr
  4. 建立順序限制,只在 HANA 升級後啟動群組:

    # pcs constraint order promote rsc_SAPHana_SID_HDBinstNr-clone then start rsc-group-name

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

    # pcs constraint
    
    Location Constraints:
    Resource: STONITH-hana-ha-1
     Disabled on: hana-ha-1 (score:-INFINITY)
    Resource: STONITH-hana-ha-1w1
     Disabled on: hana-ha-1w1 (score:-INFINITY)
    Resource: STONITH-hana-ha-2
     Disabled on: hana-ha-2 (score:-INFINITY)
    Resource: STONITH-hana-ha-2w1
     Disabled on: hana-ha-2w1 (score:-INFINITY)
    Resource: STONITH-majority-maker
     Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHanaTopology_HA1_HDB00-clone
     Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHana_HA1_HDB00-master
     Disabled on: majority-maker (score:-INFINITY)
    Ordering Constraints:
     start rsc_SAPHanaTopology_HA1_HDB00-clone then start rsc_SAPHana_HA1_HDB00-master (kind:Mandatory)
     promote rsc_SAPHana_HA1_HDB00-clone then start g-primary (kind:Mandatory) (id:order-rsc_SAPHana_HA1_HDB00-clone-g-primary-mandatory)
    Colocation Constraints:
     g-primary with rsc_SAPHana_HA1_HDB00-master (score:INFINITY) (rsc-role:Started) (with-rsc-role:Master)
    Ticket Constraints:

完成設定

  1. 將叢集移出維護模式。

    pcs property set maintenance-mode=false
  2. 資源啟動後,請檢查節點屬性,查看節點上 SAP HANA 資料庫目前的狀態:

    # crm_mon -A1

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

    RHEL 8.0 以上版本

    Cluster Summary:
    Stack: corosync
    Current DC: hana-ha-2w1 (version 2.0.5-9.el8_4.7-ba59be7122) - partition with quorum
    Last updated: Wed Oct 11 17:59:51 2023
    Last change:  Wed Oct 11 17:59:48 2023 by hacluster via crmd on hana-ha-2
    5 nodes configured
    17 resource instances configured
    
    Node List:
    Online: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 dru-somm ]
    
    Active Resources:
    STONITH-hana-ha-1     (stonith:fence_gce):     Started hana-ha-2
    STONITH-hana-ha-1w1   (stonith:fence_gce):     Started hana-ha-1
    STONITH-hana-ha-2     (stonith:fence_gce):     Started hana-ha-2w1
    STONITH-hana-ha-2w1   (stonith:fence_gce):     Started dru-somm
    STONITH-dru-somm    (stonith:fence_gce):     Started hana-ha-1
    Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]:
     Started: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00]-(promotable):
     Slaves: [ hana-ha-1w1 hana-ha-2w1 ]
    Resource Group: g-primary:
     healthcheck_HA1   (service:haproxy):       Started hana-ha-1
     ip_SAPHANA_HA1_00 (ocf::heartbeat:IPaddr2):        Started hana-ha-1
    
    Node Attributes:
    Node: hana-ha-1:
     hana_ha1_clone_state              : PROMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_roles                    : master1:master:worker:master
     hana_ha1_site                     : hana-ha-1
     hana_ha1_sra                      : -
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-1
     master-SAPHana_HA1_00             : 5
    Node: hana-ha-1w1:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_roles                    : slave:slave:worker:slave
     hana_ha1_site                     : hana-ha-1
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-1w1
     master-SAPHana_HA1_00             : -INFINITY
    Node: hana-ha-2:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-1w1
     hana_ha1_roles                    : master1:master:worker:master
     hana_ha1_site                     : hana-ha-2
     hana_ha1_sra                      : -
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-2
     master-SAPHana_HA1_00             : 100
    Node: hana-ha-2w1:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-1w1
     hana_ha1_roles                    : slave:slave:worker:slave
     hana_ha1_site                     : hana-ha-2
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-2w1
     master-SAPHana_HA1_00             : -12200
    Node: dru-somm:
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_srmode                   : syncmem

    RHEL 7.6 以上版本

    Stack: corosync
    Current DC: majority-maker (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
    Last updated: Wed Oct 11 17:58:07 2023
    Last change: Wed Oct 11 17:57:57 2023 by hacluster via crmd on hana-ha-2w1
    
    5 nodes configured
    17 resource instances configured
    
    Online: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 majority-maker ]
    
    Active resources:
    
    STONITH-hana-ha-1 (stonith:fence_gce):    Started hana-ha-1w1
    STONITH-hana-ha-1w1       (stonith:fence_gce):    Started hana-ha-2
    STONITH-hana-ha-2 (stonith:fence_gce):    Started hana-ha-1
    STONITH-hana-ha-2w1       (stonith:fence_gce):    Started majority-maker
    STONITH-majority-maker (stonith:fence_gce):    Started hana-ha-1w1
    Master/Slave Set: msl_rsc_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00]
     rsc_SAPHana_HA1_HDB00      (ocf::heartbeat:SAPHanaController):     Master hana-ha-1 (Monitoring)
     Slaves: [ hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Clone Set: rsc_SAPHanaTopology_HA1_HDB00-clone [rsc_SAPHanaTopology_HA1_HDB00]
     Started: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Resource Group: g-primary
     hc_HA1_HDB00       (service:haproxy):      Started hana-ha-1
     rsc_ip_SAPHANA_HA1_HDB00   (ocf::heartbeat:IPaddr2):       Started hana-ha-1
    
    Node Attributes:
    Node hana-ha-1:
      hana_ha1_clone_state              : PROMOTED
      hana_ha1_remoteHost               : hana-ha-2
      hana_ha1_roles                    : master1:master:worker:master
      hana_ha1_site                     : hana-ha-1
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-1
      master-rsc_SAPHana_HA1_HDB00      : 150
    Node hana-ha-1w1:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-2w1
      hana_ha1_roles                    : slave:slave:worker:slave
      hana_ha1_site                     : hana-ha-1
      hana_ha1_srmode                   : syncmem
      hana_ha1_version                  : 2.00.052.00.1599235305
      hana_ha1_vhost                    : hana-ha-1w1
      master-rsc_SAPHana_HA1_HDB00      : -10000
    Node hana-ha-2:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-2w1
      hana_ha1_roles                    : master1:master:worker:master
      hana_ha1_site                     : hana-ha-2
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-2
      master-rsc_SAPHana_HA1_HDB00      : 100
    Node hana-ha-2w1:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-1
      hana_ha1_roles                    : slave:slave:worker:slave
      hana_ha1_site                     : hana-ha-2
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-2w1
      master-rsc_SAPHana_HA1_HDB00      : -12200
    Node majority-maker:
      hana_ha1_srmode                   : syncmem
  3. 如果有失敗的叢集資源,您可能需要執行下列指令:

    pcs resource cleanup

測試容錯移轉

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

在測試前備份系統。

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

  • 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 hana-ha-vm-1w1 hana-ha-vm-2w1]
    
    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
    STONITH-hana-ha-vm-1w1   (stonith:fence_gce):    Started hana-ha-vm-2w1
    STONITH-hana-ha-vm-1w1   (stonith:fence_gce):    Started hana-ha-vm-mm
    STONITH-hana-ha-vm-mm   (stonith:fence_gce):    Started hana-ha-vm-1w1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 hana-ha-vm-1w1 hana-ha-vm-2w1
        Stopped: [ hana-ha-vm-mm ] ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-2 ]
        Slaves: [ hana-ha-vm-1 hana-ha-vm-1w1 hana-ha-vm-2w1
        Stopped: [ hana-ha-vm-mm ] ]
    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

疑難排解

如要針對 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 網路介面上的整體網路總處理量,且不會影響網路延遲時間。

如需詳細資訊,請參閱:

後續步驟

詳情請參閱下列資源: