Amazon Web Services ブログ

AWS Database Migration Service を使用した Amazon RDS for SQL Server の継続的なレプリケーションの紹介

AWS Database Migration Service (AWS DMS)Amazon RDS for SQL Server が新たに Amazon RDS for SQL Server からの継続的なレプリケーションをサポートするという新機能を発表できることを嬉しく思います。AWS DMSは、データベースをAWSに迅速かつより安全に移行できるサービスです。また、AWS内のデータ移行にも使用できます。Oracle、Microsoft SQL Server、PostgreSQLなど、広く普及している商用およびオープンソースデータベース間でデータを移行できます。このサービスはSQL ServerからSQL Serverのような同エンジン間の移行と、SQL ServerからAmazon Aurora MySQLまたはSQL ServerからAmazon RDS for MySQLなどの異なるデータベースプラットフォーム間の移行の両方が可能です。

この記事では、Microsoft SQL Server からの継続的なレプリケーションプロセスの概要を簡単に説明します。また、MS-CDC(SQL Serverでの変更データキャプチャ)とAWS DMSを使用して、Amazon RDS for SQL Serverからの継続的な変更をストリーミングするための新機能も紹介します。

 

背景

AWS DMSは異なるエンジン間の移行(SQL ServerからMySQLへの移行など)用に設計されています。ただし、同エンジン間(SQL ServerからSQL Serverなど)の移行もサポートしています。これまではソースインスタンスで実際に行われていた変更にアクセスする必要がありました。

主キーを持つテーブルの場合、AWS DMSはデフォルトで以下のように使用されるように設計されています。

1.SQL Serverから進行中の変更を移行するタスクを設定すると、AWS DMSは最初に次のコマンドを使用してトランザクションレプリケーション用のデータベースを有効にします。

use master
exec sp_replicationdboption @dbname = 'db_name', @optname = 'publish', @value = 'true'
go

sp_replicationdboptionコマンドを実行するには、ソースSQL Serverでsysadmin権限が必要です。したがって、事前設定なしにSQL ServerをAWS DMSのソースとして使用するための要件は、ユーザーにsysadmin権限を持たせることです。sysadmin権限なしにAWS DMSを使用してサポートされたターゲットへ移行を実施する場合は、事前に「Microsoft SQL Server データベースの AWS DMS のソースとしての使用」を参照して、ソースとなるSQL Server の準備方法を確認してください。

2.次に、ディストリビューションデータベースと、決して真にならないフィルタ(1 = 0)を含むパブリケーションを作成します。この手順は、SQL Serverのトランザクションログに必要なログがあることを確認するためにのみ実行されます。これにより、AWS DMSはソース上で実行されている更新ステートメント全体にアクセスできるようになり、進行中の変更に関する詳細情報を取得できるようになります。

3.STEP2の完了以降、AWS DMSはレプリケーションアーティファクトを使用しません。トランザクションログまたはトランザクションログバックアップから必要な情報が全て利用可能になると、AWS DMSはfn_dblog()およびfn_dump_dblog()関数を実行し、ログシーケンス番号(LSN)を使用してトランザクションログまたはトランザクションログバックアップから直接変更を読み取ります。

主キーのないテーブルの場合、AWS DMSはMS-CDCを使用して変更を送信します。MS-CDCは、変更の詳細を利用しやすい(AWS DMSが理解し移行できる)リレーショナル形式で格納します。CDCが使用する変更データのソースは、SQL Serverのトランザクションログです。insert、update、deleteが追跡対象のソーステーブルに適用されると、それらの変更を記述するエントリがログに追加されます。キャプチャプロセスは追加されたログにアクセスします。AWS DMSは、前述したログアクセス機能を使用しLSNに基づいて、アクティブなトランザクションログとバックアップされたトランザクションログからの変更を読み取ります。

Amazon RDS for SQL Serverは、パッチ、バックアップ、高可用性など時間のかかるタスクを自動化するマネージド型のデータベースサービスです。マネージド型のデータベースサービスのため、Amazon RDSではsysadmin権限が許可されず、エンジンの全機能にアクセスできる訳ではありません。SQL Serverのレプリケーションは、Amazon RDSではまだ使用できない機能の1つです。そのため、AWS DMSチームはAmazon RDS SQL Serverチームと協力して、Amazon RDS SQL ServerインスタンスでMS-CDC機能を利用できるようにしました。この機能を使用すると、AWS DMSを使用してAmazon RDS SQL Serverインスタンスから移行/複製することができます。

デフォルトでは、AWS DMSは主キーの有無に関係なく、MS-CDCを使用してAmazon RDS SQL Serverテーブルから変更を移行できます。SQL ServerのMS-CDCは、SQL Server 2016 SP1まではEnterpriseエディションでのみ使用可能であり、SQL Server 2016 SP1以降はStandardエディションでも使用可能であることに留意してください。

 

セットアップ:RDS for SQL Server をAWS DMSのCDCソースとして使用する

1.DBインスタンスにマスターユーザーとしてログインし、データベースに対してMS-CDC用の設定を実施:

exec msdb.dbo.rds_cdc_enable_db 'db_name'

2.MS-CDCを有効化する為、各テーブルで下記コマンドを実行:

exec sys.sp_cdc_enable_table 
@source_schema = N'db_name', 
@source_name = N'table_name', 
@role_name = NULL, 
@supports_net_changes = 1 
GO

3.下記コマンドを使用して、ソース上で変更を保持する期間を設定:

EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 86400

AWS DMSが変更を反映する為に、ソースDBインスタンスで変更が保持される時間を、引数pollingintervalに秒単位で指定します。これにより、この期間のトランザクションログの再利用が防止され、トランザクションログが増加するにつれて、ストレージの使用率が増える恐れがあります。ポーリング間隔を24時間に設定して、AWS DMSに変更を読み込む時間が十分にあるようにすることを推奨します。しかし、ソースの変化率に基づいてポーリング間隔を短くしてテストすることもできます。

注意:fn_dblog()関数にアクセスするには、Amazon RDS for SQL Serverのマスターユーザー権限が必要です。また、Multi-AZ 配置のAmazon RDS for SQL Server インスタンスの場合、プライマリインスタンスで変更されたCDCパラメータは、スタンバイインスタンスに引き継がれません。これらのパラメータをスタンバイインスタンスに確実に適用するには、Amazon RDS for SQL Serverのrds_set_configurationストアドプロシージャを使用します。

この設定が完了したら、ソースエンドポイント、ターゲットエンドポイント、移行タスクを作成して、Amazon RDS for SQL Serverインスタンスからいずれかのサポートされたターゲットに移行できます。SQL ServerからAurora MySQLへの移行を示す詳細な手順の例は、「ステップバイステップ移行」を参照してください。

 

まとめ

Amazon RDS for SQL Serverインスタンスから任意のAWS DMSサポート対象へデータを連続的にストリームする機能により、新しいソースのサポートが開始されます。これによってサポート対象に追加されたソースからのレプリケーションが可能となり、複数のロケーションから処理が可能となります。

お読み頂きありがとうございました。


 

About the Authors

 

Arun Thiagarajanは、Amazon Web ServicesのDatabase Migration Service(DMS)およびSchema Conversion Tool(SCT)チームのデータベースエンジニアです。彼はDBの移行に関連する課題に取り組み、顧客と緊密に連携してDMSサービスの真の可能性を実現するのを支援します。 DMSとSCTを使用して100種類のデータベースをAWSクラウドに移行する事に貢献しました。

 

 

翻訳は上原が担当しました。(原文はこちら