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

[HeatWavejp Meetup #06] MySQL HeatWaveのインバウンド・レプリケーション機能 [村田 太 氏(スマートスタイル)]

[HeatWavejp Meetup #06] MySQL HeatWaveのインバウンド・レプリケーション機能 [村田 太 氏(スマートスタイル)]

HeatWavejp Meetup #06「MySQL HeatWave へのデータ同期はどうするの!?」(2024/02/15 開催)の講演資料です。

【講演内容】
MySQL HeatWaveのインバウンド・レプリケーション機能

≪アジェンダ≫
1.インバウンドレプリケーション機能について
2.Amazon Aurora (MySQL) → MySQL HeatWave on AWS へのインバウンドレプリケーション
3.オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション
4.その他のユースケース

【発表者】
村田 太 氏
株式会社スマートスタイル データベース&クラウド事業部 技術本部 DB部

【イベント情報】
HeatWavejp Meetup #06
https://heatwavejp.connpass.com/event/308061/

More Decks by HeatWavejp(MySQL HeatWave Japan User Group)

Transcript

  1. Copyright © 2023 HeatWavejp All Rights Reserved. HeatWavejp Meetup #06

    MySQL HeatWave の インバウンドレプリケーション機能 2024年2月15日(木) 株式会社スマートスタイル 村田
  2. Copyright © 2023 HeatWavejp All Rights Reserved. アジェンダ 1. インバウンドレプリケーション機能について

    2. Amazon Aurora (MySQL) → MySQL HeatWave on AWS へのインバウンドレプリケーション 3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション 4. その他のユースケース 5. まとめ
  3. Copyright © 2023 HeatWavejp All Rights Reserved. 1.インバウンドレプリケーション機能について ◼ インバウンドレプリケーションとは

    • MySQL のレプリケーション機能を利用した DB システムへのデータ同期機能 ✓ ソースサーバーのバイナリログを利用したデータ同期 • 注意事項 : ✓ 非同期レプリケーションのみ対応 ✓ 行ベースレプリケーションのみ対応 ✓ 単一のレプリケーション・ソース構成のみ対応 → マルチソース・レプリケーションは未対応 ✓ mysql システムデータベースに対する変更はレプリケート対象外 https://downloads.mysql.com/presentations/01_201311_MySQL_JP_Tech-Tour.pdf
  4. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 想定される利用ケース •

    AWS から MySQL HeatWave へのデータ移行 • Amazon Aurora のデータを用いてデータ分析あるいは機械学習をおこなう インバウンドレプリケーション AWS 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  5. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 実施概要 •

    環境情報 ➢ ソース : Amazon Aurora v3 (MySQL 8.0 互換) ➢ レプリカ : MySQL HeatWave on AWS (MySQL 8.3) • 実施手順 1. MySQL HeatWave on AWS (レプリカ・サーバー)の構築 2. Amazon Aurora (ソース・サーバー)の構築 3. ソース・サーバーの設定と準備 → レプリケーション・ユーザーの作成やデータのエクスポート 4. レプリカ・サーバーの設定と準備 → データのインポートやレプリケーション・チャネルの作成 5. レプリケーションの開始と確認 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  6. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 1. MySQL

    HeatWave on AWS (レプリカ・サーバー)の構築 • 利用するには準備が必要 • 今回は以下の手順で実施 1. 子テナンシの作成 2. Tokyo リージョンをサブスクライブ • 無料トライアルでも使用可能 ✓ 参考記事 : https://developer.oracle.com/ja/learn/technical-articles/aws-getting-started-heatwave 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  7. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 1. MySQL

    HeatWave on AWS (レプリカ・サーバー)の構築 • ログイン : https://cloud.mysql.com/ 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  8. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 1. MySQL

    HeatWave on AWS (レプリカ・サーバー)の構築 • 「Create MySQL DB System」から DB システムおよび HeatWave Cluster を作成 ➢ MySQL DB System: ✓ Hardware configuration : サーバースペック(HeatWave Cluster 対応のものが選択可能) ✓ MySQL Configuration : → HeatWave Cluster を作成しないことも選択可能 ✓ MySQL version : バージョンの選択 → 2024/2/7 時点で、8.0.31、8.0.32、8.0.33、8.1.0、8.2.0、8.3.0 のみ選択可能 ✓ Networking : ネットワーク設定 → 「Enable inbound connectivity from allowed public IP address ranges」に チェックを入れておく → 「Allowed public IP address ranges」に接続を許可する IP を指定 ※後から修正可能 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  9. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 2. Amazon

    Aurora (ソース・サーバー)の構築 • バージョン : Aurora MySQL 3.04.1 (compatible with MySQL 8.0.28) • インスタンスサイズ : db.t3.medium (2 vCPUs / 4 GiB RAM) • パブリックアクセス情報 : あり • VPC セキュリティグループ (ファイアウォール) : ✓ 踏み台用の EC2 サーバー ✓ MySQL HeatWave on AWS 上の HeatWave Cluster の IP アドレスを許可 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  10. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    インバウンドレプリケーションに必要な要件 : 参照リファレンス : https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-source-configuration.html • ソースとレプリカ間のレプリケーショントラフィックを許可するようにネットワークを構成していること • ソースの MySQL が 5.7.9 以上のバージョンであること • レプリカがソースと同じバージョン、またはソースよりも高いバージョンの MySQL を実行していること • ソースとレプリカ間の通信を暗号化する場合は、SSL を使用するようにソースを構成すること → Aurora の場合は既に設定済み | ssl_ca | /rdsdbdata/rds-metadata/ca-cert.pem | ssl_cert | /rdsdbdata/rds-metadata/server-cert.pem | ssl_cipher | AES128-SHA:ADH-AES128-SHA:AES128-SH(...) | ssl_key | /rdsdbdata/rds-metadata/server-key.pem 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  11. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    インバウンドレプリケーションに必要な要件 : • ソースとレプリカが同じ lower_case_table_names システム変数値で実行していること → デフォルト値で同じ値になっている • ソースでは行ベースのバイナリログが使用(binlog_format=ROW)されていること → デフォルトで ROW になっているように見えるが、明示的に変更する必要がある(後述) mysql> SELECT @@global.lower_case_table_names¥G *************************** 1. row *************************** @@global.lower_case_table_names: 0 mysql> SELECT @@binlog_format¥G *************************** 1. row *************************** @@binlog_format: ROW 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  12. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    インバウンドレプリケーションに必要な要件 : • ソースでバイナリログが有効(log_bin=ON)になっていること • GTID を使用する場合 : ソースで GTID ベースのレプリケーションが有効になっていること ✓ gtid_mode=ON ✓ enforce_gtid_consistency=ON → デフォルトでは設定されていないので、パラメーターグループを作成して変更(再起動の必要あり) ✓ パラメータグループのタイプ : DB Cluster Parameter Group ✓ バイナリログは binlog_format を設定(デフォルト値:OFF)することで有効になる 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  13. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    インバウンドレプリケーションに必要な要件 : • レプリケーション用ユーザーの作成 1. レプリケーション用ユーザーの作成(SSL 接続のみを許可) 2. レプリケーション用の権限を付与 CREATE USER repl IDENTIFIED BY 'MySQL8.0' REQUIRE SSL; GRANT REPLICATION SLAVE on *.* to repl; 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  14. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    • データのエクスポート ➢ MySQL Shell のダンプユーティリティ ✓ Amazon S3 にアップロードすると Data Imports 機能でインポートすることも可能 ✓ compatibility オプションは必要に応じて記載 ✓ 今回は以下のコマンドで踏み台サーバーへデータをエクスポート util.dumpInstance("<Schema>",{s3bucketName: "<BucketName>", compatibility: ["strip_restricted_grants", "strip_definers", "ignore_missing_pks"], ocimds: true}) util.dumpInstance("/tmp/dumpInstance", {compatibility: ["strip_restricted_grants"], ocimds: true}) 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  15. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 3. ソース・サーバーの設定と準備

    • データのエクスポート ➢ mysqldump ✓ MySQL 8.0.32 から以下のオプション指定時にグローバル読み取りロックが必要 • --single-transaction / --lock-all-tables (一貫性のあるバックアップ取得時に必要) • --set-gtid-purged=ON/AUTO (デフォルト値) → Amazon Aurora の管理者権限では FLUSH TABLES WITH READ LOCK が実行不可 → 本番環境では一貫性のあるバックアップが取得できず使用出来ないので注意 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  16. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 4. レプリカ・サーバーの設定と準備

    • データのインポート ➢ Data Imports 機能 Workspaces > Inport Data から Amazon S3 に アップロードしたデータをインポートすることが可能 ➢ Bulk Ingest 機能 Amazon S3 へのアクセス許可をおこない LOAD DATA コマンドでデータをインポートする機能 参照 URL : https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-importing-data-bulk-ingesting.html 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  17. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 4. レプリカ・サーバーの設定と準備

    • データのインポート ➢ MySQL Shell のダンプロードユーティリティ ✓ ロード時にバイナリログを無効(SET sql_log_bin=0)にすることはできない ✓ ソースの GTID を反映させるために updateGtidSet オプションを有効にする必要がある 今回は以下のコマンドを実行: util.loadDump("/tmp/dumpInstance", {updateGtidSet: "append"}) 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  18. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 4. レプリカ・サーバーの設定と準備

    • レプリケーションの設定 MySQL > Channnels > Create Channel を選択 ➢ Source connection : 主にソースサーバーの情報を入力 ✓ Allowed Outbound addresses: ソースサーバーの IP アドレスを入力 ✓ SSL mode: 必要に応じて SSL モードを設定 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  19. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 4. レプリカ・サーバーの設定と準備

    • レプリケーションの設定 ➢ Target DB System : レプリカサーバー側の情報を入力 ✓ Applier username: レプリケーション権限チェックユーザーを指定 ※未確認 ✓ Channel filter: レプリケーションフィルターを設定可能 Amazon Aurora や Amazon RDS の テンプレートが存在するので利用可能 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  20. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 5. レプリケーションの開始と確認

    • Create を押すことで作成およびレプリケーションが開始 • State が Active になっていれば正常に稼働 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  21. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 5. レプリケーションの開始と確認

    • Needs Attenstion になっている場合は何らかのレプリケーションエラーが発生 ✓ SHOW REPLICA STATUS でレプリケーションの状態を確認 > SHOW REPLICA STATUS¥G *************************** 1. row *************************** (...) Replica_IO_Running: Yes Replica_SQL_Running: No (...) Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1007 Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '2ab0f9ff-a2ce-3206-aff8-4599ba83c8ab:3' at source log mysql-bin-changelog.000002, end_log_pos 850. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any. Replicate_Ignore_Server_Ids: (…) 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  22. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 5. レプリケーションの開始と確認

    • Needs Attenstion になっている場合は何らかのレプリケーションエラーが発生 ✓ 詳細は performance_schema.replication_applier_status_by_worker テーブルを確認 ✓ この時はソースの GTID の反映忘れ → ソースの GTID が半端に実行されてしまったため、一度 DB システムを作成し直す > SELECT * FROM performance_schema.replication_applier_status_by_worker¥G *************************** 1. row *************************** CHANNEL_NAME: replication_channel WORKER_ID: 1 THREAD_ID: NULL SERVICE_STATE: OFF LAST_ERROR_NUMBER: 1007 LAST_ERROR_MESSAGE: Worker 1 failed executing transaction '2ab0f9ff-a2ce-3206-aff8-4599ba83c8ab:3' at source log mysql-bin-changelog.000002, end_log_pos 850; Error 'Can't create database 'test'; database exists' on query. Default database: 'test'. Query: 'CREATE DATABASE test' 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  23. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 5. レプリケーションの開始と確認

    • MySQL HeatWave へのデータロード ✓ Workspaces > Manage Data in HeatWave からロードが可能 ✓ ロードしたいデータベースやスキーマを選択して Load into HeatWave を選択 ✓ 実行前にロード時間の見積もりなども表示 2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
  24. Copyright © 2023 HeatWavejp All Rights Reserved. 3. オンプレ環境 MySQL

    → MySQL HeatWave (OCI) へのインバウンドレプリケーション ◼ 想定される利用ケース • オンプレ環境から OCI へのデータ移行 • 既存環境のデータ分析基盤として MySQL HeatWave を利用 OCI DC インバウンドレプリケーション
  25. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 実装方法 -1-

    • OCI で Open VPN Access Server を作成してオンプレ環境との Open VPN 接続をおこなう ✓ オンプレ側のサーバーに Open VPN Client をインストールする必要がある • オブジェクト・ストレージにデータをエクスポートすれば MySQL HeatWave 作成時にデータをインポート可能 • 参照 URL : https://blogs.oracle.com/mysql-jp/post/migrating-from-a-live-on-premises-mysql- 80-database-to-mysql-database-service-using-gtids-jp OCI DC インバウンドレプリケーション Open VPN Access Server Open VPN Client 3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション
  26. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 実装方法 -2-

    • コンピュートインスタンスにオンプレ環境と同じバージョンの MySQL を構築 • 多段レプリケーションを利用して MySQL HeatWave へデータを同期 • オブジェクト・ストレージにデータをエクスポートすれば MySQL HeatWave 作成時にデータをインポート可能 OCI DC インバウンド レプリケーション レプリケーション コンピュートインスタンス 3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション
  27. Copyright © 2023 HeatWavejp All Rights Reserved. ◼ 実施概要(実装方法 -2-)

    • 環境情報 ➢ ソース : ローカル環境の MySQL 8.0.36 ➢ 中間レプリカ: OCI 上のコンピュートインスタンス ✓ MySQL 8.0.36 ➢ レプリカ: OCI 上の HeatWave (MySQL 8.3) • 実施手順 1. MySQL HeatWave (レプリカ・サーバー)の構築 2. ローカル環境(ソース・サーバー)の構築 3. 中間レプリカの構築 4. ソース・サーバーの設定と準備 → レプリケーション・ユーザーの作成やデータのエクスポート 5. 中間レプリカとレプリカ・サーバーの設定と準備 → データのインポートやレプリケーション・チャネルの作成 6. レプリケーションの開始と確認 3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション
  28. Copyright © 2023 HeatWavejp All Rights Reserved. 4. その他のユースケース ◼

    利用ケース • 複数のデータソースから MySQL HeatWave にデータを載せて分析基盤として利用 ✓ インバウンドレプリケーションはマルチソースレプリケーションに対応していないので別のインスタンスを経由 インバウンドレプリケーション AWS(or OCI) DC DC レプリケーション レプリケーション
  29. Copyright © 2023 HeatWavejp All Rights Reserved. 5. まとめ •

    MySQL から MySQL HeatWave へのデータ同期についてはインバウンドレプリケーションで実現が可能 ✓ 定常的にデータ同期が実施できる ✓ 異種 DB 間では使えないので注意 • インバウンドレプリケーションはデータ同期方法としてはシンプルで使いやすい ✓ MySQL の非同期レプリケーション機能なので MySQL ユーザーなら比較的理解しやすい • 多段レプリケーションをおこなうことで複数ソースからのデータ同期も可能 ✓ DWH として利用することが可能
  30. Copyright © 2023 HeatWavejp All Rights Reserved. 5. まとめ •

    MySQL HeatWave on AWS によるインバウンドレプリケーション時の注意事項まとめ ✓ Amazon Aurora では権限の関係上、mysqldump では一貫性のあるバックアップが取得できない ✓ MySQL HeatWave on AWS のサーバー上では権限の関係上、 レプリケーションエラーの際は気軽にポジションや GTID セットの変更が出来ないので注意