Ubuntu Server セットアップ備忘録 (17) - 遠隔地で MySQL レプリケーション(SSHポートフォワード使用)

MySQLレプリケーションについては以前 Ubuntu Server セットアップ備忘録 (14) - MySQL レプリケーション - kamicupの備忘録 で書きましたが、今度は、遠隔地に置いたマシンを MySQL の Slave として追加しました。目的が限定的なので VPN ではなく手軽な SSH のポートフォワーディング機能を使っています。

キーポイント:

  • Ubuntu2 のシェルで ssh -f -N -L 13306:localhost:3306 user@ubuntu1 を実行してトンネルを掘る。
  • Ubuntu2 の MySQL では CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=13306, ......; とする。

ついでに言っちゃうと Ubuntu1, Ubuntu2 ではそれぞれ Tomcat/Apache2 が動いていて、そっくり同じウェブアプリ(war)をデプロイしてあります。また別途 DNS では Ubuntu1 を公開用URLに関連づけてあります。

こうしておくと Ubuntu1 がハードウェアや回線の障害で落ちた時、DNS の設定を書き換える(公開URLを Ubuntu2 に向ける)だけで、とりあえずデータの連続性を保ちつつ Ubuntu2 がメインに昇格してサービスを続行できます。

さらに言っちゃうと、本件の場合、とある DDNS サービスを使っているので DNS の書き換えがすごく簡単です。なんなら Ubuntu2 の cron で「公開URL(Ubuntu1)をチェックして、もし落ちてたら、DDNS に自分の IP アドレスを登録しに行く」というスクリプトを回しておけば、障害発生時に勝手に仮復旧してくれます。(Ubuntu1 が自然復活して DDNS に自分を再設定すると困るので、その細工は必要。)

ちなみに、メインでない(バックアップとして待機)状態でデータ弄られると困る件は、ヴァーチャルホスト設定がうまいこと(副作用的に)防止してくれます。

まぁなんというか、ゆるゆるではありますが、最低限の予算でそれなりの障害対策・・・にはなってるだろうと。