Slide 1

Slide 1 text

© 2024 Techtouch. AWS Database Migration Service を使って
 無停止でDB統合 ※読み込み側だけだよー📢


Slide 2

Slide 2 text

すべてのユーザーが システムを使いこなせる世界に システム導入だけで終わらせない、利活用のためのDXプラットフォーム

Slide 3

Slide 3 text

すべてのユーザーが システムを使いこなせる世界に システム導入だけで終わらせない、利活用のためのDXプラットフォーム

Slide 4

Slide 4 text

4 © 2024 Techtouch. Database Migration Service とは 参考:https://aws.amazon.com/jp/blogs/news/webinar-bb-awsdatabasemigrationservice-2021

Slide 5

Slide 5 text

© 2024 Techtouch. なぜDBを統合するにいたったか


Slide 6

Slide 6 text

6 © 2024 Techtouch. なぜDBを統合するにいたったか - マイクロサービスでサービスを運用している - 一部のサービスが分散モノリス状態であった - モジュラーモノリスへ変更 - 別ドメインでサービス切り直し - 変更した結果 - DBが分かれたままなので開発効率はそこまであがらない - DB※RDSを統合することとした 👈 ココ

Slide 7

Slide 7 text

7 © 2024 Techtouch. 変更後の構成 なぜDBを統合するにいたったか

Slide 8

Slide 8 text

8 © 2024 Techtouch. なぜDBを統合するにいたったか - 変更後の構成 - main - Read/Write - viewer - Read Only - 課題 - DBが分かれたままなので開発効率はそこまであがらない - 分散トランザクション問題は残ったまま → DB統合しよう!!

Slide 9

Slide 9 text

© 2024 Techtouch. 前提


Slide 10

Slide 10 text

10 © 2024 Techtouch. 前提 - やりたいこと - 同一スキーマにDBを統合したい - 制約 - それぞれのDBに同じ名前のテーブル名が存在する - テーブル名をリネームする必要がある

Slide 11

Slide 11 text

11 © 2024 Techtouch. 前提 - DBの特徴 - 最初Aurora MySQL 2.xのレプリケーション機能を利用しようとした が利用しているバージョンではテーブル単位のレプリケーションがで きなかったため断念 — Aurora MySQL 2.x のバイナリログレプリケーションでは information_schema, performance_schema, mysql データベース上の Aurora の管理テーブルを除く、すべ てのデータベースの変更がレプリケーションされる (ソースのバイナリログに書き込まれ る) 動作となる 参照:https://dev.mysql.com/doc/refman/5.7/en/binary-log-mysql-database.html

Slide 12

Slide 12 text

12 © 2024 Techtouch. 前提 - サービスの特性 - main - 夜間メンテナンス可 - viewer - メンテナンス入れたくない!

Slide 13

Slide 13 text

© 2024 Techtouch. 統合プロセス


Slide 14

Slide 14 text

14 © 2024 Techtouch. 統合プロセス

Slide 15

Slide 15 text

15 © 2024 Techtouch. 統合プロセス

Slide 16

Slide 16 text

16 © 2024 Techtouch. 統合プロセス

Slide 17

Slide 17 text

© 2024 Techtouch. DMS設定


Slide 18

Slide 18 text

18 © 2024 Techtouch. DMS設定

Slide 19

Slide 19 text

19 © 2024 Techtouch. DMS設定

Slide 20

Slide 20 text

© 2024 Techtouch. DMSで気をつけるポイント


Slide 21

Slide 21 text

21 © 2024 Techtouch. 気をつけるポイント① 外部キー制約やインデックスなどのメタデータは同期されない - DMSはテーブル作成からレプリまでしてくれる設定がある - 外部キー制約やインデックスなどのメタデータは同期されない メタデータが必要な場合は事前にテーブルを作成しておきましょう! create table if not exists drop & create truncate

Slide 22

Slide 22 text

22 © 2024 Techtouch. 気をつけるポイント② Max LOB サイズを適切に設定しないとデータが切り捨てられる - LOB(Large Object)とは - データベースにおいて扱われる巨大なデータを表す用語 - BLOB(バイナリデータ) - CLOB(テキストデータ)→ JSON型 etc - XLOB(XMLデータ) - 完全LOBモード - データを切り捨てないが速度が低下するリスク - 制限付きLOBモード(推奨) - リソースを事前に割り当てる - サイズを超過するとデータを切り捨てる  下記SQLでLOBカラムの最大値をチェックしましょう!

Slide 23

Slide 23 text

23 © 2024 Techtouch. 気をつけるポイント③ 同期先テーブルのLOBカラムはNot Null制約があると同期失敗する - 同期先テーブルのLOBカラムはNot Null制約をはずしましょう! - LOBカラムは最初にNULLとなりあとからデータが同期される動きとなる(は ず)ため 参照:https://e-words.jp/w/LOB-1.html

Slide 24

Slide 24 text

24 © 2024 Techtouch. 気をつけるポイント④ インスタンスのメモリはなかなか開放されない - フルロード時にメモリを結構使う - その後のレプリケーション中も徐々にメモリが食われ続ける 初回フルロード時のメモリ使用量とレプリケーション期間に使われるメモリ量を事前に確認してメ モリ枯渇しないように注意しましょう!

Slide 25

Slide 25 text

25 © 2024 Techtouch. 気をつけるポイント⑤ CASCADEで更新されたデータは同期されない - レプリケーション中は「テーブル統計で」状況が確認できる - 「検証に失敗しました」にカウントされターゲット側のデータは更新されない CASCADE利用しているか事前にチェックしましょう!

Slide 26

Slide 26 text

26 © 2024 Techtouch. 気をつけるポイント⑥ too many connections発生しがち - 並列にロードするテーブルの最大数のデフォルトは8 - 開発環境では簡単にtoo many connectionsが発生した 本番のDBコネクションを食いつぶすリスクがあるのでコネクション数チェックしましょう!

Slide 27

Slide 27 text

27 © 2024 Techtouch. まとめ - サービスのアーキテクチャに合わせた手法を使う - 難しければ手前でアーキテクチャを変更するのも一手 - DMS - 柔軟に設定ができて便利 - 必要に応じて細かいチューニングを - 気をつけないと躓きポイントが割とあるので要注意 1. 外部キー制約やインデックスなどのメタデータは同期されない 2. Max LOB サイズを適切に設定しないと同期に失敗する 3. 同期先テーブルのLOBカラムはNot Null制約があると同期失敗する 4. インスタンスのメモリはなかなか解放されない 5. CASCADE で更新されたデータは同期されない 6. too many connections 発生しがち

Slide 28

Slide 28 text

© 2024 Techtouch. - https://x.com/taisa831 - https://taisa.super.site - 著書(共著) ご清聴ありがとうございました。