>100 Views
February 25, 25
スライド概要
HeatWavejpは、MySQL HeatWave の良さを知っていただき、参加者同士でノウハウやナレッジを共有できるユーザーコミュニティです。参加者同士のつながりを深めるため、以下の活動を行ってまいります。 COMMUNICATION *Slackやconnpassを活用したユーザー同士のコミュニケーションの場の提供 EVENT *オンライン/オフラインでのMeetupセミナーや勉強会の開催(隔月程度) SHARING *製品情報や最新アップデート、リリース情報の共有 INTERACT *参加者のコミュニティ・ネットワークやユーザー同士の交流を促進
HeatWavejp Meetup #06 MySQL HeatWave の インバウンドレプリケーション機能 2024年2月15日(木) 株式会社スマートスタイル 村田 Copyright © 2023 HeatWavejp All Rights Reserved.
アジェンダ 1. インバウンドレプリケーション機能について 2. Amazon Aurora (MySQL) → MySQL HeatWave on AWS へのインバウンドレプリケーション 3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション 4. その他のユースケース 5. まとめ Copyright © 2023 HeatWavejp All Rights Reserved.
1.インバウンドレプリケーション機能について ◼ インバウンドレプリケーションとは • MySQL のレプリケーション機能を利用した DB システムへのデータ同期機能 ✓ ソースサーバーのバイナリログを利用したデータ同期 • 注意事項 : ✓ 非同期レプリケーションのみ対応 ✓ 行ベースレプリケーションのみ対応 ✓ 単一のレプリケーション・ソース構成のみ対応 → マルチソース・レプリケーションは未対応 https://downloads.mysql.com/presentations/01_201311_MySQL_JP_Tech-Tour.pdf ✓ mysql システムデータベースに対する変更はレプリケート対象外 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 想定される利用ケース • AWS から MySQL HeatWave へのデータ移行 • Amazon Aurora のデータを用いてデータ分析あるいは機械学習をおこなう AWS インバウンドレプリケーション Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 実施概要 • 環境情報 ➢ ソース : Amazon Aurora v3 (MySQL 8.0 互換) ➢ レプリカ : MySQL HeatWave on AWS (MySQL 8.3) • 実施手順 1. MySQL HeatWave on AWS (レプリカ・サーバー)の構築 2. Amazon Aurora (ソース・サーバー)の構築 3. ソース・サーバーの設定と準備 → レプリケーション・ユーザーの作成やデータのエクスポート 4. レプリカ・サーバーの設定と準備 → データのインポートやレプリケーション・チャネルの作成 5. レプリケーションの開始と確認 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 1. MySQL HeatWave on AWS (レプリカ・サーバー)の構築 • 利用するには準備が必要 • 今回は以下の手順で実施 1. 子テナンシの作成 2. Tokyo リージョンをサブスクライブ • 無料トライアルでも使用可能 ✓ 参考記事 : https://developer.oracle.com/ja/learn/technical-articles/aws-getting-started-heatwave Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 1. MySQL HeatWave on AWS (レプリカ・サーバー)の構築 • ログイン : https://cloud.mysql.com/ Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 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 を指定 ※後から修正可能 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 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 Copyright © 2023 HeatWavejp All Rights Reserved. の IP アドレスを許可
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 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 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 3. ソース・サーバーの設定と準備 インバウンドレプリケーションに必要な要件 : • ソースとレプリカが同じ lower_case_table_names システム変数値で実行していること → デフォルト値で同じ値になっている mysql> SELECT @@global.lower_case_table_names¥G *************************** 1. row *************************** @@global.lower_case_table_names: 0 • ソースでは行ベースのバイナリログが使用(binlog_format=ROW)されていること → デフォルトで ROW になっているように見えるが、明示的に変更する必要がある(後述) mysql> SELECT @@binlog_format¥G *************************** 1. row *************************** @@binlog_format: ROW Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 3. ソース・サーバーの設定と準備 インバウンドレプリケーションに必要な要件 : • ソースでバイナリログが有効(log_bin=ON)になっていること • GTID を使用する場合 : ソースで GTID ベースのレプリケーションが有効になっていること ✓ gtid_mode=ON ✓ enforce_gtid_consistency=ON → デフォルトでは設定されていないので、パラメーターグループを作成して変更(再起動の必要あり) ✓ パラメータグループのタイプ : DB Cluster Parameter Group ✓ バイナリログは binlog_format を設定(デフォルト値:OFF)することで有効になる Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 3. ソース・サーバーの設定と準備 インバウンドレプリケーションに必要な要件 : • レプリケーション用ユーザーの作成 1. レプリケーション用ユーザーの作成(SSL 接続のみを許可) CREATE USER repl IDENTIFIED BY 'MySQL8.0' REQUIRE SSL; 2. レプリケーション用の権限を付与 GRANT REPLICATION SLAVE on *.* to repl; Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
◼ 3. ソース・サーバーの設定と準備
• データのエクスポート
➢ MySQL Shell のダンプユーティリティ
util.dumpInstance("<Schema>",{s3bucketName: "<BucketName>",
compatibility: ["strip_restricted_grants", "strip_definers", "ignore_missing_pks"], ocimds: true})
✓ Amazon S3 にアップロードすると Data Imports 機能でインポートすることも可能
✓ compatibility オプションは必要に応じて記載
✓ 今回は以下のコマンドで踏み台サーバーへデータをエクスポート
util.dumpInstance("/tmp/dumpInstance", {compatibility: ["strip_restricted_grants"], ocimds: true})
Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 3. ソース・サーバーの設定と準備 • データのエクスポート ➢ mysqldump ✓ MySQL 8.0.32 から以下のオプション指定時にグローバル読み取りロックが必要 • --single-transaction / --lock-all-tables (一貫性のあるバックアップ取得時に必要) • --set-gtid-purged=ON/AUTO (デフォルト値) → Amazon Aurora の管理者権限では FLUSH TABLES WITH READ LOCK が実行不可 → 本番環境では一貫性のあるバックアップが取得できず使用出来ないので注意 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 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 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 4. レプリカ・サーバーの設定と準備 • データのインポート ➢ MySQL Shell のダンプロードユーティリティ ✓ ロード時にバイナリログを無効(SET sql_log_bin=0)にすることはできない ✓ ソースの GTID を反映させるために updateGtidSet オプションを有効にする必要がある 今回は以下のコマンドを実行: util.loadDump("/tmp/dumpInstance", {updateGtidSet: "append"}) Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 4. レプリカ・サーバーの設定と準備 • レプリケーションの設定 MySQL > Channnels > Create Channel を選択 ➢ Source connection : 主にソースサーバーの情報を入力 ✓ Allowed Outbound addresses: ソースサーバーの IP アドレスを入力 ✓ SSL mode: 必要に応じて SSL モードを設定 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 4. レプリカ・サーバーの設定と準備 • レプリケーションの設定 ➢ Target DB System : レプリカサーバー側の情報を入力 ✓ Applier username: レプリケーション権限チェックユーザーを指定 ※未確認 ✓ Channel filter: レプリケーションフィルターを設定可能 Amazon Aurora や Amazon RDS の テンプレートが存在するので利用可能 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 5. レプリケーションの開始と確認 • Create を押すことで作成およびレプリケーションが開始 • State が Active になっていれば正常に稼働 Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 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: (…) Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション
◼ 5. レプリケーションの開始と確認
• Needs Attenstion になっている場合は何らかのレプリケーションエラーが発生
✓ 詳細は performance_schema.replication_applier_status_by_worker テーブルを確認
> 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'
✓ この時はソースの GTID の反映忘れ
→ ソースの GTID が半端に実行されてしまったため、一度 DB システムを作成し直す
Copyright © 2023 HeatWavejp All Rights Reserved.
2. Amazon Aurora → MySQL HeatWave on AWS へのインバウンドレプリケーション ◼ 5. レプリケーションの開始と確認 • MySQL HeatWave へのデータロード ✓ Workspaces > Manage Data in HeatWave からロードが可能 ✓ ロードしたいデータベースやスキーマを選択して Load into HeatWave を選択 ✓ 実行前にロード時間の見積もりなども表示 Copyright © 2023 HeatWavejp All Rights Reserved.
3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション ◼ 想定される利用ケース • オンプレ環境から OCI へのデータ移行 • 既存環境のデータ分析基盤として MySQL HeatWave を利用 OCI DC インバウンドレプリケーション Copyright © 2023 HeatWavejp All Rights Reserved.
3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション ◼ 実装方法 -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-mysql80-database-to-mysql-database-service-using-gtids-jp DC Open VPN Client Open VPN Access Server インバウンドレプリケーション Copyright © 2023 HeatWavejp All Rights Reserved. OCI
3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション ◼ 実装方法 -2• コンピュートインスタンスにオンプレ環境と同じバージョンの MySQL を構築 • 多段レプリケーションを利用して MySQL HeatWave へデータを同期 • オブジェクト・ストレージにデータをエクスポートすれば MySQL HeatWave 作成時にデータをインポート可能 OCI DC コンピュートインスタンス レプリケーション Copyright © 2023 HeatWavejp All Rights Reserved. インバウンド レプリケーション
3. オンプレ環境 MySQL → MySQL HeatWave (OCI) へのインバウンドレプリケーション ◼ 実施概要(実装方法 -2-) • 環境情報 ➢ ソース : ローカル環境の MySQL 8.0.36 ➢ 中間レプリカ: OCI 上のコンピュートインスタンス ✓ MySQL 8.0.36 ➢ レプリカ: OCI 上の HeatWave (MySQL 8.3) • 実施手順 1. MySQL HeatWave (レプリカ・サーバー)の構築 2. ローカル環境(ソース・サーバー)の構築 3. 中間レプリカの構築 4. ソース・サーバーの設定と準備 → レプリケーション・ユーザーの作成やデータのエクスポート 5. 中間レプリカとレプリカ・サーバーの設定と準備 → データのインポートやレプリケーション・チャネルの作成 6. レプリケーションの開始と確認 Copyright © 2023 HeatWavejp All Rights Reserved.
4. その他のユースケース ◼ 利用ケース • 複数のデータソースから MySQL HeatWave にデータを載せて分析基盤として利用 ✓ インバウンドレプリケーションはマルチソースレプリケーションに対応していないので別のインスタンスを経由 DC AWS(or OCI) DC レプリケーション インバウンドレプリケーション レプリケーション Copyright © 2023 HeatWavejp All Rights Reserved.
5. まとめ • MySQL から MySQL HeatWave へのデータ同期についてはインバウンドレプリケーションで実現が可能 ✓ 定常的にデータ同期が実施できる ✓ 異種 DB 間では使えないので注意 • インバウンドレプリケーションはデータ同期方法としてはシンプルで使いやすい ✓ MySQL の非同期レプリケーション機能なので MySQL ユーザーなら比較的理解しやすい • 多段レプリケーションをおこなうことで複数ソースからのデータ同期も可能 ✓ DWH として利用することが可能 Copyright © 2023 HeatWavejp All Rights Reserved.
5. まとめ • MySQL HeatWave on AWS によるインバウンドレプリケーション時の注意事項まとめ ✓ Amazon Aurora では権限の関係上、mysqldump では一貫性のあるバックアップが取得できない ✓ MySQL HeatWave on AWS のサーバー上では権限の関係上、 レプリケーションエラーの際は気軽にポジションや GTID セットの変更が出来ないので注意 Copyright © 2023 HeatWavejp All Rights Reserved.
Copyright © 2023 HeatWavejp All Rights Reserved.