モチベーション
Amazon RDS (ここではAuroraを選択) のリードレプリカに対するオートスケーリングが正常に動くかどうかを確認するためにリードレプリカに対して負荷をかけたい。
ぱっとぐぐってもピンとくるものがなかったのでメモ。
方針
Sysbench を利用して、以下の方針で負荷をかける。
- マスターDBに対してテスト用データを書き込む (リードレプリカには書き込んだ直後にコピー・反映される)
- リードレプリカに対して読み取り専用の負荷試験を行う
インストール手順は上記 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%程度まで上昇し、スケールアウトすることと、負荷が無くなってからしばらくたつとスケールインする両方を確認できました。