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

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

kenzo0107/proxysql-mysql-group-replication

ProxySQL とは?

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

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

  • Rails 等フレームワークで Transaction 処理がどう扱われるか調査

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

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

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

https://kenzo0107.github.io/2019/03/24/2019-03-25-proxysql-db-read-write-endpoint/

Author

Kenzo Tanaka

Posted on

2019-03-25

Updated on

2020-05-07

Licensed under

コメント