最終更新日:2024年6月5日
こんばんは、サービス基盤部の森田です。
前回の記事ではIDCFクラウド RDBへのリージョン/ゾーン間接続例を紹介させていただきましたが、レプリケーション構成において異なるNW間でRDB自身がレプリカとしてソースのデータベースに通信を行うケースについてはRDB側に接続先のスタティックルートの設定が入っていないためRDBからの接続を行うことが出来ません。しかし、去年の12月にRDBでリリースしたスタティックルーティング機能を利用することで今まで実現できなかったRDBからの接続についても可能となりました。 今回はこの機能を使用してリージョン間を跨いだ外部データベース(ソース)/RDB(レプリカ)のレプリケーション構成例についてご紹介してみたいと思います。

事前準備
voltに追加ネットワークを作成

augustaに追加ネットワークを作成

追加ネットワークをプライベートコネクトに接続

仮想ルーターを作成するためにvoltの追加ネットワークを選択してコンピュート上に仮想マシンを作成します(諸々の事情で...)
augustaに外部データベース(ソース)用仮想マシン作成

外部データベース(ソース)側
スタティックルートを追加
nmcli c mod "有線接続 1" +ipv4.routes "192.168.0.0/23 192.168.3.254"
設定を有効
nmcli c down "有線接続 1" nmcli c up "有線接続 1"
ルーティングの設定を確認
[root@mysql8-source-01 ~]# ip route default via 10.21.0.1 dev ens160 proto dhcp metric 100 10.21.0.0/21 dev ens160 proto kernel scope link src 10.21.0.60 metric 100 192.168.0.0/23 via 192.168.3.254 dev ens192 proto static metric 101 192.168.2.0/23 dev ens192 proto kernel scope link src 192.168.2.83 metric 101
MySQLの構築(MySQL8.0を使用)
# Yumリポジトリ追加 dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm # デフォルトのMySQLモジュール無効化 dnf module disable mysql # MySQLのインストール dnf install mysql-community-server # MySQLの起動 systemctl start mysqld # 初期設定 mysql_secure_installation
my.cnfに以下のパラメータを追加
server_id=1 gtid_mode="ON" enforce_gtid_consistency= "ON" log_bin= "bin_log" sync_binlog= "1"
MySQL再起動
systemctl restart mysqld
レプリケーション用のユーザーを作成
CREATE USER 'replication_user'@'192.168.0.0/255.255.254.0' identified with mysql_native_password by 'password';
作成したアカウントにREPLICATION SLAVE 権限を追加
GRANT REPLICATION SLAVE ON *.* to 'replication_user'@'192.168.0.0/255.255.254.0';
IDCF RDB(レプリカ)側
ネットワークを選択してRDBを作成(今回はvoltを使用)

以下のパラメータを追加したパラメータグループを作成
server_id= "2" gtid_mode= "ON" enforce_gtid_consistency= "ON" log_bin= "bin_log" sync_binlog= "1" super_read_only= "1" log_slave_updates= "1" relay_log_recovery= "1" relay_log_purge= "1"

作成したパラメータグループをRDBに適用

CHANGE MASTER TOの設定
CHANGE MASTER TO MASTER_HOST="192.168.2.83", MASTER_USER="replication_user", MASTER_PASSWORD="password", MASTER_PORT=3306, MASTER_AUTO_POSITION=1;
レプリカのRDBでスタティックルーティング機能を使用しルーティング設定を追加
192.168.2.83/32 via 192.168.1.254

レプリカのRDBでレプリケーション開始
start slave;
レプリケーション確認
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.83
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: bin_log.000001
Read_Master_Log_Pos: 1384
Relay_Log_File: rdb-90d8a3a5-f0b5-4a05-800c-bc2039fc16f0-relay-bin.000003
Relay_Log_Pos: 1595
Relay_Master_Log_File: bin_log.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1384
Relay_Log_Space: 1839
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 761ed903-9cf2-11eb-a50c-020223a50004
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 761ed903-9cf2-11eb-a50c-020223a50004:1-4
Executed_Gtid_Set: 761ed903-9cf2-11eb-a50c-020223a50004:1-4
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
最後に
今回はIDCFクラウド内の別リージョンに構築した仮想マシンとIDCFクラウド RDBを使用してレプリケーションを組んでみましたが、バーチャルブリッジを利用してIDCフロンティアのデータセンターとIDCFクラウド RDB間でのレプリケーションを組むこともできます。 IDCFクラウド RDBでは外部サービスとのレプリケーションを組める仕組みなども検討予定ですのでご期待ください!!