s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

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 

検証結果

f:id:s_tajima:20140516215805p:plain

HAproxyを通した結果、10数%ほどパフォーマンスに影響が出そうなことがわかった。
また、当初はdstatで取得した実行時のWebサーバの負荷についても比較する予定だったが、
どちらもほぼ負荷のない状態だったので割愛。

検証結果のデータはこちら。
https://gist.github.com/vg-s-tajima/aada13917a18b489046b/revisions