使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间

Feng Cai、Ambarish Satarkar 和 Saurabh Sharma,Amazon Web Services

摘要

当客户将其适用于 LUW 的 IBM Db2(Linux、UNIX 和 Windows)工作负载迁移到亚马逊网络服务 (AWS) 时,使用带有自带许可 (BYOL EC2) 模式的亚马逊弹性计算云 (Amazon) 是最快的方法。但是,将大量数据从本地 Db2 迁移到 AWS 可能是一项挑战,尤其是在停机时间较短的情况下。许多客户尝试将停机窗口设置为 30 分钟以下,这样留给数据库本身的时间就很少了。

此模式涵盖如何使用事务日志传送在较短的中断窗口内完成 Db2 迁移。此方法适用于小端 Linux 平台上的 Db2。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 在与本地文件系统布局相匹配的 EC2 实例上运行的 Db2 实例

  • 实例可以访问的亚马逊简单存储服务 (Amazon S3) Service 存储桶 EC2

  • AWS 身份和访问管理 (IAM) 策略和角色,用于对 Amazon S3 进行编程调用

  • Amazon EC2 和本地服务器上的时区和系统时钟同步

  • 通过 AWS Site-to-SiteVPN 或 AWS Di rect Connect 连接到 AWS 的本地网络

限制

  • Db2 本地实例和 Amazon EC2 必须位于同一个平台系列上。

  • 必须记录 Db2 本地工作负载。若要阻止任何未记录的事务,请在数据库配置中设置 blocknonlogged=yes

产品版本

  • 适用于 LUW 版本 11.5.9 及更高版本的 Db2

架构

源技术堆栈

  • Linux 上的 Db2 x86_64

目标技术堆栈

  • Amazon EBS

  • Amazon EC2

  • AWS Identity and Access Management (IAM)

  • Amazon S3

  • AWS Site-to-Site VPN 或直接连接

目标架构

下图显示了一个在本地运行的 Db2 实例,该实例通过虚拟专用网络 (VPN) 连接到 Amazon 上的 Db2。 EC2虚线代表您的数据中心和 Amazon Web Services Cloud 之间的 VPN 隧道。

使用事务日志传送在短暂的中断窗口内完成 Db2 迁移的工作流程。

工具

Amazon Web Services

其他工具

  • db2cli 是 Db2 交互式 CLI 命令。

最佳实践

操作说明

Task描述所需技能

设置环境变量。

此模式使用以下名称:

  • 实例名称:db2inst1

  • 数据库名称:SAMPLE

您可更改它们以适应您的环境。

数据库管理员
Task描述所需技能

设置 AWS CLI。

要下载并安装最新版本的 AWS CLI,请运行以下命令:

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
Linx 管理员

设置 Db2 归档日志的本地目标。

要使 Amazon EC2 上的目标数据库与本地源数据库保持同步,需要从源数据库检索最新的事务日志。

在此设置中,/db2logsLOGARCHMETH2 在源上设置作为暂存区域。此目录中的存档日志将同步到 Amazon S3 中,并由亚马逊上的 Db2 访问。 EC2使用 LOGARCHMETH2 模式,原因是 LOGARCHMETH1 可能已配置为使用 AWS CLI 命令无法访问的第三方供应商工具。要检索日志,请运行以下命令:

db2 connect to sample db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs
数据库管理员

运行在线数据库备份。

运行在线数据库备份,并将其保存到本地备份文件系统:

db2 backup db sample online to /backup
数据库管理员
Task描述所需技能

创建 S3 存储桶。

为本地服务器创建 S3 存储桶,以便将备份 Db2 映象和日志文件发送到 AWS 上。Amazon 也将访问该存储桶 EC2:

aws s3api create-bucket --bucket logshipmig-db2 --region us-east-1
AWS 系统管理员

创建一个 IAM 策略。

db2bucket.json文件包含访问 Amazon S3 存储桶的 IAM 策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt", "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload", "s3:ListBucket", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::logshipmig-db2/*", "arn:aws:s3:::logshipmig-db2" ] } ] }

要创建策略,请使用以下 AWS CLI 命令:

aws iam create-policy \ --policy-name db2s3policy \ --policy-document file://db2bucket.json

JSON 输出显示了策略的亚马逊资源名称 (ARN),其中aws_account_id代表您的账户 ID:

"Arn": "arn:aws:iam::aws_account_id:policy/db2s3policy"
AWS 管理员、AWS 系统管理员

将 IAM 策略附加到 EC2 实例使用的 IAM 角色。

在大多数 AWS 环境中,正在运行的 EC2 实例都由您的系统管理员设置的 IAM 角色。如果未设置 IAM 角色,请创建该角色并在 EC2 控制台上选择 M odify IAM 角色以将该角色与托管 Db2 数据库的 EC2 实例相关联。将 IAM 策略附加到带有策略的 IAM 角色 ARN:

aws iam attach-role-policy \ --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3policy" \ --role-name db2s3role

附加策略后,任何与 IAM 角色关联的 EC2 实例都可以访问 S3 存储桶。

AWS 管理员、AWS 系统管理员
Task描述所需技能

在本地 Db2 服务器上配置 AWS CLI。

使用在前面的步骤中Secret Access Key生成的Access Key ID和配置 AWS CLI:

$ aws configure AWS Access Key ID [None]: ************* AWS Secret Access Key [None]: *************************** Default region name [None]: us-east-1 Default output format [None]: json

AWS 管理员、AWS 系统管理员

将备份映象发送到 Amazon S3。

早些时候,联机数据库备份已保存至 /backup 本地目录中。要将该备份映像发送到 S3 存储桶,请运行以下命令:

aws s3 sync /backup s3://logshipmig-db2/SAMPLE_backup
AWS 管理员、迁移工程师

将 Db2 存档日志发送至 Amazon S3。

将本地 Db2 存档日志与 Amazon 上的目标 Db2 实例可以访问的 S3 存储桶同步: EC2

aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG

使用 cron 或其他计划工具定期以运行此命令。频率取决于源数据库归档事务日志文件的频率。

AWS 管理员、迁移工程师
Task描述所需技能

创建 PKCS12 密钥库。

Db2 使用公钥加密标准 (PKCS) 加密密钥库,保障 AWS 访问密钥的安全。创建密钥库并配置源 Db2 实例以使用它:

gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"
数据库管理员

创建 Db2 存储访问别名。

要创建存储访问别名,请使用以下脚本语法:

db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"

例如,您的脚本可能如下所示:

db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'logshipmig-db2'"

数据库管理员

设置暂存区域。

默认情况下,Db2 使用 DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH 作为过渡区域,向 Amazon S3 上传和从 Amazon S3 下载文件。默认路径位于实例主目录 sqllib/tmp/RemoteStorage.xxxx 下,xxxx 引用 Db2 分区号。请注意,暂存区域必须有足够的容量来容纳备份映象和日志文件。您可使用注册表将暂存区域指向其他目录。

我们还建议使用DB2_ENABLE_COS_SDK=ONDB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore、和awssdk库链接绕过 Amazon S3 暂存区进行数据库备份和恢复:

#By root: cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/ #By db2 instance owner: db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage db2set DB2_ENABLE_COS_SDK=ON Db2set DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore db2stop db2start
数据库管理员

从备份映象恢复数据库。

EC2 从 S3 存储桶中的备份映像还原 Amazon 上的目标数据库:

db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing
数据库管理员

前滚数据库。

恢复完成后,目标数据库进入向前滚挂起状态。配置LOGARCHMETH1和,以LOGARCHMETH2便 Db2 知道从何处获取事务日志文件:

db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/' db2 update db cfg for SAMPLE using LOGARCHMETH2 OFF

启动数据库向前滚动:

db2 ROLLFORWARD DATABASE sample to END OF LOGS

此命令处理已传输至 S3 存储桶的所有日志文件。根据本地 Db2 服务器上 s3 sync 命令的频率定期运行该命令。例如,如果 s3 sync 每小时运行一次,并且同步所有日志文件需要 10 分钟,则将命令设置为每小时后运行 10 分钟。

数据库管理员
Task描述所需技能

将目标数据库联机。

在割接窗口中,执行下列操作之一:

  • 将本地数据库放入 ADMIN MODE,然后运行 s3 sync 命令强制存档最后一个事务日志。

  • 关闭数据库。

将最后一个事务日志同步到 Amazon S3 后,最后一次运行该ROLLFORWARD命令:

db2 rollforward DB sample to END OF LOGS db2 rollforward DB sample complete Rollforward Status .... Rollforward status = not pending .... DB20000I The ROLLFORWARD command completed successfully. db2 activate db sample DB20000I The ACTIVATE DATABASE command completed successfully.

将目标数据库联机,并将应用程序连接指向 Amazon EC2 上的 Db2。

数据库管理员

故障排除

事务解决方案

如果多个数据库在不同的主机 (DEV、QA、PROD) 上具有相同的实例名和数据库名称,则备份和日志可能会进入同一个子目录。

为 DEV、QA 和 PROD 使用不同的 S3 存储桶,并添加主机名作为子目录前缀以避免混淆。

如果在同一位置有多个备份映像,则恢复时会出现以下错误:

SQL2522N More than one backup file matches the time stamp value provided for the backed up database image.

restore命令中,添加备份的时间戳:

db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup taken at 20230628164042 replace existing

相关资源