Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Database Migration Serviceを使って無停止でDB統合※読み込み...

taisa
February 15, 2024
260

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

taisa

February 15, 2024
Tweet

Transcript

  1. 6 © 2024 Techtouch. なぜDBを統合するにいたったか - マイクロサービスでサービスを運用している - 一部のサービスが分散モノリス状態であった -

    モジュラーモノリスへ変更 - 別ドメインでサービス切り直し - 変更した結果 - DBが分かれたままなので開発効率はそこまであがらない - DB※RDSを統合することとした 👈 ココ
  2. 8 © 2024 Techtouch. なぜDBを統合するにいたったか - 変更後の構成 - main -

    Read/Write - viewer - Read Only - 課題 - DBが分かれたままなので開発効率はそこまであがらない - 分散トランザクション問題は残ったまま → DB統合しよう!!
  3. 10 © 2024 Techtouch. 前提 - やりたいこと - 同一スキーマにDBを統合したい -

    制約 - それぞれのDBに同じ名前のテーブル名が存在する - テーブル名をリネームする必要がある
  4. 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
  5. 12 © 2024 Techtouch. 前提 - サービスの特性 - main -

    夜間メンテナンス可 - viewer - メンテナンス入れたくない!
  6. 22 © 2024 Techtouch. 気をつけるポイント② Max LOB サイズを適切に設定しないとデータが切り捨てられる - LOB(Large

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

    - LOBカラムは最初にNULLとなりあとからデータが同期される動きとなる(は ず)ため 参照:https://e-words.jp/w/LOB-1.html
  8. 24 © 2024 Techtouch. 気をつけるポイント④ インスタンスのメモリはなかなか開放されない - フルロード時にメモリを結構使う - その後のレプリケーション中も徐々にメモリが食われ続ける

    初回フルロード時のメモリ使用量とレプリケーション期間に使われるメモリ量を事前に確認してメ モリ枯渇しないように注意しましょう!
  9. 26 © 2024 Techtouch. 気をつけるポイント⑥ too many connections発生しがち - 並列にロードするテーブルの最大数のデフォルトは8

    - 開発環境では簡単にtoo many connectionsが発生した 本番のDBコネクションを食いつぶすリスクがあるのでコネクション数チェックしましょう!
  10. 27 © 2024 Techtouch. まとめ - サービスのアーキテクチャに合わせた手法を使う - 難しければ手前でアーキテクチャを変更するのも一手 -

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