MySQL Read Replica に対して負荷をかけてオートスケーリング動作を確認する


モチベーション

Amazon RDS (ここではAuroraを選択) のリードレプリカに対するオートスケーリングが正常に動くかどうかを確認するためにリードレプリカに対して負荷をかけたい。
ぱっとぐぐってもピンとくるものがなかったのでメモ。

方針

Sysbench を利用して、以下の方針で負荷をかける。

  1. マスターDBに対してテスト用データを書き込む (リードレプリカには書き込んだ直後にコピー・反映される)
  2. リードレプリカに対して読み取り専用の負荷試験を行う

インストール手順は上記 Github を参照してください。

手順

各種DBツールはインストールしているものとします。 DBは今回はAurora 5.6互換を利用しましたが、それ以外のバージョンでも行けるはずです。
DB接続時のユーザーはデータベースとテーブルを作れる権限を持っていることを前提とします。

# DB作成 (パスワードはコンソールに入力)
$ mysqladmin create benchmark -u <接続ユーザー> -p -h <マスターDBのホスト名>
# テストデータ挿入 (oltp_read_write 部分は 
# oltp_read_only でも oltp_write_only でも OK) 
$ sysbench --db-driver=mysql /
    --mysql-host=<マスターDBのホスト名> \
    --mysql-user=<接続ユーザー> --mysql-password=<接続パスワード> \
    --mysql-db=benchmark oltp_read_write prepare

# 負荷テストをリードレプリカに対して readonly で実施
# 同時接続数32, 負荷時間300秒
$ sysbench --db-driver=mysql /
    --mysql-host=<リードレプリカのホスト名> \
    --mysql-user=<接続ユーザー> --mysql-password=<接続パスワード> \
    --mysql-db=benchmark oltp_read_only run \
    --threads=32 --time=300

# 不要な場合、終わった後は該当テーブルを削除
$ mysqladmin drop benchmark -u <接続ユーザー> -p -h <マスターDBのホスト名>

実施結果

t2.small 1台のリードレプリカに対してCPU利用率50%程度まで上昇し、スケールアウトすることと、負荷が無くなってからしばらくたつとスケールインする両方を確認できました。