Google Cloud 上的 SAP HANA 部署使用统一磁盘布局或分屏磁盘布局。在统一的磁盘布局中,单个磁盘用于托管所有 SAP HANA 文件系统。在分屏磁盘布局中,每个 SAP HANA 文件系统都托管在单独的磁盘上。如需了解这些磁盘布局,请参阅支持的磁盘布局。
Google Cloud 建议您使用分屏磁盘布局,原因如下:
- 它支持为文件系统(尤其是
/hana/data
和/hana/log
)独立调整磁盘性能,尤其是在使用 Hyperdisk 时。 - 这有助于简化维护。
为了说明迁移过程,本指南假设有一个示例系统,并将 SAP HANA 文件系统从单个 Persistent Disk 卷迁移到每个文件系统对应的一个 Hyperdisk 卷。您还可以使用此过程将 SAP HANA 文件系统迁移到单独的 Persistent Disk 卷。
查看迁移注意事项
- 数据迁移时长:对于 SAP HANA HA 系统,您可以通过取消注册辅助节点、删除其租户数据库,然后回收日志来缩短数据迁移时长。本指南中介绍的流程就采用了这种方法。
- 停机时间:对于 SAP HANA HA 系统,您需要先迁移辅助数据库,将其设为新的主数据库,然后再迁移之前的主数据库。这有助于尽可能缩短停机时间。
- 还原到现有磁盘:如果迁移过程中出现任何问题,您可以还原到现有磁盘,因为它们不受此过程的影响,并且在您自行删除之前都可用。如需了解详情,请参阅回退到现有磁盘。
准备工作
在将托管在单个磁盘上的 SAP HANA 文件系统迁移到每个文件系统对应的一个磁盘之前,请确保满足以下条件:
- SAP HANA 在支持 Hyperdisk 的 SAP 认证 Compute Engine 实例上运行。
- 具备有效的 SAP HANA 数据库备份。如果需要,您可以使用此备份恢复数据库。
- 如果目标 Compute Engine 实例属于高可用性 (HA) 集群,请确保集群处于维护模式。
- 如果您的 SAP HANA 数据库使用横向扩容部署,请针对每个 SAP HANA 实例重复本指南中的步骤。
- SAP HANA 数据库已启动并运行。对于高可用性系统,请确保数据库的主实例和辅助实例之间存在有效的复制。
- 为缩短数据复制时间,请从要迁移的 SAP HANA 卷中移除所有不必要的备份或媒体。
运行以下命令,验证要迁移的 SAP HANA 文件系统是否托管在单个磁盘上:
lsblk
输出类似于以下示例。您的输出可能与此示例不同,具体取决于您为 SAP HANA 文件系统采用的命名惯例,或者您的计算实例是否支持非易失性存储器 Express (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 系统类似。
下图展示了示例系统在文件系统迁移前后的架构:
示例 SAP 系统的配置详情如下:
- 机器类型:
n2-highmem-128
- 操作系统:SLES for SAP 15 SP5
- SAP HANA:HANA 2 SPS07,修订版 78
- 系统使用的磁盘类型:SSD 永久性磁盘 (
pd-ssd
) /hana/data
、/hana/log
、/hana/shared
和/usr/sap
卷会装载在同一磁盘上,并在 SAP HANA 的持久性设置中进行配置。以下示例展示了 SID 为ABC
的 SAP HANA 系统的/hana/data
和/hana/log
卷的持久性设置:[persistence] basepath_datavolumes = /hana/data/ABC basepath_logvolumes = /hana/log/ABC
将文件系统迁移到单个 Hyperdisk 卷
如需将 SAP HANA 纵向扩容 HA 部署的文件系统从单个 Persistent Disk 卷迁移到每个文件系统的一个 Hyperdisk 卷,请执行以下步骤:
为辅助实例做好迁移准备
将高可用性集群设置为维护模式:
crm maintenance on
验证 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
取消注册 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.
在 SAP HANA 系统的辅助实例中,删除所有租户数据库并回收日志:
停止租户数据库:
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,其中字母采用大写
删除您停止的租户数据库:
hdbsql -n localhost:3INSTANCE_NUMBER13 -u SYSTEM -p "SYSTEM_DB_PASSWORD" -j "DROP DATABASE TENANT_DB_SID"
回收日志:
hdbsql -n localhost:3INSTANCE_NUMBER13 -u SYSTEM -p "SYSTEM_DB_PASSWORD" -j "ALTER SYSTEM RECLAIM LOG"
对 SAP HANA 系统的次要实例中的所有租户数据库重复上述步骤。
以下示例显示了成功响应:
0 rows affected (overall time 9032.460 msec; server time 9032.273 msec)
停止 SAP HANA 系统的辅助实例:
sapcontrol -nr INSTANCE_NUMBER -function Stop
迁移辅助实例
为每个 SAP HANA 文件系统创建一个磁盘。对于此过程假设的示例系统,请创建 4 个磁盘,分别为
/hana/data
、/hana/log
、/hana/shared
和/usr/sap
各创建一个。如需为每个文件系统设置磁盘大小,您可以使用系统
lsblk
命令输出中显示的大小信息。如需了解有助于满足 SAP HANA 性能要求的建议最小磁盘大小、IOPS 和吞吐量,请参阅基于 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 项目的 IDUSR_SAP_DISK_TYPE
:您要部署以托管/usr/sap
卷的 Hyperdisk 类型,例如hyperdisk-extreme
。USR_SAP_DISK_SIZE
:您要为托管/usr/sap
卷的磁盘设置的大小ZONE
:要在其中部署新磁盘的 Compute Engine 可用区USR_SAP_DISK_IOPS
:您要为要创建的 Hyperdisk 设置的 IOPS,以托管/hana/data
。您可以根据性能要求设置 IOPS。SHARED_DISK_NAME
:您要为托管/hana/shared
卷的磁盘设置的名称SHARED_DISK_TYPE
:您要部署以托管/hana/shared
卷的 Hyperdisk 类型,例如hyperdisk-extreme
。SHARED_DISK_SIZE
:您要为托管/hana/shared
卷的磁盘设置的大小SHARED_DISK_IOPS
:您要为托管/hana/shared
卷的磁盘设置的 IOPSDATA_DISK_NAME
:您要为托管/hana/data
卷的磁盘设置的名称DATA_DISK_TYPE
:您要部署以托管/hana/data
卷的 Hyperdisk 类型,例如hyperdisk-extreme
DATA_DISK_SIZE
:您要为托管/hana/data
卷的磁盘设置的大小DATA_DISK_IOPS
:您要为托管/hana/data
卷的磁盘设置的 IOPSLOG_DISK_NAME
:您要为托管/hana/log
卷的磁盘设置的名称LOG_DISK_TYPE
:您要部署以托管/hana/log
卷的 Hyperdisk 类型,例如hyperdisk-extreme
LOG_DISK_SIZE
:您要为托管/hana/log
卷的磁盘设置的大小LOG_DISK_IOPS
:您要为托管/hana/log
卷的磁盘设置的 IOPS
将您创建的磁盘附加到托管 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 的名称。如需使用逻辑卷管理 (LVM),请完成以下步骤:
为您创建并挂接的新磁盘创建物理卷:
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
卷的磁盘的实际设备路径
创建卷组:
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
创建逻辑卷:
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
创建文件系统:
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
为 SAP HANA 文件系统创建临时目录:
mkdir -p /tmp/usr/sap mkdir -p /tmp/hana/shared mkdir -p /tmp/hana/data mkdir -p /tmp/hana/log
使用临时目录挂载新创建的卷:
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
将数据从源 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/
为 SAP HANA 文件系统卸载旧的逻辑卷:
umount /usr/sap umount /hana/shared umount /hana/data umount /hana/log
卸载为 SAP HANA 文件系统创建的临时卷:
umount /tmp/usr/sap umount /tmp/hana/shared umount /tmp/hana/data umount /tmp/hana/log
从托管 SAP HANA 数据库辅助实例的 Compute Engine 实例中,分离托管 SAP HANA 文件系统的永久性磁盘卷:
gcloud compute instances detach-disk SECONDARY_INSTANCE_NAME --disk=SOURCE_DISK_NAME \ --zone=ZONE
将
SOURCE_DISK_NAME
替换为托管 SAP HANA 文件系统的永久性磁盘卷的名称,您需要将该卷从计算实例中分离。以根用户或具有
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
挂载新创建的逻辑卷:
mount -a
验证文件系统占用的空间相关信息:
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
提升次要实例
以
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 实例的名称
启动 SAP HANA 数据库的辅助实例:
HDB start
或者,您也可以使用
sapcontrol
命令启动辅助实例:sapcontrol -nr INSTANCE_NUMBER -function StartSystem
在 SAP HANA 数据库的主实例上,以
SID_LCadm
用户身份确认 SAP HANA 系统复制处于活跃状态:python $DIR_INSTANCE/exe/python_support/systemReplicationStatus.py
确认系统复制处于活跃状态后,将 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
检查 HA 集群的状态:
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 ]
以 root 用户或具有
sudo
访问权限的用户身份,移除确保您的资源未设置为优先使用特定 Compute Engine 实例的约束条件:crm resource clear msl_SAPHana_SID_HDBINSTANCE_NUMBER
输出类似于以下内容:
INFO: Removed migration constraints for msl_SAPHana_ABC_HDB00
迁移之前的主实例
如需迁移 SAP HANA 系统的前主实例,请重复前面部分中提供的步骤。
让高可用性集群退出维护模式:
crm maintenance off
回退到现有磁盘
如果磁盘迁移失败,您可以回退到使用现有的永久性磁盘卷,因为它们包含迁移过程开始前存在的数据。
如需将 SAP HANA 数据库恢复到原始状态,请执行以下步骤:
- 停止托管 SAP HANA 数据库的 Compute Engine 实例。
- 分离您创建的 Hyperdisk 卷。
- 将现有的永久性磁盘卷重新挂接到计算实例。
- 启动计算实例。
清理
成功将 SAP HANA 文件系统迁移到各个磁盘后,请清理与您之前使用的永久性磁盘卷相关的资源。这包括磁盘快照和磁盘本身。
如需了解如何删除磁盘快照,请参阅管理磁盘快照。
如需删除 SAP HANA 系统正在使用的 Persistent Disk 卷,您可以运行
gcloud compute disks delete
命令:gcloud compute disks delete SOURCE_DISK_NAME --ZONE=ZONE