問題が生じた経緯
Conoha VPSで運営しているWebサービスのDB負荷が高じてきたため、スケールアウトによるMySQLのMaster-Slave体制への移行を検討した。
結論
先に結論からお伝えします。
Conoha VPSでDB負荷分散を行いたい場合、
- 汎用VPSをMySQLようにもう一つ立て、プライベートネットワークに設置してDBサーバとして使う。今回のケースの場合は2台建てる。
- 外部MySQLサーバを使う。AWS RDSがいちばんの候補だが、セキュリティ面で気になる。
- PlanetScaleを使う。マネージドサービスで長期に渡りインフラ保守に気を配らなくてよく楽だが、月額費用が嵩むかもしれない。また、foreign keyを使っている場合は利用できない。
のどれかとなると思います。
PlanetScaleについては、ご興味がございましたら弊ブログの以下の記事も参考になさってください。
参考記事サーバがなくてもMySQLが使える!PlanetScaleとNext.jsを組み合わせ速攻でDBに接続する方法。
以下検討経緯について詳しく書いていきます。
検討経緯
ConohaにあるDB構成図を見つける。
検討を始めて最初に行き当たったのがこちら。大規模Webアプリケーション
Conohaの公式が提供する構成図で
ロードバランサーに複数のWebサーバーが接続され、プライベートネットワーク側にはデータベースサーバーを接続した構成です。データベースはマスター/スレーブ構成になっていますが、ConoHaのプライベートネットワークは1Gbpsなのでレプリケーションなど大量のデータが流れる場合でも、安定したパフォーマンスを提供します。
とあります。ただ、公式でDBサーバーインスタンスが用意されているのに、この構成図では何をインスタンスとして用いているのかが明言されずよくわかりません。
仕方がないので、GUIから「DBサーバー」インスタンスを立ち上げ、挙動を確認しました。
DBサーバーの癖
GUIを触りつつ、並行して調査を行い、以下のことがわかりました。
- 実質的にはVPSで他の利用者と共用
- CPU/メモリのスペックは公開されていないが、どうやら汎用VPSと同じものを使っている(ように見える。)
- 最安で648円(税込)@ストレージSSD 10GB ~とかなり安い。IPaaS的なRDBMSでは最安に近い。
- 専用のDB接続用ネットワークが用意されている 下記引用
- PhpMyAdminがマネージドで利用できる。セキュリティホールができやすいソフトなので、Conoha側に保守・アップデートを一任できるのは必要な人には便利そう(自分は使わない)
- SSHトンネリングを利用せずローカルから直接専用できる専用のドメインが振られる。IPを絞ればセキュリティ面でも比較的安心そう。
きつそうなポイント
ウィークポイントもわかってきました。
- MariaDBしか選べない。MySQLは選択できない。
- データベース名に必ず
4kdaz_
のような接頭辞がつく。仮想MySQLサーバで、他のユーザーと共用しなければいけないのが原因か。(具体的な仮想化技術までは追えてない) - デフォルトのデータベース文字セットがUTF8しか選べず、絵文字などが文字化けする可能性。もっとも解決策は用意されている。
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さんは素晴らしいと改めて感じた次第でした!
この記事が何かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました!