実現したいこと
Raspberry Pi 3B+を使用していて、
・HDMIでディスプレイと接続
・microSDカードを挿入
・USBでキーボードとマウスを接続
・microBでコンセントと接続し、電源を供給している状態です。
Raspberry PiにはMariadbでデータベースを作成し、その中にテーブルを作成しました。
また、さくらVPSでubuntuを契約していて、PCのターミナルでSSH接続して作業しています。
VPSとラズパイの間で、DBを同期させ合いたいので、マルチマスターレプリケーションをしたいです。
発生している問題・分からないこと
設定ファイルの編集や、ユーザーの作成は完了しているのですが、スレーブのステータスに「Can’t connect to server on ‘IPアドレス’ (110 “Connection timed out”)」というエラーメッセージが表示されてしまいます。
telnetコマンドでスレーブからマスターのポートに接続しようと試みると、タイムアウトになってしまうので、この辺りが原因だと考えています。
参考になるURLなど、解決策をご存知の方がいっしゃいましたらよろしくお願い致します。
エラーメッセージ
error
1Connecting to master 2「Can’t connect to server on ‘'IPアドレス’ (110 “Connection timed out”)」
該当のソースコード
MySQL
1//以下、ChatGPTの指示を示します 2マルチマスターレプリケーションでは、両方のサーバーがそれぞれマスターとスレーブの役割を果たします。MariaDBの設定ファイル(/etc/mysql/mariadb.conf.d/50-server.cnf)を編集します。 3 4VPS(マスター側)の設定: 5 6以下の設定をVPSのMariaDB設定ファイルに追加、または修正します。 7 8[mysqld] 9server-id=1 # VPSのサーバーID 10log_bin=mysql-bin 11binlog_format=row 12 13Raspberry Pi(スレーブ側)の設定: 14 15Raspberry Pi側もほぼ同じ設定ですが、サーバーIDを異なる番号にします。 16 17[mysqld] 18server-id=2 # Raspberry PiのサーバーID 19log_bin=mysql-bin 20binlog_format=row 21 22設定を保存して、MariaDBを再起動します。 23 24sudo systemctl restart mariadb 25 263. レプリケーションユーザーの作成 27 28両方のMariaDBサーバーで、レプリケーション用のユーザーを作成します。VPS側で次のコマンドを実行します。 29 30CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; 31GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; 32FLUSH PRIVILEGES; 33 34Raspberry Pi側でも同様のユーザーを作成します。 35 364. マスターのバイナリログ情報の確認 37 38マスター(VPS)側で、現在のバイナリログの位置を確認します。 39 40SHOW MASTER STATUS; 41 42このコマンドにより、以下の情報が表示されます。 43 44+------------------+----------+--------------+------------------+ 45| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 46+------------------+----------+--------------+------------------+ 47| mysql-bin.000001 | 154 | | | 48+------------------+----------+--------------+------------------+ 49 50このFileとPositionの値を控えておきます(例では mysql-bin.000001 と 154)。 51 525. スレーブの設定 53 54Raspberry Pi(スレーブ)側で、VPSをマスターとして指定し、レプリケーションを開始します。 55 56CHANGE MASTER TO 57MASTER_HOST='VPSのIPアドレス', 58MASTER_USER='repl_user', 59MASTER_PASSWORD='password', 60MASTER_LOG_FILE='mysql-bin.000001', # 先ほど確認したFileの値 61MASTER_LOG_POS=154; # 先ほど確認したPositionの値 62 63START SLAVE; 64 65その後、スレーブの状態を確認します。 66 67SHOW SLAVE STATUS\G; 68 69このコマンドで表示される情報に、Slave_IO_Running と Slave_SQL_Running が Yes であれば、正常にスレーブが動作していることを示しています。 70 716. 逆方向の設定(Raspberry Pi → VPS) 72 73マルチマスターレプリケーションの場合、Raspberry PiからVPSへも同様の設定を行います。Raspberry Pi側でマスターとしての情報を確認し(SHOW MASTER STATUS;)、その情報を元にVPS側でスレーブ設定を行います。 74 75CHANGE MASTER TO 76MASTER_HOST='Raspberry PiのIPアドレス', 77MASTER_USER='repl_user', 78MASTER_PASSWORD='password', 79MASTER_LOG_FILE='mysql-bin.000001', # Piのバイナリログファイル 80MASTER_LOG_POS=154; # Piのバイナリログの位置 81 82START SLAVE; 83 84同様に、SHOW SLAVE STATUS\G; コマンドで、Slave_IO_Running と Slave_SQL_Running が Yes であることを確認します。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
ChatGPTに相談しましたが、
・マスター側のファイヤーウォールの設定の確認
・MariaDBの設定がbind-address = 0.0.0.0になっているかの確認
マスターへのネットワーク接続の確認
以上の3つの解決策が提示されました。最後のひとつだけエラーがあったので、そちらが原因だと思われるのですが、そのエラーを解決策を聞いても具体案が帰ってこなかったため、こちらに質問した次第です。
補足
もっと詳しく説明すべきポイントがございましたらコメントお願いいたします。
アドバイスありがとうございます。追記です。
・ラズパイとVPSの両方で、必要なポート(3306)が開いていることは確認済みです
・ラズパイのIPアドレスは172.16.〜で、ローカルIPアドレスです
・ラズパイからVPSへの接続について、pingは正常に応答していますが、telnetで3306番ポートへの接続はタイムアウトしてしまいます
・ラズパイとVPSを操作しているPCは、基本的に同じネットワーク内にあることを想定しています
以上の点については確認済みです。

