問題が生じた経緯

Conoha VPSで運営しているWebサービスのDB負荷が高じてきたため、スケールアウトによるMySQLのMaster-Slave体制への移行を検討した。

結論

先に結論からお伝えします。

Conoha VPSでDB負荷分散を行いたい場合、

のどれかとなると思います。


PlanetScaleについては、ご興味がございましたら弊ブログの以下の記事も参考になさってください。

参考記事サーバがなくてもMySQLが使える!PlanetScaleとNext.jsを組み合わせ速攻でDBに接続する方法。


以下検討経緯について詳しく書いていきます。

検討経緯

ConohaにあるDB構成図を見つける。

検討を始めて最初に行き当たったのがこちら。大規模Webアプリケーション

Conohaの公式が提供する構成図で

ロードバランサーに複数のWebサーバーが接続され、プライベートネットワーク側にはデータベースサーバーを接続した構成です。データベースはマスター/スレーブ構成になっていますが、ConoHaのプライベートネットワークは1Gbpsなのでレプリケーションなど大量のデータが流れる場合でも、安定したパフォーマンスを提供します。

とあります。ただ、公式でDBサーバーインスタンスが用意されているのに、この構成図では何をインスタンスとして用いているのかが明言されずよくわかりません。

仕方がないので、GUIから「DBサーバー」インスタンスを立ち上げ、挙動を確認しました。

DBサーバーの癖

GUIを触りつつ、並行して調査を行い、以下のことがわかりました。

潤沢なリソースでConoha内のネットワーク問題はあまりなさそうに見える

きつそうなポイント

ウィークポイントもわかってきました。

utf8をutf8mb4に指定すると、以下データベースでテーブルを作るときはutf8mb4になるので、この点の対応の手間を惜しまないでできる方は アリかもしれません。具体的な方法は下記のURLをご覧ください。

参考記事:ConoHa DBサーバー でutf8mb4を利用する方法

強みの「DBサーバ接続用ネットワーク」は接続時に再起動が必要

DBサーバ接続用ネットワーク は一種のプライベートネットワークのようで、接続にあたりWebサーバとして利用しているVPSは必ず再起動をかける必要があるようです。もっともこの点はAWSなども同じなのでそこまで気になりません。サービスの停止が伴うことは覚えておく必要があります。

また、その専用ネットワークのNICに接続する設定を、各VPSで都度行う必要があり、接続元のWebサーバの数が多い場合はちょっと面倒そうです。

詳しい手順は以下のURLをご覧ください。

参考ページ: ご利用ガイド DBサーバー接続用ネットワークを使う

構成図について問い合わせた

この時点で検討材料がいろいろ出ましたので、Conohaのサポートご担当者様に問い合わせフォームから直接確認を行いました。


結果、「構成図に記載があるDBサーバーは汎用VPSでの運用を想定している」 とのご返答をいただきました。よって、マネージドのインスタンス「DBサーバー」はこの構成案では使用できないことが判明しました。

GUIからMaster/Slaveの構成を実現できないかとの期待も少々あり 実際にインスタンスを立ち上げて確認するなどもしたものの流石に無理でした。ConohaでMySQLサーバの複数台構成による負荷分散を行いたい場合は、汎用VPSを立ち上げ、プライベートネットワークに向けてポートを開き、レプリケーション用のユーザーを作成する以外に方法がなさそうでした。

まとめ

現代においてマネージドであることがインフラ面での保守運用コストを大きく下げることにつながるため、負荷分散を考慮した利用用途で 「DBサーバ」インスタンスが使用できないことは少々残念ではありましたが、とてもコストパフォーマンスに優れているConohaさんのサービスですので 贅沢は言ってはいけない と思いました。

AWS RDSの最小レベルの構成(例えばdb.t3.micro、ストレージ10GB程度)でも、日本円で3,000円/月くらいはかかるので、648円/月~という低価格でマネージメントRDBMSを提供されているConohaさんは素晴らしいと改めて感じた次第でした!

この記事が何かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました!