将 Db2 for 迁移LUW到EC2具有高可用性灾难恢复功能的 Amazon - AWS Prescriptive Guidance

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

将 Db2 for 迁移LUW到EC2具有高可用性灾难恢复功能的 Amazon

由 Feng Cai (AWS)、Aruna Gangireddy () 和 Venkatesan Govind AWS an () 创作 AWS

环境:生产

来源:IBM本地版 D LUW b2

目标:亚马逊上的 Db2 EC2

R 类型:更换主机

工作量:IBM

技术:迁移;数据库;操作系统

AWS服务:AWSDirect Connect;亚马逊EC2;亚马逊 S3;AWS站点到站点 VPN

Summary

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

此模式涵盖了如何使用 Db2 高可用性灾难恢复 () HADR 在短暂的中断窗口内完成 Db2 迁移。这种方法适用于位于 Little-endian Linux 平台上且未使用数据分区功能 () 的 Db2 数据库。DPF

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

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

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

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

  • AWS通过 “点对AWS点” VPN 或 AWS Direct Connect 连接的本地网络

  • 本地服务器与 Amazon 之间通过HADR端口EC2进行通信

限制

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

  • HADR在分区数据库环境中不支持。

  • HADR不支持对数据库日志文件使用原始 I/O(直接磁盘访问)。

  • HADR不支持无限日志记录。

  • LOGINDEXBUILD 必须设置为 YES,这将增加重建索引的日志使用量。

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

产品版本

  • LUW版本 11.5.9 及更高版本的 Db2

架构

源技术堆栈

  • Linux 上的 Db2 x86_64

目标技术堆栈

  • Amazon EC2

  • AWSIdentity and Access Management (IAM)

  • Amazon S3

  • AWS站点到站点 VPN

目标架构

在下图中,本地 Db2 作为主服务器在 db2-server1 运行。它有两个HADR待命目标。一个备用目标位于本地,并且是可选。另一个备用目标db2-ec2在亚马逊上EC2。将数据库切换到后AWS,将db2-ec2成为主数据库。

使用 Db2 在短暂停机时间内迁移本地 Db HADR 2 的工作流程。
  1. 日志从主本地数据库流式传输至备用本地数据库。

  2. 使用 Db2HADR,日志通过站点到站点从主本地数据库流式传输VPN到 Amazon 上的 Db2。EC2

  3. Db2 备份和存档日志从主本地数据库发送到上AWS的 S3 存储桶。

工具

AWS服务

其他工具

  • db2cli 是 Db2 的交互式命令。CLI

最佳实践

操作说明

任务描述所需技能

设置环境变量。

此模式使用以下名称和端口:

  1. Db2 本地主机名:db2-server1

  2. HADR备用主机名:db2-server2(如果当前HADR正在本地运行)

  3. Amazon EC2 主机名:db2-ec2

  4. 实例名称:db2inst1

  5. 数据库名称:SAMPLE

  6. HADR端口:

    • db2-server1: 50010

    • db2-server2: 50011

    • db2-ec2: 50012

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

DBA
任务描述所需技能

设置AWSCLI。

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

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

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

诸如大量更新批处理作业和网络速度减慢之类的情况可能会导致HADR备用服务器出现延迟。为了赶上进度,备用服务器需要来自主服务器的事务日志。请求日志位置顺序如下:

  • 主服务器上的活动日志目录

  • 备用服务器上的 LOGARCHMETH1LOGARCHMETH2 位置

  • 主服务器上的 LOGARCHMETH1LOGARCHMETH2 位置

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

db2 connect to sample db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs
DBA

运行在线数据库备份。

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

db2 backup db sample online to /backup
DBA
任务描述所需技能

创建 S3 存储桶。

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

aws s3api create-bucket --bucket hadrmig-db2 --region us-east-1
AWS管理员

创建IAM策略。

db2bucket.json文件包含访问 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:::hadrmig-db2/*", "arn:aws:s3:::hadrmig-db2" ] } ] }

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

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

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

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

将IAM策略附加到该IAM角色。

通常,运行 Db2 的EC2实例将具有由系统管理员分配的IAM角色。如果未分配任何IAM角色,则可以在亚马逊EC2控制台上选择修改IAM角色

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

aws iam attach-role-policy --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3hapolicy" --role-name db2s3harole
任务描述所需技能

在本地 Db2 服务器AWSCLI上进行配置。

AWSCLI使用之前生Secret Access Key成的Access Key ID和进行配置:

$ 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://hadrmig-db2/SAMPLE_backup
AWS管理员、AWS系统管理员

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

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

aws s3 sync /db2logs s3://hadrmig-db2/SAMPLE_LOGS

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

任务描述所需技能

创建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"
DBA

创建 Db2 存储访问别名。

Db2 使用存储访问别名通过 INGESTLOADBACKUP DATABASERESTORE DATABASE 命令直接访问 Amazon S3。

因为您为EC2实例分配了IAM角色,USER并且PASSWORD不是必需的:

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 'hadrmig-db2'"

DBA

设置暂存区域。

我们建议使用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_LOCAL_STAGING_PATH=/db2stage db2stop db2start
DBA

从备份映象恢复数据库。

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

db2 create db sample on /data1 db2 restore db sample from DB2REMOTE://DB2AWSS3/hadrmig-db2/SAMPLE_backup replace existing
DBA
任务描述所需技能

配置本地 Db2 服务器为主服务器。

将 HADR ondb2-server1(本地源)的数据库配置设置更新为主数据库。设置HADR_SYNCMODE为交易响应时间最短的SUPERASYNC模式:

db2 update db cfg for sample using HADR_LOCAL_HOST db2-server1 HADR_LOCAL_SVC 50010 HADR_REMOTE_HOST db2-ec2 HADR_REMOTE_SVC 50012 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully

预计本地数据中心和AWS本地数据中心之间会出现一些网络延迟。(您可根据网络可靠性设置不同 HADR_SYNCMODE 值。有关更多信息,请参阅相关资源部分)。

DBA

更改目标数据库日志归档目标。

更改目标数据库日志存档目标以匹配 Amazon EC2 环境:

db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/' LOGARCHMETH2 OFF DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully
DBA

在 Amazon EC2 服务器上为 Db2 进行配置HADR。

更新数据库配置,使其HADR处于db2-ec2待机状态:

db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully

DBA

验证HADR设置。

验证源服务器和目标 Db2 服务器上的HADR参数。

要验证是否已启db2-server1用,请运行以下命令:

db2 get db cfg for sample|grep HADR HADR database role = PRIMARY HADR local host name (HADR_LOCAL_HOST) = db2-server1 HADR local service name (HADR_LOCAL_SVC) = 50010 HADR remote host name (HADR_REMOTE_HOST) = db2-ec2 HADR remote service name (HADR_REMOTE_SVC) = 50012 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(52000) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0 HADR SSL certificate label (HADR_SSL_LABEL) = HADR SSL Hostname Validation (HADR_SSL_HOST_VAL) = OFF

要验证是否已启db2-ec2用,请运行以下命令:

db2 get db cfg for sample|grep HADR HADR database role = STANDBY HADR local host name (HADR_LOCAL_HOST) = db2-ec2 HADR local service name (HADR_LOCAL_SVC) = 50012 HADR remote host name (HADR_REMOTE_HOST) = db2-server1 HADR remote service name (HADR_REMOTE_SVC) = 50010 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = HADR log write synchronization mode (HADR_SYNCMODE) = SUPERASYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(52000) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0 HADR SSL certificate label (HADR_SSL_LABEL) = HADR SSL Hostname Validation (HADR_SSL_HOST_VAL) = OFF

HADR_LOCAL_HOSTHADR_LOCAL_SVCHADR_REMOTE_HOST、和HADR_REMOTE_SVC参数表示一个主设置和一个备用HADR设置。

DBA

启动 Db2 HADR 实例。

首先在备用服务器db2-ec2上启动 Db2 HADR 实例:

db2 start hadr on db sample as standby DB20000I The START HADR ON DATABASE command completed successfully.

在主(源)服务器HADRdb2-server1上启动 Db2:

db2 start hadr on db sample as primary DB20000I The START HADR ON DATABASE command completed successfully.

内部部署的 Db2 和 Amazon 上的 Db2 之间的HADR连接现EC2已成功建立。Db2 主服务器 db2-server1 开始将事务日志记录实时传输至 db2-ec2

DBA
任务描述所需技能

在 Amazon 上添加 Db2 EC2 作为辅助备用服务器。

如果HADR正在本地 Db2 实例上运行,则可以通过在上运行以下命令将 Amazon 上的 Db2 添加EC2为辅助备用HADR_TARGET_LIST实例:db2-ec2

db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010|db2-server2:50011" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.

DBA

将辅助备用信息添加至本地服务器。

更新 HADR_TARGET_LIST 两台本地服务器(主服务器和备用服务器)。

开启db2-server1,运行以下代码:

db2 update db cfg for sample using HADR_TARGET_LIST "db2-server2:50011|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.

开启db2-server2,运行以下代码:

db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.

DBA

验证HADR设置。

验证源服务器和目标 Db2 服务器上的HADR参数。

开启db2-server1,运行以下代码:

db2 get db cfg for sample|grep HADR HADR database role = PRIMARY HADR local host name (HADR_LOCAL_HOST) = db2-server1 HADR local service name (HADR_LOCAL_SVC) = 50010 HADR remote host name (HADR_REMOTE_HOST) = db2-server2 HADR remote service name (HADR_REMOTE_SVC) = 50011 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = db2-server2:50011|db2-ec2:50012 HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(52000) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0 HADR SSL certificate label (HADR_SSL_LABEL) = HADR SSL Hostname Validation (HADR_SSL_HOST_VAL) = OFF

开启db2-server2,运行以下代码:

db2 get db cfg for sample|grep HADR HADR database role = STANDBY HADR local host name (HADR_LOCAL_HOST) = db2-server2 HADR local service name (HADR_LOCAL_SVC) = 50011 HADR remote host name (HADR_REMOTE_HOST) = db2-server1 HADR remote service name (HADR_REMOTE_SVC) = 50010 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = db2-server1:50010|db2-ec2:50012 HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(52000) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0 HADR SSL certificate label (HADR_SSL_LABEL) = HADR SSL Hostname Validation (HADR_SSL_HOST_VAL) = OFF

开启db2-ec2,运行以下代码:

db2 get db cfg for sample|grep HADR HADR database role = STANDBY HADR local host name (HADR_LOCAL_HOST) = db2-ec2 HADR local service name (HADR_LOCAL_SVC) = 50012 HADR remote host name (HADR_REMOTE_HOST) = db2-server1 HADR remote service name (HADR_REMOTE_SVC) = 50010 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = db2-server1:50010|db2-server2:50011 HADR log write synchronization mode (HADR_SYNCMODE) = SUPERASYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(52000) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0 HADR SSL certificate label (HADR_SSL_LABEL) = HADR SSL Hostname Validation (HADR_SSL_HOST_VAL) = OFF

HADR_LOCAL_HOST、、HADR_LOCAL_SVCHADR_REMOTE_HOSTHADR_REMOTE_SVC、和HADR_TARGET_LIST参数表示一个主设置和两个备用HADR设置。

停止并启动 Db2 HADR。

HADR_TARGET_LIST 现在已在所有三台服务器上进行设置。每个 Db2 服务器都了解其他两个。停止并重新启动HADR(短暂停机)以利用新配置。

开启db2-server1,运行以下命令:

db2 stop hadr on db sample db2 deactivate db sample db2 activate db sample

开启db2-server2,运行以下命令:

db2 deactivate db sample db2 start hadr on db sample as standby SQL1766W The command completed successfully

开启db2-ec2,运行以下命令:

db2 start hadr on db sample as standby SQL1766W The command completed successfully

开启db2-server1,运行以下命令:

db2 start hadr on db sample as primary SQL1766W The command completed successfully

本地和 Amazon 上的 Db2 之间的HADR连接EC2现已成功建立。Db2 主服务器 db2-server1 开始将事务日志记录实时流式传输至 db2-server2db2-ec2

DBA
任务描述所需技能

确保备用服务器上没有HADR延迟。

从主服务器检查HADR状态db2-server1HADR_STATE 处于 REMOTE_CATCHUP 状态时不要惊慌,当 HADR_SYNCMODE 设置为 SUPERASYNC 时,这是正常的。an PRIMARY_LOG_TIME d STANDBY_REPLAY_LOG_TIME 显示它们处于同步状态:

db2pd -hadr -db sample HADR_ROLE = PRIMARY REPLAY_TYPE = PHYSICAL HADR_SYNCMODE = SUPERASYNC STANDBY_ID = 2 LOG_STREAM_ID = 0 HADR_STATE = REMOTE_CATCHUP ..... PRIMARY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292) STANDBY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292) STANDBY_REPLAY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)
DBA

进行HADR接管。

要完成迁移,请db2-ec2运行 ta HADR keover 命令创建主数据库。使用命令验证db2pdHADR_ROLE值:

db2 TAKEOVER HADR ON DATABASE sample DB20000I The TAKEOVER HADR ON DATABASE command completed successfully. db2pd -hadr -db sample Database Member 0 -- Database SAMPLE -- Active -- Up 0 days 00:03:25 -- Date 2022-10-26-02.46.45.048988 HADR_ROLE = PRIMARY REPLAY_TYPE = PHYSICAL

要完成向的迁移AWS,请将应用程序连接指向 Amazon EC2 上的 Db2。

故障排除

问题解决方案

如果NAT出于防火墙和安全原因使用,则主机可能有两个 IP 地址(一个内部地址和一个外部地址),这可能会导致 HADR IP 地址检查失败。该START HADR ON DATABASE命令将返回以下消息:

HADR_LOCAL_HOST:HADR_LOCAL_SVC (-xx-xx-xx-xx.:50011 (xx.xx.xx.xx:50011)) on remote database is different from HADR_REMOTE_HOST:HADR_REMOTE_SVC (xx-xx-xx-xx.:50011 (x.x.x.x:50011)) on local database.

HADR在NAT环境中提供支持,您可以使用内部地址和外部地址HADR_LOCAL_HOST进行配置。例如,如果 Db2 服务器有内部名称 host1 和外部名称 host1E,则 HADR_LOCAL_HOST 可以是 HADR_LOCAL_HOST: "host1 | host1E"

相关资源