Tag: RDS

Canvas LMS + AWS RDS PostreSQL で wal_level を logical にする必要が出た

背景

AWS RDS PostgreSQL の wal_level を logical にする必要が出た

Canvas LMS + AWS RDS の構成でセットアップを行おうとすると、 PostgreSQL の wal_level が logical である事を求められた。

通常、postgres.conf を修正するが、RDS ではできないのでパラメーターグループの設定を行った。

rds.logical_replication = 1 と変更する必要がある。

環境

設定
DB エンジンAurora PostgreSQL
エンジンバージョン10.14
DB クラスターのパラメータグループdefault.aurora-postgresql10

手順

パラメーターグループをデフォルトのまま使っていたので、別途新しくパラメーターグループを作った。

DB クラスターパラメータグループに作る。

参考

wal_level のエラー

stable/2021-04-14 のリリースを用いての構築では問題なかったが、 stable/2021-08-18 のリリースを用いた構築では

RAILS_ENV=production bundle exec rake db:initial_setup

の段階でエラーがでて先に進まなくなった。

ERROR:  wal_level must be set to 'logical'
HINT:  WAL control functions cannot be executed when wal_level < logical.

正確には stable/2021-04-14 のリリースでもディスカッション機能で wal_level logical のエラーは出ていた。 Canvas LMS 自体が、この機能を多用するようになったのかもしれない。

Read more...

aws/rds

replicaが高負荷になった

replica1のmax_connectionsを確認したところ上限値1000でした

mysql> show global variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  |
+-----------------+-------+
1 row in set (0.01 sec)

この障害はreplicaがボトルネックと断定できます。

AWS_RDS_Aurora_監査ログ取得のための変更

大体、ClassmethodのページのようにIAMを作成し付与します。

Classmethodのサンプルだと、全てのクエリをロギングする設定なので絞ります。 クラスターパラメータグループを変えます。

[ RDS ]->[ クラスター ]->[ aurora ]->[ DB クラスターのパラメータグループ ]のリンクをクリック->[ フィルタ パラメータ ]のテキストフィールドに[ audit ]を入力 下記の要素がリストアップするので変更します。都度、[ 変更の保存 ]をする必要があります。

  • server_audit_events -> QUERY_DCL, QUERY_DDL, TABLE ここで、ロギング対象を絞ります。パラメータの詳細についてはここを参照
  • server_audit_excl_users -> 空欄 ( [If not empty, it contains the list of users whose activity will NOT be logged] 全てのユーザの変更を取りたいため空欄 )
  • server_audit_incl_users -> 空欄 ( [If not empty, it contains a comma-delimited list of users whose activity will be logged] )
  • server_audit_logging -> 1 ( ロギングを有効にする場合は 1 )
  • server_audit_logs_upload -> 1 (CloudWatch logsへログのアップロードを行う場合は 1 )

DBスナップショットの作成時のダウンタイム

Single-AZ DB インスタンスでこの DB スナップショットを作成すると、I/O が短時間中断します。この時間は、DB インスタンスのサイズやクラスによって異なり、数秒から数分になります。

結構ばらつきがあるのに注意が必要だ。

Read more...

cheatsheet/aws/rds

パラメーターグループ

作る
aws rds create-db-cluster-parameter-group \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10 \
  --db-parameter-group-family aurora-postgresql10 \
  --description "for wal_level must be set to logical"

参考 aws rds create-db-cluster-parameter-group help

編集
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10 \
  --parameters "ParameterName=rds.logical_replication,ParameterValue=1,ApplyMethod=pending-reboot"

設定するパラメーターによっては即時反映 ApplyMethod=immediate が使えず

An error occurred (InvalidParameterCombination) when calling the ModifyDBClusterParameterGroup operation: cannot use immediate apply method for static parameter

というエラーが出る。この場合、 ApplyMethod=pending-reboot を使う必要がある。 staticかどうか?はWebUIの『タイプの適用』の箇所を見るとわかる。

反映
aws rds modify-db-cluster \
  --apply-immediately \
  --db-cluster-identifier hoge \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10

パラメータグループ作成

  • パラメータグループ名: test-aurora
  • 説明: utf8mb4
  • ファミリー: aurora5.6 を指定して、とりあえず設定自体を作る
$ aws rds create-db-parameter-group \
  --db-parameter-group-name test-aurora \
  --description utf8mb4 \
  --db-parameter-group-family aurora5.6 \

構築

aws rds create-db-cluster \
  --engine aurora-postgresql \
  --engine-mode serverless \
  --engine-version 10.12 \
  --copy-tags-to-snapshot \
  --enable-http-endpoint \
  --db-subnet-group-name prod \
  --vpc-security-group-ids sg-1111111111111111 \
  --db-cluster-identifier sample-cluster \
  --master-username postgres \
  --master-user-password himituno

既存のパラメータグループから情報をコピーする

aws rds describe-db-parameters –db-parameter-group-name test-aurora > rds-test-aurora.json

Read more...