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 を実行するにあたっての考慮点と、どのように準備するべきかについて、お話いたします。

考慮点

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 のリリースノートで下記のようにご確認いただけます:

Previously, for the –ssl-mode=VERIFY_IDENTITY option, the client checked whether the host name that it used for connecting matched the Common Name value in the certificate but not the Subject Alternative Name value. Now, if the client uses OpenSSL 1.0.2 or higher, the client checks whether the host name matches either the Subject Alternative Name value or the Common Name value in the server certificate. Thanks to Daniël van Eeden for a patch on which this change was based. (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_MODE = VERIFY_IDENTITY は、sysbench から Aurora MySQL および Aurora Serverless MySQL のクラスターエンドポイント (Cluster Endpoint) および読み込みエンドポイント (Reader Endpoint) に接続する際には使用いただけません。クラスターエンドポイントおよび読み込みエンドポイントはインスタンスエンドポイントへの CNAME レコードとなり、そのため sysbench に渡されるホスト名と、最終的に接続する DB インスタンスのホスト名が異なります。本来 Subject Alternative Names (SAN) が MySQL クライアントライブラリで適切に処理されていれば、Aurora の DB インスタンスにインストールされているサーバ証明書はすべてのエンドポイント名を SAN として含んでいるため、問題にならないはずです。しかし、MySQL 8.0.18 時点では、この MySQL GitHub リポジトリ上のコードが示すように、MySQL クライアントライブラリは VERIFY_IDENTITY の検証に SAN を使用せず、コモンネーム (CN) との等価性のみを検証します。

そのため、クラスターエンドポイントおよび読み込みエンドポイントを使用する際には VERIFY_CA を使用するか、もしくはインスタンスエンドポイントを使用する必要があります。

まとめ

セキュリティはアプリケーションを実行する上で最も重要な要素で、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.