將 SAP HANA 檔案系統遷移至個別磁碟

本文件說明如何將 SAP HANA 部署中的檔案系統遷移至 Google Cloud 的個別 SSD 持續性磁碟或 Google Cloud Hyperdisk 磁碟區。

Google Cloud 上的 SAP HANA 部署作業會使用統一磁碟版面配置或分割磁碟版面配置。在統一磁碟版面配置中,單一磁碟會用於代管所有 SAP HANA 檔案系統。在分割磁碟版面配置中,每個 SAP HANA 檔案系統都會託管在不同的磁碟上。如要瞭解這些磁碟配置,請參閱「支援的磁碟配置」。

Google Cloud 建議您使用分割磁碟版面配置,原因如下:

  • 這可讓您針對檔案系統進行獨立的磁碟效能調整,特別是針對 /hana/data/hana/log,以及在使用 Hyperdisk 時。
  • 可簡化維護作業。

為說明遷移程序,本指南假設有一個範例系統,並將 SAP HANA 檔案系統從單一永久磁碟磁區遷移至每個檔案系統的一個 Hyperdisk 磁區。您也可以使用這個程序,將 SAP HANA 檔案系統遷移至個別的永久磁碟磁碟區。

查看遷移注意事項

  • 資料遷移時間:針對 SAP HANA HA 系統,您可以取消註冊次要節點、刪除其租用戶資料庫,然後回收記錄,以縮短資料遷移時間。本指南所述的程序採用了這種做法。
  • 停機時間:對於 SAP HANA HA 系統,您必須先遷移次要資料庫,並將其設為新的主資料庫,然後再遷移先前的資料庫。這有助於盡量縮短停機時間。
  • 還原至現有磁碟:如果遷移期間發生任何問題,您可以還原至現有磁碟,因為這類磁碟不會受到此程序影響,且可供使用,直到您自行刪除為止。詳情請參閱「改用現有磁碟」一文。

事前準備

將單一磁碟上代管的 SAP HANA 檔案系統遷移至每個檔案系統一個磁碟之前,請確認符合下列條件:

  • SAP HANA 會在SAP 認證的 Compute Engine 執行個體上執行,這些執行個體支援 Hyperdisk
  • 您必須備份有效的 SAP HANA 資料庫。如有需要,您可以使用這項備份來還原資料庫。
  • 如果目標 Compute Engine 執行個體屬於高可用性 (HA) 叢集,請確認叢集處於維護模式。
  • 如果 SAP HANA 資料庫使用向外擴充部署,請針對每個 SAP HANA 執行個體重複執行本指南中的程序。
  • SAP HANA 資料庫已啟用並運作。針對 HA 系統,請確認資料庫的主要和次要執行個體之間的複製功能處於啟用狀態。
  • 如要縮短資料複製時間,請從要遷移的 SAP HANA 磁碟區移除所有不必要的備份或媒體。
  • 執行下列指令,驗證要遷移的 SAP HANA 檔案系統是否已在單一磁碟上代管:

    lsblk
    

    輸出結果會與下列範例相似。您的輸出內容可能與本範例不同,這取決於您為 SAP HANA 檔案系統使用的命名慣例,或是您的運算執行個體是否支援非揮發性記憶體快取 (NVMe) 磁碟介面。

    NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    sda                      8:0    0   30G  0 disk
    ├─sda1                   8:1    0    2M  0 part
    ├─sda2                   8:2    0   20M  0 part /boot/efi
    └─sda3                   8:3    0   30G  0 part /
    sdb                      8:16   0  2.3T  0 disk
    ├─vg_hana-shared       254:0    0  850G  0 lvm  /hana/shared
    ├─vg_hana-sap          254:1    0   32G  0 lvm  /usr/sap
    ├─vg_hana-log          254:2    0  425G  0 lvm  /hana/log
    └─vg_hana-data         254:3    0    1T  0 lvm  /hana/data
    sdc                      8:32   0  1.7T  0 disk
    └─vg_hanabackup-backup 254:4    0  1.7T  0 lvm  /hanabackup
    

SAP 系統範例

為說明遷移程序,本指南會執行以下操作:

  • 假設有一個 SAP HANA 向上擴充高可用性 (HA) 部署示例,其中單一永久磁碟磁碟區會代管 /hana/data/hana/log/hana/shared/usr/sap 檔案系統。
  • 將檔案系統遷移至個別的 Hyperdisk 磁碟區,其設定與 Terraform:SAP HANA 擴充高可用性叢集設定指南中部署的 SAP HANA 擴充 HA 系統相似。

下圖顯示範例系統在遷移檔案系統前後的架構:

架構圖:顯示在 Google Cloud上,將 SAP HANA 檔案系統遷移至個別磁碟

範例 SAP 系統的設定詳細資料如下:

  • 機器類型:n2-highmem-128
  • OS:SLES for SAP 15 SP5
  • SAP HANA:HANA 2 SPS07,修訂版 78
  • 系統使用的磁碟類型:SSD 永久磁碟 (pd-ssd)
  • /hana/data/hana/log/hana/shared/usr/sap 磁區會掛接至相同磁碟,並在 SAP HANA 的持久性設定中進行設定。以下是 SAP HANA 系統 (SID ABC) 的 /hana/data/hana/log 磁碟區持續性設定範例:

    [persistence]
    basepath_datavolumes = /hana/data/ABC
    basepath_logvolumes = /hana/log/ABC

將檔案系統遷移至個別 Hyperdisk 磁碟區

如要將 SAP HANA 向上擴充 HA 部署的檔案系統,從單一永久磁碟磁碟區遷移至每個檔案系統的一個 Hyperdisk 磁碟區,請執行下列步驟:

  1. 為次要執行個體做好遷移準備
  2. 遷移次要執行個體
  3. 升級次要執行個體
  4. 遷移先前的主要執行個體

為次要執行個體做好遷移準備

  1. 將 HA 叢集設為維護模式:

    crm maintenance on
    
  2. 驗證 HANA 系統複製 (HSR) 是否已啟用:

    /usr/sap/ABC/HDB00/exe/python_support> python systemReplicationStatus.py
    

    輸出結果會與下列範例相似:

    /usr/sap/ABC/HDB00/exe/python_support> python systemReplicationStatus.py
    |Database |Host        |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary   |Secondary     |Replication |Replication |Replication    |Secondary    |
    |         |            |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
    |-------- |----------- |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |----------- |------------- |----------- |----------- |-------------- |------------ |
    |SYSTEMDB |example-vm1 |30001 |nameserver   |        1 |      1 |example-vm1 |example-vm2 |    30001 |        2 |example-vm2 |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |ABC      |example-vm1 |30007 |xsengine     |        2 |      1 |example-vm1 |example-vm2 |    30007 |        2 |example-vm2 |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |ABC      |example-vm1 |30003 |indexserver  |        3 |      1 |example-vm1 |example-vm2 |    30003 |        2 |example-vm2 |YES           |SYNCMEM     |ACTIVE      |               |        True |
    status system replication site "2": ACTIVE
    overall system replication status: ACTIVE
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    mode: PRIMARY
    site id: 1
    site name: example-vm1

  3. 取消註冊 SAP HANA 資料庫的次要執行個體:

    hdbnsutil -sr_unregister
    

    輸出內容顯示資料庫的次要例項已成功取消註冊:

    abcadm@example-vm2:/usr/sap/ABC/HDB00> hdbnsutil -sr_unregister
    unregistering site ...
    done.
    Performing Final Memory Release with 10 threads.
    Finished Final Memory Release successfully.
    
  4. 在 SAP HANA 系統的次要執行個體中,刪除所有租用戶資料庫並回收記錄:

    1. 停止用戶群資料庫:

      hdbsql -n localhost:3INSTANCE_NUMBER13 -u SYSTEM -p "SYSTEM_DB_PASSWORD" -j "ALTER SYSTEM STOP DATABASE TENANT_DB_SID"
      

      更改下列內容:

      • INSTANCE_NUMBER:租用戶資料庫的例項編號
      • SYSTEM_DB_PASSWORD:系統資料庫的密碼
      • TENANT_DB_SID:租用戶資料庫的 SID,其中字母為大寫
    2. 刪除已停止的租用戶資料庫:

      hdbsql -n localhost:3INSTANCE_NUMBER13 -u SYSTEM -p "SYSTEM_DB_PASSWORD" -j "DROP DATABASE TENANT_DB_SID"
      
    3. 回收記錄:

      hdbsql -n localhost:3INSTANCE_NUMBER13 -u SYSTEM -p "SYSTEM_DB_PASSWORD" -j "ALTER SYSTEM RECLAIM LOG"
      
    4. 針對 SAP HANA 系統次要執行個體中的所有租用戶資料庫,重複執行上述步驟。

    以下是成功回應的範例:

    0 rows affected (overall time 9032.460 msec; server time 9032.273 msec)
    
  5. 停止 SAP HANA 系統的次要執行個體:

    sapcontrol -nr INSTANCE_NUMBER -function Stop
    

遷移次要執行個體

  1. 為每個 SAP HANA 檔案系統建立磁碟。針對這個程序假設的範例系統,請建立 4 個磁碟,分別用於 /hana/data/hana/log/hana/shared/usr/sap

    如要設定每個檔案系統的磁碟大小,您可以使用系統 lsblk 指令輸出內容中的大小資訊。

    如要瞭解建議的磁碟大小、IOPS 和吞吐量,以滿足 SAP HANA 效能需求,請參閱「以 SSD 為基礎的永久磁碟和 Hyperdisk 磁碟區的最低大小」。

    gcloud compute disks create USR_SAP_DISK_NAME \
        --project=PROJECT_ID \
        --type=USR_SAP_DISK_TYPE \
        --size=USR_SAP_DISK_SIZE \
        --zone=ZONE \
        --provisioned-iops=USR_SAP_DISK_IOPS
    gcloud compute disks create SHARED_DISK_NAME \
        --project=PROJECT_ID \
        --type=SHARED_DISK_TYPE \
        --size=SHARED_DISK_SIZE \
        --zone=ZONE \
        --provisioned-iops=SHARED_DISK_IOPS
    gcloud compute disks create DATA_DISK_NAME \
        --project=PROJECT_ID \
        --type=DATA_DISK_TYPE \
        --size=DATA_DISK_SIZE \
        --zone=ZONE \
        --provisioned-iops=DATA_DISK_IOPS
    gcloud compute disks create LOG_DISK_NAME \
        --project=PROJECT_ID \
        --type=LOG_DISK_TYPE \
        --size=LOG_DISK_SIZE \
        --zone=ZONE \
        --provisioned-iops=LOG_DISK_IOPS
    

    更改下列內容:

    • USR_SAP_DISK_NAME:您要為代管 /usr/sap 磁區的磁碟設定的名稱
    • PROJECT_ID: Google Cloud 專案的專案 ID
    • USR_SAP_DISK_TYPE:您要部署的 Hyperdisk 類型,用於代管 /usr/sap 磁碟區,例如 hyperdisk-extreme

    • USR_SAP_DISK_SIZE:您要為代管 /usr/sap 磁碟區的磁碟設定的大小

    • ZONE:您要部署新磁碟的 Compute Engine 區域

    • USR_SAP_DISK_IOPS:您要為要用來代管 /hana/data 的 Hyperdisk 設定的 IOPS。您可以根據效能需求設定 IOPS。

    • SHARED_DISK_NAME:您要為代管 /hana/shared 磁區的磁碟設定的名稱

    • SHARED_DISK_TYPE:您要部署的 Hyperdisk 類型,用於代管 /hana/shared 磁碟區,例如 hyperdisk-extreme

    • SHARED_DISK_SIZE:您要為代管 /hana/shared 磁碟區的磁碟設定的大小

    • SHARED_DISK_IOPS:您要為代管 /hana/shared 磁碟區的磁碟設定的 IOPS

    • DATA_DISK_NAME:您要為代管 /hana/data 磁區的磁碟設定的名稱

    • DATA_DISK_TYPE:您要部署的 Hyperdisk 類型,用於代管 /hana/data 磁碟區,例如 hyperdisk-extreme

    • DATA_DISK_SIZE:您要為代管 /hana/data 磁碟區的磁碟設定的大小

    • DATA_DISK_IOPS:您要為代管 /hana/data 磁碟區的磁碟設定的 IOPS

    • LOG_DISK_NAME:您要為代管 /hana/log 磁區的磁碟設定的名稱

    • LOG_DISK_TYPE:您要部署的 Hyperdisk 類型,用於代管 /hana/log 磁碟區,例如 hyperdisk-extreme

    • LOG_DISK_SIZE:您要為代管 /hana/log 磁碟區的磁碟設定的大小

    • LOG_DISK_IOPS:您要為代管 /hana/log 磁碟區的磁碟設定的 IOPS

  2. 將您建立的磁碟附加至代管 SAP HANA 資料庫次要執行個體的 Compute Engine 執行個體:

    gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
        --disk=USR_SAP_DISK_NAME \
        --zone=ZONE
    gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
        --disk=SHARED_DISK_NAME \
        --zone=ZONE
    gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
        --disk=DATA_DISK_NAME \
        --zone=ZONE
    gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
        --disk=LOG_DISK_NAME \
        --zone=ZONE
    

    SECONDARY_INSTANCE_NAME 替換為代管 SAP HANA 資料庫次要執行個體的 Compute Engine 名稱。

  3. 如要使用邏輯磁區管理 (LVM),請完成下列步驟:

    1. 為您建立及連接的新磁碟建立實體磁碟區:

      pvcreate USR_SAP_PV_NAME
      pvcreate SHARED_PV_NAME
      pvcreate DATA_PV_NAME
      pvcreate LOG_PV_NAME
      

      更改下列內容:

      • USR_SAP_PV_NAME:您建立用於代管 /usr/sap 磁碟區的磁碟實際裝置路徑
      • SHARED_PV_NAME:您建立用於代管 /hana/shared 磁碟區的磁碟實際裝置路徑
      • DATA_PV_NAME:您建立用於代管/hana/data 磁碟區的磁碟實際裝置路徑
      • LOG_PV_NAME:您建立用於代管/hana/log 磁碟區的磁碟實際裝置路徑
    2. 建立磁碟區群組:

      vgcreate vg_hana_usrsap USR_SAP_PV_NAME
      vgcreate vg_hana_shared SHARED_PV_NAME
      vgcreate vg_hana_data DATA_PV_NAME
      vgcreate vg_hana_log LOG_PV_NAME
      
    3. 建立邏輯磁碟區:

      lvcreate -l 100%FREE -n usrsap vg_hana_usrsap
      lvcreate -l 100%FREE -n shared vg_hana_shared
      lvcreate -l 100%FREE -n data vg_hana_data
      lvcreate -l 100%FREE -n log vg_hana_log
      
  4. 建立檔案系統:

    mkfs -t xfs /dev/vg_hana_usrsap/usrsap
    mkfs -t xfs /dev/vg_hana_shared/shared
    mkfs -t xfs /dev/vg_hana_data/data
    mkfs -t xfs /dev/vg_hana_log/log
    
  5. 為 SAP HANA 檔案系統建立臨時目錄:

    mkdir -p /tmp/usr/sap
    mkdir -p /tmp/hana/shared
    mkdir -p /tmp/hana/data
    mkdir -p /tmp/hana/log
    
  6. 使用臨時目錄掛載新建立的磁碟區:

    mount -o logbsize=256k /dev/vg_hana_usrsap/usrsap /tmp/usr/sap
    mount -o logbsize=256k /dev/vg_hana_shared/shared /tmp/hana/shared
    mount -o logbsize=256k /dev/vg_hana_data/data /tmp/hana/data
    mount -o logbsize=256k /dev/vg_hana_log/log /tmp/hana/log
    
  7. 將資料從來源 Persistent Disk 磁碟區傳輸至您建立的磁碟。您可以使用 rsync、LVM 快照或任何其他方法。以下範例使用 rsync 公用程式進行資料傳輸:

    rsync -avz --progress /usr/sap/ /tmp/usr/sap/
    rsync -avz --progress /hana/shared/ /tmp/hana/shared/
    rsync -avz --progress /hana/data/ /tmp/hana/data/
    rsync -avz --progress /hana/log/ /tmp/hana/log/
    
  8. 卸載 SAP HANA 檔案系統的舊邏輯磁碟區:

    umount /usr/sap
    umount /hana/shared
    umount /hana/data
    umount /hana/log
    
  9. 卸載您為 SAP HANA 檔案系統建立的暫時磁碟區:

    umount /tmp/usr/sap
    umount /tmp/hana/shared
    umount /tmp/hana/data
    umount /tmp/hana/log
    
  10. 從主機代管 SAP HANA 資料庫的次要執行個體,中斷主機代管 SAP HANA 檔案系統的永久磁碟磁區:

    gcloud compute instances detach-disk SECONDARY_INSTANCE_NAME
        --disk=SOURCE_DISK_NAME \
        --zone=ZONE
    

    SOURCE_DISK_NAME 替換為您要從運算執行個體中卸載的 SAP HANA 檔案系統所代管的永久磁碟磁區名稱。

  11. 以根目錄使用者或具有 sudo 存取權的使用者身分更新 /etc/fstab 項目。以下是更新項目的範例:

    /dev/vg_hana_shared/shared /hana/shared xfs defaults,nofail,logbsize=256k 0 2
    /dev/vg_hana_usrsap/sap /usr/sap xfs defaults,nofail,logbsize=256k 0 2
    /dev/vg_hana_data/data /hana/data xfs defaults,nofail,logbsize=256k 0 2
    /dev/vg_hana_log/log /hana/log xfs defaults,nofail,logbsize=256k 0 2
    
  12. 掛接新建立的邏輯磁碟區:

    mount -a
    
  13. 確認檔案系統使用的空間:

    df -h
    

    輸出結果會與下列內容相似:

    # df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    devtmpfs                           4.0M  8.0K  4.0M   1% /dev
    tmpfs                              638G   35M  638G   1% /dev/shm
    tmpfs                              171G  458M  170G   1% /run
    tmpfs                              4.0M     0  4.0M   0% /sys/fs/cgroup
    /dev/sdb3                           30G  6.4G   24G  22% /
    /dev/sdb2                           20M  3.0M   17M  15% /boot/efi
    /dev/mapper/vg_hanabackup-backup   1.7T   13G  1.7T   1% /hanabackup
    tmpfs                               86G     0   86G   0% /run/user/0
    /dev/mapper/vg_hana_usrsap-usrsap   32G  277M   32G   1% /usr/sap
    /dev/mapper/vg_hana_shared-shared  850G   54G  797G   7% /hana/shared
    /dev/mapper/vg_hana_data-data      1.1T  5.4G  1.1T   1% /hana/data
    /dev/mapper/vg_hana_log-log        475G  710M  475G   1% /hana/log
    

升級次要執行個體

  1. SID_LCadm 使用者身分,將 SAP HANA 資料庫的次要執行個體註冊至 SAP HANA 系統複製:

    hdbnsutil -sr_register --remoteHost=PRIMARY_INSTANCE_NAME \
        --remoteInstance=PRIMARY_INSTANCE_NUMBER \
        --replicationMode=syncmem --operationMode=logreplay \
        --name=SECONDARY_INSTANCE_NAME
    

    更改下列內容:

    • PRIMARY_INSTANCE_NAME:代管 SAP HANA 系統主要執行個體的 Compute Engine 執行個體名稱
    • PRIMARY_INSTANCE_NUMBER:SAP HANA 系統主要執行個體的執行個體編號
    • SECONDARY_INSTANCE_NAME:代管 SAP HANA 系統次要執行個體的 Compute Engine 執行個體名稱
  2. 啟動 SAP HANA 資料庫的次要執行個體:

    HDB start
    

    或者,您也可以使用 sapcontrol 指令啟動次要執行個體:

    sapcontrol -nr INSTANCE_NUMBER -function StartSystem
    
  3. 在 SAP HANA 資料庫的主要執行個體上,以 SID_LCadm 使用者身分確認 SAP HANA 系統複製功能是否處於啟用狀態:

    python $DIR_INSTANCE/exe/python_support/systemReplicationStatus.py
    
  4. 確認系統複製功能已啟用後,請將 SAP HANA 資料庫的次要執行個體設為新的主要執行個體:

    crm resource move msl_SAPHana_SID_HDBINSTANCE_NUMBER SECONDARY_INSTANCE_NAME
    

    輸出結果會與下列範例相似:

    INFO: Move constraint created for msl_SAPHana_ABC_HDB00 to example-vm2
    INFO: Use `crm resource clear msl_SAPHana_ABC_HDB00` to remove this constraint
    
  5. 檢查高可用性叢集的狀態:

    crm status
    

    輸出結果會與下列範例相似:

    example-vm1:~ # crm status
    Status of pacemakerd: 'Pacemaker is running' (last updated 2025-02-04 10:08:16Z)
    Cluster Summary:
      * Stack: corosync
      * Current DC: example-vm1 (version 2.1.5+20221208.a3f44794f-150500.6.20.1-2.1.5+20221208.a3f44794f) - partition with quorum
      * Last updated: Tue Feb  4 10:08:16 2025
      * Last change:  Tue Feb  4 10:07:47 2025 by root via crm_attribute on example-vm2
      * 2 nodes configured
      * 8 resource instances configured
    Node List:
      * Online: [ example-vm1 example-vm2 ]
    Full List of Resources:
      * STONITH-example-vm1  (stonith:fence_gce):     Started example-vm2
      * STONITH-example-vm2  (stonith:fence_gce):     Started example-vm1
      * Resource Group: g-primary:
        * rsc_vip_int-primary    (ocf::heartbeat:IPaddr2):    Started example-vm2
        * rsc_vip_hc-primary (ocf::heartbeat:anything):   Started example-vm2
      * Clone Set: cln_SAPHanaTopology_ABC_HDB00 [rsc_SAPHanaTopology_ABC_HDB00]:
        * Started: [ example-vm1 example-vm2 ]
      * Clone Set: msl_SAPHana_ABC_HDB00 [rsc_SAPHana_ABC_HDB00] (promotable):
        * Masters: [ example-vm2 ]
        * Slaves: [ example-vm1 ]
    
  6. 請以根目錄使用者或具有 sudo 存取權的使用者身分,移除確保資源不會設為偏好特定 Compute Engine 執行個體的限制:

    crm resource clear msl_SAPHana_SID_HDBINSTANCE_NUMBER
    

    輸出結果會與下列內容相似:

    INFO: Removed migration constraints for msl_SAPHana_ABC_HDB00
    

遷移先前的主要執行個體

  1. 如要遷移 SAP HANA 系統的舊主執行個體,請重複執行前面章節提供的程序。

  2. 將 HA 叢集從維護模式中移除:

    crm maintenance off
    

改用現有磁碟

如果磁碟遷移作業失敗,您可以改回使用現有的永久磁碟磁碟區,因為這些磁碟區包含遷移程序開始前的原始資料。

如要將 SAP HANA 資料庫還原至原始狀態,請執行下列步驟:

  1. 停止託管 SAP HANA 資料庫的 Compute Engine 執行個體。
  2. 卸除您建立的 Hyperdisk 磁碟區。
  3. 將現有的 Persistent Disk 磁碟區重新連結至 Compute Engine 執行個體。
  4. 啟動運算執行個體。

清除所用資源

成功將 SAP HANA 檔案系統遷移至個別磁碟後,請清理與您使用的永久磁碟磁碟區相關的資源。包括磁碟快照和磁碟本身。