Slide 1

Slide 1 text

RDBのログを取る時にDMS を使うという選択肢 レバレジーズ株式会社 村本 雄太 2018/12/12

Slide 2

Slide 2 text

いきなりですが、

Slide 3

Slide 3 text

RDBのログを取ったことはありますか?

Slide 4

Slide 4 text

今日の内容は、 DMSでRDSのログを取るお話です

Slide 5

Slide 5 text

自己紹介.yaml Name: 村本 雄太 BelongsTo: レバレジーズ株式会社: メディカル事業部 Tags: - 新卒2年目 - いんふらえんじにあ - AWS Certified Solutions Architect Associate

Slide 6

Slide 6 text

DMSとは

Slide 7

Slide 7 text

DMSとは DMSとは、AWSが提供しているデータベース移行サービス ● 既存のDBを、最小のDowntimeでAWS移行するサービス ● バッチ + 継続的なレプリケートをサポート ● 異種エンジン間のMigrateをサポート

Slide 8

Slide 8 text

DMSとは DMSの仕組み https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/Welcome.html

Slide 9

Slide 9 text

DMSを使ってRDBの変更ログをとろう

Slide 10

Slide 10 text

● DMSの移行先にはS3を選択できる ○ Postgresql -> S3 ○ Mysql -> S3 ○ ... DMSを使ってRDBの変更ログをとろう DMSの移行先をS3にする https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html

Slide 11

Slide 11 text

DMSを使ってRDBの変更ログをとろう DMSの移行先をS3にする ● DMSの移行先をS3にすると... ○ //LOAD001.csv ○ //LOAD002.csv ○ //.csv ○ ... https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html

Slide 12

Slide 12 text

DMSを使ってRDBの変更ログをとろう 出力ファイルの先頭にはオペレーションコードがつく Op id name age created_at updated_at I 101 Bob 20 2016-12-12T00:00:00 2016-12-12T00:00:00 U 101 Bob 22 2016-12-12T00:00:00 2018-12-12T00:00:00 U 101 Boby 22 2016-12-12T00:00:00 2018-12-12T20:00:00 D 101 Boby 22 2016-12-12T00:00:00 2016-12-12T22:00:00 例: public/user/20181212-22320009.csv

Slide 13

Slide 13 text

変更ログが取れた!

Slide 14

Slide 14 text

DMSでRDBの変更ログをとる時の注意点

Slide 15

Slide 15 text

DMSを使ってRDBの変更ログをとろう 1. バッチロードのファイルにはオペレーションコードがつかない id name age created_at updated_at 97 Alice 19 2016-12-12T00:00:00 2016-12-12T00:00:00 98 Make 18 2016-12-12T10:00:00 2016-12-12T10:00:00 99 Chris 22 2016-12-12T20:00:00 2016-12-12T20:00:00 100 Pole 21 2016-12-12T24:00:00 2016-12-12T24:00:00 例: public/user/LOAD001.csv

Slide 16

Slide 16 text

DMSを使ってRDBの変更ログをとろう 解決法: オペレーションコードを差し込むスクリプトを書く 例: public/user/LOAD001.csv Op id name age created_at updated_at I 97 Alice 19 2016-12-12T00:00: 00 2016-12-12T00:00:00 I 98 Make 18 2016-12-12T10:00: 00 2016-12-12T10:00:00 I 99 Chris 22 2016-12-12T20:00: 00 2016-12-12T20:00:00 I 100 Pole 21 2016-12-12T24:00: 00 2016-12-12T24:00:00

Slide 17

Slide 17 text

DMSを使ってRDBの変更ログをとろう 2. Postgresの場合、wal_levelをlogicalにしないといけない ● WAL = ログ先行書き込み ● ログに吐くレベルをlogicalにする必要がある ● 特にRDSの場合、手動で再起動が必要になるため注意 ○ 5秒~5分のダウンタイムが発生する

Slide 18

Slide 18 text

DMSでRDBの変更ログをとる時の注意点 3. DMSのタスクが死ぬとヤバイ ● DMSのソースが Postgresql の場合 1. DMSのタスクが死ぬ 2. レプリケーションスロットにログがたまり続ける 3. DBサーバのDiskを圧迫する

Slide 19

Slide 19 text

図1. ヤバイ時のRDSのDisk使用量

Slide 20

Slide 20 text

https://qiita.com/uramotot/items/6901142800a67ac7696d DMSでRDBの変更ログをとる時の注意点 解決策: レプリケーションスロットを解放する SELECT * FROM pg_replication_slots; SELECT pg_drop_replication_slot( '<レプリケーションスロット名 >')

Slide 21

Slide 21 text

図2. レプリケーションスロット解放後の RDSのDisk使用量

Slide 22

Slide 22 text

DMSでRDBの変更ログをとる時の注意点 対策: タスクが死んでも対応できるように準備しておく 1. DMSタスクが死んだ時にAlertを飛ばすようにする 2. RDBのDisk使用量が増えた時も(早めに)Alertを飛ばす 3. レプリケーションインスタンスには余裕をもたせる

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

まとめ ● DMSを使えばRDBの変更ログを簡単にとれる ● DB内にログテーブルを作りたくない時に便利 ● S3に出力するので、低コスト ○ AthenaやRedShift Spectrumでクエリ可能

Slide 25

Slide 25 text

No content