{Aurora}Aurora PostgreSQL のクラスターキャッシュ管理によるフェイルオーバー後の高速リカバリ

https://aws.amazon.com/jp/blogs/news/introduction-to-aurora-postgresql-cluster-cache-management/

クラスターキャッシュ管理(CCM)では、特定の読み込み DB インスタンスをフェイルオーバーのターゲットとして設定します。
クラスターキャッシュ管理により、指定された読み込みのキャッシュ内のデータは、書き込み DB インスタンスのキャッシュ内のデータと確実に同期されます。

Cluster cache management requires that the designated reader instance have the same instance class type and size as the writer.


-- 1. クラスターキャッシュ管理の有効化

aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-postgresql12 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

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


aws rds create-db-cluster \
--db-cluster-identifier cluster11 \
--engine aurora-postgresql \
--engine-version 12.6 \
--master-username postgres \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

-- 2. 書き込み DB インスタンスの昇格階層の優先度の設定
昇格階層の優先度を 0 に設定

aws rds create-db-instance \
--db-instance-identifier cluster11-instance01 \
--db-cluster-identifier cluster11 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--no-auto-minor-version-upgrade \
--no-enable-performance-insights \
--promotion-tier 0

-- 3. 読み込み DB インスタンスの昇格階層の優先度の設定
昇格階層の優先度を 0 に設定

aws rds create-db-instance \
--db-instance-identifier cluster11-instance02 \
--db-cluster-identifier cluster11 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--no-auto-minor-version-upgrade \
--no-enable-performance-insights \
--promotion-tier 0


-- 4. バッファキャッシュのモニタリング

 

drop table tab1;
create table tab1(col1 int primary key);
insert into tab1(col1) select g from generate_series(1,1000000) g;
select count(*) from tab1;

drop table tab2;
create table tab2(col1 int primary key);
insert into tab2(col1) select g from generate_series(1,1000000) g;
select count(*) from tab2;

 


CREATE EXTENSION pg_buffercache;

select relname,
relkind,
count(*),
count(*) filter ( where isdirty = true ) as dirty
from pg_buffercache as b,pg_database as d ,pg_class c
where d.oid = b.reldatabase
and c.relfilenode = b.relfilenode
and datname = 'test'
group by 1,2
order by 3 desc
limit 7
;

SELECT buffers_sent_last_minute*8/60 AS warm_rate_kbps,
100*(1.0-buffers_sent_last_scan/buffers_found_last_scan) AS warm_percent
FROM aurora_ccm_status();

select * from aurora_ccm_status();

CCM有効の場合とCCM無効の場合でレプリカノードのバッファキャッシュに相違は見られなかった。

 

-- 5. クリーンアップ
-- Auroraクラスタ削除

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

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


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

-- クラスタパラメータグループ削除
aws rds delete-db-cluster-parameter-group --db-cluster-parameter-group-name cpg01