{Aurora}AWS リージョン間での Amazon Aurora MySQL DB クラスターのレプリケーション

ソース DB クラスターごとに、リードレプリカとすることができるクロスリージョン DB クラスターは最大 5 つです。

グローバルデータベースとの相違点:
グローバルデータベースの場合、プライマリ DB クラスターからすべてのセカンダリへのレプリケーションは、
データベースエンジンではなく Aurora ストレージレイヤーによって処理されるため、
変更をレプリケートする際のラグタイムは 通常は 1 秒未満で、最小となります。

Aurora PostgreSQLベースの DB クラスターは、異なる AWS リージョンの Aurora レプリカをサポートしていません。

(1)暗号化なしの場合

-- ソース DB クラスターの作成

aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot

aws rds create-db-cluster \
--db-cluster-identifier cluster11 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier cluster11-instance01 \
--db-cluster-identifier cluster11 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade


-- クロスリージョンリードレプリカDB クラスターの作成
export AWS_DEFAULT_REGION=ap-northeast-3

aws rds create-db-cluster \
--db-cluster-identifier cluster12 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--replication-source-identifier arn:aws:rds:ap-northeast-1:999999999999:cluster:cluster11


aws rds describe-db-clusters --db-cluster-identifier cluster12
aws rds describe-db-clusters | jq -c '.DBClusters | [.DBClusterIdentifier , .Status]'


aws rds create-db-instance \
--db-instance-identifier cluster12-instance01 \
--db-cluster-identifier cluster12 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

 

-- リードレプリカをスタンドアロンのDB クラスターに昇格させる
aws rds promote-read-replica-db-cluster \
--db-cluster-identifier cluster12

(2)暗号化ありの場合

-- ソース DB クラスターの作成

aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot

aws rds create-db-cluster \
--db-cluster-identifier cluster21 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01 \
--storage-encrypted

aws rds create-db-instance \
--db-instance-identifier cluster21-instance01 \
--db-cluster-identifier cluster21 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade


-- クロスリージョンリードレプリカDB クラスターの作成
export AWS_DEFAULT_REGION=ap-northeast-3

aws rds create-db-cluster \
--db-cluster-identifier cluster22 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--replication-source-identifier arn:aws:rds:ap-northeast-1:999999999999:cluster:cluster21 \
--storage-encrypted \
--kms-key-id arn:aws:kms:ap-northeast-3:999999999999:key/11111111-2222-3333-4444-555555555555 \
--source-region ap-northeast-1


クロスリージョンレプリカ側ではカスタマー管理CMKを使用する必要あり


aws rds describe-db-clusters --db-cluster-identifier cluster22
aws rds describe-db-clusters | jq -c '.DBClusters | [.DBClusterIdentifier , .Status]'


aws rds create-db-instance \
--db-instance-identifier cluster22-instance01 \
--db-cluster-identifier cluster22 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade


-- リードレプリカをスタンドアロンのDB クラスターに昇格させる
aws rds promote-read-replica-db-cluster \
--db-cluster-identifier cluster22

{Aurora}Amazon Aurora MySQL DB クラスターでの高度な監査の使用

-- 高度な監査の有効化

aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=server_audit_logging,ParameterValue=ON,ApplyMethod=immediate


vim a.json
[
{
"ParameterName": "server_audit_events",
"ParameterValue": "CONNECT,QUERY,TABLE",
"ApplyMethod": "immediate"
},
{
"ParameterName": "server_audit_incl_users",
"ParameterValue": "root",
"ApplyMethod": "immediate"
}
]

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters file://a.json

 

aws rds create-db-cluster \
--db-cluster-identifier cluster12 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier cluster12-instance01 \
--db-cluster-identifier cluster12 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

 


-- 監査ログの表示

aws rds describe-db-log-files --db-instance-identifier cluster12-instance01

aws rds download-db-log-file-portion \
--db-instance-identifier cluster12-instance01 \
--starting-token 0 \
--output text \
--log-file-name audit/audit.log.2.2021-07-23-11-55.0 > audit.txt


★監査対象ユーザを指定しているが、rdsadminもログに含まれてしまう

 

{Aurora}並列クエリを使用する DB クラスターの作成

Aurora MySQL の並列クエリのアーキテクチャは、他のデータベースシステムの類似の名前の付いた特徴とは異なります。
並列処理は、クエリコーディネーターとして機能する Aurora MySQL サーバーとは独立して、ストレージレイヤーで行われます。

db.t2 または db.t3 インスタンスクラスでは、並列クエリは使用できません

並列クエリでは、テーブルに ROW_FORMAT=Compact または ROW_FORMAT=Dynamic の設定が使用されている必要がある


-- 並列クエリと Aurora MySQL のバージョンの互換性の確認

aws rds describe-db-engine-versions \
--region ap-northeast-1 \
--engine aurora-mysql \
--query '*[]|[?SupportsParallelQuery == `true`].[EngineVersion]' --output text


-- 並列クエリを使用する DB クラスターの作成

aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01


aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=aurora_parallel_query,ParameterValue=ON,ApplyMethod=immediate

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=aurora_disable_hash_join,ParameterValue=OFF,ApplyMethod=immediate


aws rds create-db-cluster \
--db-cluster-identifier cluster11 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier cluster11-instance01 \
--db-cluster-identifier cluster11 \
--db-instance-class db.r5.large \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

 


-- 新しいクラスターが並列クエリを使用できることを確認する
select @@aurora_parallel_query,@@aurora_disable_hash_join;

aurora_parallel_query の設定が true で、aurora_disable_hash_join の設定が false になっていることを確認します。


-- 並列クエリを使用しているステートメントの確認


select @@innodb_default_row_format,@@innodb_file_format;

innodb_default_row_formatの設定がdynamicであることを確認


SET optimizer_switch='hash_join=on';

並列クエリの場合explainのExtraに「Using parallel query」が表示される

show global status like 'Aurora_pq_%';

 

 

{Aurora}障害挿入クエリを使用した Amazon Aurora のテスト

-- テスト用クラスタ作成

aws rds create-db-cluster \
--db-cluster-identifier cluster01 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password'

aws rds create-db-instance \
--db-instance-identifier cluster01-instance01 \
--db-cluster-identifier cluster01 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

aws rds create-db-instance \
--db-instance-identifier cluster01-instance02 \
--db-cluster-identifier cluster01 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade


インスタンスのクラッシュのテスト

ALTER SYSTEM CRASH NODE;


②Aurora レプリカの障害のテスト

ALTER SYSTEM SIMULATE 100 PERCENT READ REPLICA FAILURE
TO ALL
FOR INTERVAL 30 SECOND;


③ディスクの障害のテスト
SHOW VOLUME STATUS;

ALTER SYSTEM SIMULATE 100 PERCENT DISK FAILURE
IN DISK 1
FOR INTERVAL 30 SECOND;

④ディスクの輻輳のテスト
ALTER SYSTEM SIMULATE 100 PERCENT DISK CONGESTION
BETWEEN 50 AND 100 MILLISECONDS
IN DISK 1
FOR INTERVAL 30 SECOND;

-- テスト用クラスタ削除

aws rds delete-db-instance \
--db-instance-identifier cluster01-instance02 \
--skip-final-snapshot

aws rds delete-db-instance \
--db-instance-identifier cluster01-instance01 \
--skip-final-snapshot

aws rds delete-db-cluster \
--db-cluster-identifier cluster01 \
--skip-final-snapshot

 

Aurora PostgreSQL の障害挿入クエリは現在、以下のバージョンでサポートされています。

バージョン 2.4 (PostgreSQL バージョン 10.11 と互換性あり)。
バージョン 3.2 (PostgreSQL バージョン 11.7 と互換性あり)。

-- テスト用クラスタ作成

aws rds create-db-cluster \
--db-cluster-identifier cluster02 \
--engine aurora-postgresql \
--engine-version 11.7 \
--master-username postgres \
--master-user-password 'password'

aws rds create-db-instance \
--db-instance-identifier cluster02-instance01 \
--db-cluster-identifier cluster02 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--no-auto-minor-version-upgrade

aws rds create-db-instance \
--db-instance-identifier cluster02-instance02 \
--db-cluster-identifier cluster02 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--no-auto-minor-version-upgrade


インスタンスのクラッシュのテスト

SELECT aurora_inject_crash ('node');

②Aurora レプリカの障害のテスト

SELECT aurora_inject_replica_failure( 100, 30, '' );


③ディスクの障害のテスト
SELECT * FROM aurora_show_volume_status();

SELECT aurora_inject_disk_failure( 100, 1, true , 30 );


④ディスクの輻輳のテスト
SELECT aurora_inject_disk_congestion( 100, 1, true, 30, 50, 100 );


-- テスト用クラスタ削除

aws rds delete-db-instance \
--db-instance-identifier cluster02-instance02 \
--skip-final-snapshot

aws rds delete-db-instance \
--db-instance-identifier cluster02-instance01 \
--skip-final-snapshot

aws rds delete-db-cluster \
--db-cluster-identifier cluster02 \
--skip-final-snapshot

 

{Aurora}Aurora DB クラスターのバックトラック

Aurora DB クラスターのバックトラックは、特定の AWS リージョンおよび特定の Aurora MySQL バージョンでのみ利用可能です。


バックトラック機能は、新しい DB クラスターの作成時または DB クラスターのスナップショットの復元時に有効化できます。

バックトトラックウィンドウの上限は 72 時間です。

バックトラックプロセス中は DB クラスターが使用できなくなります。通常、このプロセスには数分かかります。

 

★バックトラックテスト後クラスタが削除できない問題発生→サポート問い合わせして解消。単に時間がかかっていただけか?

-- バックトラックの設定

aws rds create-db-cluster \
--db-cluster-identifier cluster01 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--backtrack-window 3600

aws rds create-db-instance \
--db-instance-identifier cluster01-instance01 \
--db-cluster-identifier cluster01 \
--db-instance-class db.t3.small \
--engine aurora-mysql


-- 設定確認
aws rds describe-db-clusters
aws rds describe-db-clusters | jq -c '.DBClusters[] | [.DBClusterIdentifier , .BacktrackWindow , .EarliestBacktrackTime]'


-- バックトラックの実行

aws rds backtrack-db-cluster \
--db-cluster-identifier cluster01 \
--backtrack-to 2021-07-23T01:01:01Z


-- 既存のバックトラックの取得

aws rds describe-db-cluster-backtracks \
--db-cluster-identifier cluster01