MDS H/A(High Availability)を使ってみた

こんにちは。Oracle Cloud Infrastructure(OCI)特集 編集部です。

以前にMySQL Database Service (MDS)を使用したブログを記載していました。
MySQL Database Service (MDS)を使ってみた

そのMDSにおいて、2021年3月31日に新しくH/A(High Availability)の機能が追加されたので、
実際に使ってみたいと思います。

MDS H/Aの概要

OCI公式マニュアルから引用します。

MySQL Database High Availabilityは、MySQL Group Replicationを使用してスタンバイ・レプリカを提供し、データの保護とビジネスの継続性を実現します。MySQLグループレプリケーションは、Paxosアルゴリズムを実装しています。高可用性DBシステムは、プライマリと2つのセカンダリの3つのMySQLインスタンスで構成されます。プライマリ・インスタンスに書き込まれたすべてのデータは、セカンダリにも書き込まれます。プライマリに障害が発生した場合、セカンダリの1つが自動的にプライマリに昇格し、読み書き可能なモードに設定され、データを失うことなくクライアントアプリケーションの利用を再開します。

・OCI公式マニュアル
https://docs.oracle.com/en-us/iaas/mysql-database/doc/business-continuity.html#MYAAS-GUID-2CD8BFB9-30B2-4ED5-BE27-E526DD3F6E0A

・MySQL Group Replicationについて

https://dev.mysql.com/doc/refman/8.0/en/group-replication.html

 

■今回の作業の流れ

  1. MDS H/Aの作成
  2. HDS H/Aへの接続
  3. 性能検証

1.MDS H/Aの作成

OCI Webコンソールにログインし、MDSの画面を開きます。

「MySQL DBシステムの作成」をクリックします。

画像に alt 属性が指定されていません。ファイル名: 001-1.png

設定値を入力していきます。※最低限必要なパラメータのみ記載しています。

  • 名前:[任意の名前]
  • ???:高可用性

画像に alt 属性が指定されていません。ファイル名: 002-2.png

  • ユーザー名:[任意のユーザー名]
  • パスワード:[任意のパスワード]
  • 仮想クラウドネットワーク:[任意の仮想クラウドネットワーク]
  • サブネット:[任意のサブネット]

画像に alt 属性が指定されていません。ファイル名: 003-2.png

※「配置の構成」ですが、サブネットを可用性ドメイン固有にした場合、もしくは東京リージョンのように可用性ドメインが1つのリージョンの場合は、フォルトドメインを選択する形になります。

画像に alt 属性が指定されていません。ファイル名: 004-2.png

最後に「作成」をクリックします。

15分ほどで作成が完了しました。

画像に alt 属性が指定されていません。ファイル名: 005-2.png

次に、Webコンソール上から簡単にスタンドアロンのMDSとの違いを確認してみます。

まず、「DBシステムの構成」から「OCPU」、「メモリー」、「ストレージ・サイズ」が3倍になっている(インスタンスが3つ起動している)ことが確認できます。

また、「高可用性」が有効となっています。

画像に alt 属性が指定されていません。ファイル名: 006-4.png

続いて、「他のアクション」から「スイッチオーバー」をクリックします。

画像に alt 属性が指定されていません。ファイル名: 007-1.png

この画面から手動でスイッチオーバーを行うことができます。

画像に alt 属性が指定されていません。ファイル名: 008.png

※サブネットを可用性ドメイン固有にした場合、もしくは東京リージョンのように可用性ドメインが1つのリージョンの場合は、フォルトドメインごとになります。

画像に alt 属性が指定されていません。ファイル名: 009-1.png

2.MDS H/Aへの接続

同じ仮想クラウドネットワーク内のサーバーから、mysqlコマンドでMDSへ接続してみます。
接続先は、スタンドアロンのMDSと同様にプライベートIPアドレス、もしくはホスト名で指定します。

※接続先のプライベートIPアドレスは、MySQL DBシステムの詳細画面から確認できます。

画像に alt 属性が指定されていません。ファイル名: 011-2.png

画像に alt 属性が指定されていません。ファイル名: 010.png

無事接続できました。

3.性能検証

概要

スタンドアロン構成のMDSとHA構成のMDSで、クエリ処理の性能を比較してみたいと思います。

検証方法

ツールはmysqlslapを使用します。
5ユーザーから合計30万回クエリを実行し、処理にかかった時間を比較します。
クエリは、検索系(select)と更新系(update, insert)それぞれで行います。
検索するテーブルには事前に1万レコード作成します。

使用するスペックはスタンドアロン/HA構成とも以下とします。

  • シェイプ:MySQL.VM.Standard.E3.1.8GB
  • OCPU数:1
  • メモリー:8 GB

また、ツールを実行するサーバーは以下を使用しました。

  • OS:CentOS7
  • シェイプ:VM.Standard.E3.Flex
  • OCPU数:1
  • メモリー:8 GB

結果

  HA構成 スタンドアロン構成
検索系 25.964 25.225
更新系 319.184 162.282
単位:秒
 
検索系では大きな差はみられませんでしたが、更新系ではデータのレプリケーションを行う分、HA構成の方が約50%ほど劣る結果となりました。
 

まとめ

今回、MDSに新しくH/A(High Availability)の機能が追加されたので、
実際に使ってみました。

オプション1つで、とても簡単にHA構成の構築を行うことができました。

その他に気付いた点として、
MDS/HAは sql_require_primary_key パラメータがデフォルトでONとなっており、
テーブル作成時にプライマリキーが必須となっている模様です。
OFFにするには構成を作成してMDS/HAを再構築する必要があるのでご注意ください。

今後もMDSに便利な機能が追加されていくと思うので、注目していきたいですね。