Amazon Web Services ブログ

SSL/TLS を経由して RDS MySQL, RDS MariaDB, and Amazon Aurora MySQL に sysbench を実行する

sysbench は MySQL 互換のデータベースでベンチマークを実行するために有用なツールです。もし、sysbench を使って Amazon Aurora MySQL のパフォーマンスの評価をしたい場合、Amazon Aurora Performance Assessment Technical Guide が役に立つでしょう。しかし、もし SSL/TLS を経由して sysbench を実行したい場合、このツールや AWS のサービスにあるいくつかの制限について考える必要があります。

この投稿では、RDS MySQL, RDS MariaDB, and Aurora MySQL で sysbench を実行するにあたっての考慮点と、どのように準備するべきかについて、お話いたします。

(2023年5月8日:原文の変更に合わせて一部修正・更新いたしました)

考慮点

sysbench の最新のパッケージリリースは 1.0.17 になります。もし、yum や RPM のようなパッケージマネージャから sysbench をインストールした場合、このバージョンがインストールされます。このバージョンでは、sysbench は SSL/TLS を使用するにあたって、以下のような制限を持っています:

  • --mysql-ssl オプションは ON または OFF のみが指定可能で SSL_MODEREQUIRED 固定
  • クライアント秘密鍵、クライアント公開鍵、CA 証明書のすべてが必須
  • クライアント秘密鍵、クライアント公開鍵、CA 証明書のパスはそれぞれ client-key.pem, client-cert.pem, cacert.pem に固定

RDS は SSL 接続のためのクライアント秘密鍵を提供しておらず、しかし sysbench 1.0.17 がこれを必要とするため、sysbench は SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に接続できなくなっています。もし、SSL/TLS が sysbench 1.0.17 で有効になっている場合、以下のようなエラーが出力されるでしょう:

$ sysbench oltp_read_write --db-driver=mysql ... --mysql-host=rds-mysql.***.ap-northeast-1.rds.amazonaws.com --mysql-ssl=on prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)

FATAL: unable to connect to MySQL server on host 'rds-mysql.***.ap-northeast-1.rds.amazonaws.com', port 3306, aborting...
FATAL: error 2026: SSL connection error: SSL_CTX_set_default_verify_paths failed
FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed

上記の制限はバージョン 1.1 からこちらのコミットにより撤廃され、下記が可能となりました:

  •  --mysql-ssl オプションに sysbench バイナリをビルドするのに使用された MySQL クライアントでサポートされてい任意の SSL_MODE を指定可能
  • 証明書ファイルは任意で指定可能
  • それぞれの証明書ファイルのパスは --mysql-ssl-key, --mysql-ssl-cert, --mysql-ssl-ca オプションで任意に指定可能

そのため、もし sysbench 1.1 を使用していれば、下記のように SSL_MODE = REQUIRED で SSL/TLS 経由で sysbench を RDS MySQL, RDS MariaDB, or Aurora MySQL に実行することができます:

$ sysbench oltp_read_write --db-driver=mysql ... --mysql-host=rds-mysql.***.ap-northeast-1.rds.amazonaws.com --mysql-ssl=REQUIRED --mysql-ssl-ca=rds-combined-ca-bundle.pem prepare
sysbench 1.1.0-174f3aa (using bundled LuaJIT 2.1.0-beta3)

Creating table 'sbtest1'...

しかし、sysbench 1.1 はパッケージとしてはリリースされていないため、ソースコードからビルドする必要があります。

sysbench 1.1 をビルドする

必要な前提パッケージをインストールする

まず最初に、MySQL ライブラリのインストールと sysbench のビルドの前提となるパッケージをインストールする必要があります。もし Amazon Linux AMIAmazon Linux 2 または Red Hat Enterprise Linux AMI をご利用中の場合、これらのパッケージは yum コマンドで下記のようにインストールすることができます:

$ sudo yum install git gcc make automake libtool openssl-devel ncurses-compat-libs

さらに、MySQL クライアントライブラリとヘッダファイルのインストールをする必要があります。もし、Red Hat Enterprise Linux AMI をご利用中であれば、MySQL 公式の yum リポジトリを使用することができます。MySQL Community Downloads にある RPM パッケージを利用して MySQL yum リポジトリを追加してください。リポジトリをインストールしたら、下記のように MySQL クライアントライブラリとヘッダファイルを yum 経由でインストールすることができます:

$ sudo yum --enablerepo=mysql-80-community install mysql-community-devel mysql-community-client mysql-community-common

もし、Amazon Linux AMI または Amazon Linux 2 をご利用中の場合、MySQL 8.0.17 以降で必要となる OpenSSL 1.1.1 および glibc 2.28 が Amazon Linux リポジトリに存在しないため、MySQL 8.0.16 の RPM パッケージを MySQL Product Archives からダウンロードし、下記のようにインストールする必要があります:

$ sudo yum install mysql-community-common-8.0.16-2.el7.x86_64.rpm
$ sudo yum install mysql-community-libs-8.0.16-2.el7.x86_64.rpm
$ sudo yum install mysql-community-client-8.0.16-2.el7.x86_64.rpm
$ sudo yum install mysql-community-devel-8.0.16-2.el7.x86_64.rpm

Aurora Serverless がワイルドカード証明書を使用しており、また MySQL はワイルドカード証明書を 8.0.12 からサポート開始したため、MySQL 8.0.12 以降の MySQL クライアントライブラリおよびヘッダファイルをインストールする必要があります。この変更は MySQL 8.0.12 のリリースノートで下記のようにご確認いただけます:

以前はSSL_MODE = VERIFY_IDENTITY は、オプションについて、クライアントは接続に使用したホスト名が証明書の Common Name Value と一致するかどうかをチェックしていましたが、Subject Alternative Valueはチェックしていませんでした。現在クライアントが OpenSSL 1.0.2 以降を使用している場合は、クライアントはホスト名がサーバー証明書のSubject Alternative ValueまたはCommon Name Value のどちらかと一致するかどうかをチェックします。この変更の基礎となるパッチを提供してくれたDaniël van Eedenに感謝します。 (Bug #16211011, Bug #68052, Bug #27511233, Bug #89578)

sysbench のソースコードを GitHub リポジトリのクローンで取得する

下記のように、git clone を使用して sysbench GitHub リポジトリをクローンすることができます:

$ git clone https://github.com/akopytov/sysbench

sysbench をビルドする

下記のように、ソースコードのディレクトリに存在する automake と libtool を使用したスクリプトで、sysbench をビルドすることができます:

$ cd sysbench
$ ./autogen.sh
...
$ ./configure
...
$ make
...
$ sudo make install
$ sysbench --version
sysbench 1.1.0-174f3aa

SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行する

これまでの手順により、下記のように、SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行することができるようになりました:

$ sysbench oltp_read_write --db-driver=mysql ... --mysql-host=rds-mysql.***.ap-northeast-1.rds.amazonaws.com --mysql-ssl=REQUIRED prepare
sysbench 1.1.0-174f3aa (using bundled LuaJIT 2.1.0-beta3)

Creating table 'sbtest1'...
...
$ sysbench oltp_read_write --db-driver=mysql ... --mysql-host=rds-mysql.***.ap-northeast-1.rds.amazonaws.com --mysql-ssl=REQUIRED run
sysbench 1.1.0-174f3aa (using bundled LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 100
Report intermediate results every 10 second(s)
Initializing random number generator from current time

Initializing worker threads...

Threads started!
...

RDS MySQL, RDS MariaDB および Aurora MySQL で SSL_MODE = VERIFY_IDENTITY または VERIFY_CA を使用するためには rds-combined-ca-bundle.pem 証明書をダウンロードしてください。Aurora Serverless MySQL の場合は、AmazonRootCA1.pem 証明書をダウンロードしてください。

まとめ

セキュリティはアプリケーションを実行する上で最も重要な要素で、SSL/TLS はデータベースのワークロードをセキュアに保つために有用です。しかし、SSL/TLS の使用はオーバーヘッドや通常よりも高いリソース消費を引き起こします。そのため、SSL/TLS によって引き起こされる影響の基準値を計測するために、ベンチマークは非常に重要になります。

この投稿では、なぜ SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行するためにいくらかの準備が必要なのか、このユースケースをカバーするために sysbench をビルドする方法、そして SSL/TLS を RDS MySQL, RDS MariaDB および Aurora MySQL で使用するにあたってのいくつかの考慮点について説明いたしました。

この投稿を読むことで sysbench を SSL/TLS によって引き起こされる影響の基準値を計測するために RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行することができるようになり、またそれらがどのように動作するかについてさらに理解が進むことを願っています。

原文: Running sysbench on RDS MySQL, RDS MariaDB, and Amazon Aurora MySQL via SSL/TLS


About the Author

Yoshihiko Matsuzaki is a Database Engineer with the Relational Database Services (RDS) team at Amazon Web Services.