本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 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
先决条件和限制
先决条件
限制
Db2 本地实例和 Amazon EC2 必须位于同一个平台系列上。
HADR在分区数据库环境中不支持。
HADR不支持对数据库日志文件使用原始 I/O(直接磁盘访问)。
HADR不支持无限日志记录。
LOGINDEXBUILD
必须设置为 YES
,这将增加重建索引的日志使用量。
必须记录 Db2 本地工作负载。在数据库配置中设置 blocknonlogged=yes
以阻止任何未记录的事务。
产品版本
架构
源技术堆栈
目标技术堆栈
目标架构
在下图中,本地 Db2 作为主服务器在 db2-server1
运行。它有两个HADR待命目标。一个备用目标位于本地,并且是可选。另一个备用目标db2-ec2
在亚马逊上EC2。将数据库切换到后AWS,将db2-ec2
成为主数据库。
日志从主本地数据库流式传输至备用本地数据库。
使用 Db2HADR,日志通过站点到站点从主本地数据库流式传输VPN到 Amazon 上的 Db2。EC2
Db2 备份和存档日志从主本地数据库发送到上AWS的 S3 存储桶。
AWS服务
其他工具
最佳实践
操作说明
任务 | 描述 | 所需技能 |
---|
设置环境变量。 | 此模式使用以下名称和端口: Db2 本地主机名:db2-server1 HADR备用主机名:db2-server2 (如果当前HADR正在本地运行) Amazon EC2 主机名:db2-ec2 实例名称:db2inst1 数据库名称:SAMPLE 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备用服务器出现延迟。为了赶上进度,备用服务器需要来自主服务器的事务日志。请求日志位置顺序如下: 在此设置中,/db2logs 由 LOGARCHMETH2 在源上设置作为暂存区域。此目录中的存档日志将同步到 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 使用存储访问别名通过 INGEST 、LOAD 、BACKUP DATABASE 或 RESTORE 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=ON DB2_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_HOST 、HADR_LOCAL_SVC HADR_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_SVC HADR_REMOTE_HOST HADR_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-server2 和 db2-ec2 。 | DBA |
任务 | 描述 | 所需技能 |
---|
确保备用服务器上没有HADR延迟。 | 从主服务器检查HADR状态db2-server1 。HADR_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 命令创建主数据库。使用命令验证db2pd 该HADR_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" 。 |
相关资源