気軽にRDSの負荷分散
RDSの負荷分散にnginxのstream機能を使った話。
やりたいイメージ
前提
- RDSのマスターとレプリカで負荷分散させたい
- ELBでやろうとしたけどEC2にしか対応していない
- HAproxy MySQLproxyちゃんと構築する時間がない
nginx再ビルド
TCP Load Balancing with NGINX Plus R6 and NGINX 1.9.0
http://nginx.org/download/nginx-1.11.9.tar.gz
./configure --with-stream
make
make install
設定ファイル
nginx.conf
helthcheckの設定とかtimeout設定したい場合は、
色々オプションあるので適当に。
以下最低限
stream { error_log /var/log/nginx/mysql_proxy.log; upstream mysql { zone backends 64k; server rds-master:3306 fail_timeout=30s; server rds-rep:3306 fail_timeout=30s; } server { listen 3360; proxy_pass mysql; proxy_timeout 10s; proxy_connect_timeout 1s; } }
確認
- 接続できればOK
mysql -h 127.0.0.1 --port 3360 --protocol tcp -u hoge --pass
- ちゃんと分散されてるかはMasterとReplicaにそれぞれ接続しコネクション数を確認
SELECT * FROM information_schema.PROCESSLIST;
- あとはwightの調整とか分散具合に合わせて調整すればOK
- writeの場合はmasterに書き込みにいくようApplicatino側を修正。
- 書き込めたらOK