MySQLをチューニング、そしてスケールアップ/スケールアウトへ

第10回(最終回) クラウド環境によるスケールアウト構成

クラウド環境におけるMySQL

Webシステムから業務システムなど様々な領域でいろいろなクラウド環境の利用が広がっています。クラウド環境でのMySQLは、データベースサービス型クラウドとして提供される形態をはじめ、クラウドサービスの構成情報や認証の管理に利用されるケースやクラウドサービス上でのアプリケーションで利用されるケースなど、多様な導入例が見られます。多くのクラウド関連技術はWebシステムで利用されている技術から発展しており、WebシステムでデファクトスタンダードとなっているMySQLをクラウドでも活用することは自然な流れと言えます。

クラウド環境でMySQLを導入することで、クラウドサービスが持っている構成拡張の機能を利用してスケーラビリティを確保できることもあります。ただしこの場合でも動的に追加されたMySQLサーバに対するアプリケーションからのアクセス方法の定義などが課題なり得ます。MySQL開発チームではMySQL Fabricを提供することで、データを分割して管理するシャーディング構成の動的な拡張とアプリケーションからのアクセス先の管理、さらにはOpenStackとの連携を実現しています。

パブリッククラウドのDBaaS

データベース機能を提供するクラウドサービスはDBaaS(DataBase as a Service)と呼ばれています。代表的な例はAmazon Web Services(AWS)のRelational Database Service(RDS)やGoogle Cloud SQL、HP Helion Public Cloud Relational Databaseなどがあります。MySQLをベースにしたデータベースサービスとしてそれぞれビジネスが開始され、現在のAmazon RDSでは他のデータベースも利用可能となっています。さらにAmazon RDS for AuroraなどもMySQLと互換性のあるサービスとして提供される模様です(2015年6月現在はプレビュー扱い⁠⁠。

一般的にこれらのDBaaSはMySQLを元に構成されていてアプリケーションの観点では互換性が保たれていますが、データベース管理者として構成、運用や設定について全ての機能が利用できる訳ではありません。たとえばAmazon RDSではMySQL 5.6で導入されたグローバルトランザクションIDやトランスポータブルテーブルスペース、またセキュリティを強化するプラグインは利用できません。

PaaS上でのMySQLの利用

多くのDBaaSではデータベースファイアウォールのMySQL Enterprise Firewallに代表される、MySQL Enterprise Editionが提供するセキュリティや性能の拡張機能も利用できないことがあります。またMySQLサーバの全ての機能を活用することも制限されていることが多く、さらに基本的にMySQLサーバをベースにして構築されているため、MySQL Clusterによる高い性能拡張性と耐障害性を活用することもできません。これらの機能を利用してより柔軟性のある運用のためには、主に仮想サーバ機能を提供するPaaS(Platform as a Service)上にMySQLを導入することで可能となります。

たとえばオンライン決済サービスのPayPalは、PaaSの一つであるAmazon EC2上にMySQL Clusterを導入して不正取引のリアルタイム検出を行っています。

参考URL
2012年MySQL Connect ConferenceでのPayPal社による発表資料

OpenStackとMySQLの関係

オープンソースベースのクラウド環境実現のためのソフトウェアとしてOpenStackが採用される事例も出てきています。OpenStackの全体構成を司るコントローラのデータベースとしてMySQLが利用されています。このコントローラのデータベースとしては、Novaによるクラウド全体の構成情報やGlanceのイメージ管理情報、Neutronの仮想ネットワーク管理など、あらゆるOpenStackのコンポーネントのメタデータを格納していきます。コントローラのデータベースの高可用性の確保には、同期レプリケーション構成が可能なオープンソースのGalera Clusterを利用することが現時点では一般的です(2015年6月現在⁠⁠。

アクセストークンを蓄積するTroveやリソースの利用状況に応じた課金の仕組みを構築ためのCeilometerを利用する場合などは、メタデータを格納するコントローラのデータベースへ大量の書き込みが行われることが想定されます。その場合、MySQL Clusterを利用することでスケーラビリティを確保することも考えられますが、現時点ではInnoDBストレージエンジンとNDBCLUSTERストレージエンジンの最大レコード長の違いなどによる課題が残っており、OpenStackの各コンポーネントのソースコードを修正するなどの回避策が必要とされています(2015年6月現在⁠⁠。

参考URL
YouTube: 2015 OpenStack Vancouver - Vladislav Belogrudov - High Availability with MySQL Active:Active Cluster

MySQLのレプリケーション機能を応用して、複数のMySQLサーバが全てレプリケーションのマスタサーバとして稼働し、どのサーバで変更した内容も全体に反映されるGroup Replication機能を開発中です。この機能の利用先としてはコントローラのデータベースとしても想定されています。Group Replicationの仕様などはMySQLの高可用性機能開発チームのブログにてタグ付けされてまとめられていますのでご参照ください。

参考URL
MySQL High Availability: Tag Archives: MySQL Group Replication

DBaaSの構築

OpenStackの1コンポーネントであるTroveを利用するとオープンソースのDBaaSを構築可能です。TroveはMySQLのみではなく他のRDBMSやNoSQL製品なども管理でき、複数のノードをまとめて運用することが可能となります。Troveは2014年にリリースされたIcehouseから正式コンポーネントに追加されています。MySQLはTroveのデフォルトのデータベースのような扱いとなっており、インストールやセットアップの手順もまずはMySQLをDBaaSとして稼働する流れとなっています。すでにRackspace Cloud DatabasesやeBayのデータベースでMySQLを始めとした多種のデータ管理製品をTroveにてまとめて運用しています。あらかじめOpenStack Novaのコンピュートノードとデータストアインスタンスの構成を複製してテンプレートを用意しておき、アプリケーション側での用途や利用者の増加に応じて設定を調整して起動することで、システム全体を簡単にスケールさせることを狙いとしています。

MySQL Fabricによるシャーディング構成

レプリケーション構成では参照性能の向上は実現できますが、更新処理性能の向上や格納できるデータサイズはマスタサーバのスペックによって制限されてきます。複数のレプリケーション構成を用意して、データの一部分を一組のレプリケーション構成に格納して全体として大きなデータの管理を行うシャーディングを利用することによって、より多くのデータ更新や大量のデータの管理が可能となります。

MySQL Fabricはこのレプリケーション機能を活用したシャーディング構成を構築および管理するフレームワークとなります。シャーディング構成全体はMySQL Fabricノードが管理し、mysqlfabricコマンドから一組のレプリケーション構成であるグループの作成やグループへのMySQLサーバの登録、シャーディングの場合は格納する値の範囲の定義などを行います。なおMySQL FabricはPythonで書かれたオープンソースのユーティリティコマンド群のMySQL Utilitiesに含まれています。

図1 MySQL Fabricの構成概要[1]
図1 MySQL Fabricの構成概要(注1)

アプリケーションからデータへアクセスの際は、MySQL Fabricに対応したコネクタ(データベース接続部品)が、まずMySQL Fabricノードにアクセスしてどのサーバがどの値を持っているかのマッピング情報を取得し、参照更新を行います。MySQL Fabricノードは管理対象のMySQLサーバの稼働監視も行っており、マスタサーバに障害が発生した場合などはスレーブからマスタに自動的に昇格させ、マッピング情報も更新します。アプリケーションは新しいマッピング情報を元に、新しいマスタにアクセスできるため、障害発生時にもアプリケーションへの影響を最小限にすることが可能です。

MySQL FabricはOpenStackとの連携が可能です。MySQL FabricからOpenStack Novaにサーバプロビジョニングの指示を出すことが可能で、生成されたサーバ上のMySQLサーバがどのグループのマスタまたはスレーブなのかはMySQL Fabricノードのマッピング情報に記録されます。このため新規に生成されたMySQLサーバをアプリケーションから透過的に利用することが可能となります。

参考URL
Elastic Scalability in MySQL Fabric Using OpenStack

MySQL Fabric 1.5ではOpenStack Novaとの連携のみが可能ですが、AWSのサービスやOpenStack Troveとの連携も準備がされています。MySQL Utilities 1.5.3のリリースノートでも⁠MySQL Fabric was improved to support AWS and Trove.⁠と書かれており、対応は済んではいないものの必要な改良を行っています。

参考URL
Changes in MySQL Utilities 1.5.3 (2014-11-04)

おわりに

これまで全10回に渡ってMySQLのチューニングや、単体では収まらない規模感のシステムで求められるスケールアウト構成などについて説明してきました。現在もMySQL 5.7のリリースに向けてスケールアップおよびスケールアウトの両面で活用できる多くの改良が進められていますのでご期待ください。これまでご愛読いただきありがとうございました。

おすすめ記事

記事・ニュース一覧