MySQLのリクエストをHAproxy経由にした時のパフォーマンスの計測
目的
現在運用している環境で、複数台のSlaveの参照をインフラレイヤで振り分けるためにHAproxyの導入を検討している。
HAproxyを経由した場合とそうでない場合に、パフォーマンス/負荷の点でどれほど差があるのかを検証してみた。
尚、HAproxyは各Webサーバ内に同居させることを想定している。
検証環境
- 検証マシン: 2台(Webサーバ, DBサーバ)
- OS: Scientific Linux release 6.1 (Carbon)
- MySQL: MySQL-5.6.16
- HAproxy: haproxy-1.4.18
HAproxyの設定は以下の通り。
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 1000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode tcp log global option tcplog listen mysql bind 127.0.0.1:3306 mode tcp retries 1 server node01 mysqlserver-a:3306 check port 3306
検証方法
Webサーバから以下のスクリプト(mysqlslapを実行)を交互に3回ずつ実行し、
その実行時間と、実行中のWebサーバーの負荷を計測。
- mysqlslap_direct.sh
mysqlslap \ --user=testuser \ --password=testpass \ --host=mysqlserver-a \ --port=3306 \ --concurrency=10 \ --iterations=3 \ --engine=innodb \ --auto-generate-sql \ --auto-generate-sql-load-type=write \ --number-of-queries=10001 \ --create-schema=test_mysqlslap
- mysqlslap_via_haproxy.sh
mysqlslap \ --user=testuser \ --password=testpass \ --host=127.0.0.1 \ --port=3306 \ --concurrency=10 \ --iterations=3 \ --engine=innodb \ --auto-generate-sql \ --auto-generate-sql-load-type=write \ --number-of-queries=10001 \ --create-schema=test_mysqlslap
検証結果
HAproxyを通した結果、10数%ほどパフォーマンスに影響が出そうなことがわかった。
また、当初はdstatで取得した実行時のWebサーバの負荷についても比較する予定だったが、
どちらもほぼ負荷のない状態だったので割愛。
検証結果のデータはこちら。
https://gist.github.com/vg-s-tajima/aada13917a18b489046b/revisions