長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

ProxySQL で DB の Read/Write Endpoint スイッチング

docker-compose 上で ProxySQL で primary DB と secondary DB への SQL 毎にアクセス先をスイッチングする環境を構築し、試験してみました。

github.com

ProxySQL とは?

ProxySQL はハイパフォーマンスな MySQLSQL プロキシです。

MySQLのフォークである Percona Server や MariaDB だけでなく、Galera Cluster にも対応しています。

今回やってみようと思ったのは

今回注目したのは ProxySQL の SQL プロキシの機能です。

ProxySQL は SQL によって、Read/Write エンドポイントをスイッチングしてくれます。

  • SELECT なら Read エンドポイントへ
  • INSERT, UPDATE, DELETE なら Write エンドポイントへ

という感じです。

使おうと思った経緯

Rails に関わらず、アプリケーション側の問題で、Read/Write のスイッチングができない場合があります。

  • Rails で特定の gem に依存して switch_point が効かないところがあるとか。。
  • 独自フレームワークで DB 側の処理が複雑すぎて手が出せないとか。。

なまじっか、サービスが成長していくと、アプリケーション側で DB のスイッチングができないことが、直接的に DB のボトルネックへ繋がることになりかねません。

この解決の為に ProxySQL を利用しようと思いました。

実際に試してみる。

冒頭のリポジトリgit clone して docker-compose up して頂ければ、起動します。

README の通りに実施してみてください。

  • UPDATE で primary DB へ
  • SELECT で secondary DB へ

アクセスしているのがわかります。

TODO

むしろここが肝心ですね。すでにお調べいただいている方、ご教示くださいましたら幸いです。

以上 参考になれば幸いです。