MariaDB MaxScale
今月の気になるオープンソース情報(2019年7月号)
OSS研究室 松崎 元昭
今回はDBクラスタシステムを構成することができるMariaDB MaxScaleを紹介します。
DBクラスタの用途
DBクラスタとは、複数のDBサーバを束ねたデータベースシステムです。複数レプリカによるデータの完全性の確保、サービスの可用性の確保、また参照負荷を分散するなどの利点があり、比較的大規模なDBシステムに利用されます。
DBクラスタは、データベースにメインコンテンツや大切なデータを格納している次のようなシステムに利用が期待されます。
- コンテンツサービスプロバイダやWebホスティングサービスなどで利用するデータベースサービス
- 恒常的に多くの問い合わせがある権威DNSサービスのバックエンド
- メールデータの格納にDBを利用するソフトウェアを利用したメールサービスのバックエンド
- 停電後の復旧時などなどバースト的な問い合わせが発生するDHCPサービスやRADIUSサービスのバックエンド
MariaDB MaxScaleの特徴
MariaDB MaxScaleは、MariaDBクラスタへの問い合わせや更新操作(「クエリ」といいます)を中継(「プロキシ」といいます)するOSSです。クライアントアプリケーションに複数DBサーバの存在を意識させないように交通整理する機能(「ルーティング」といいます)を持っています。
MariaDB MaxScaleには、以下のような特徴があります。
- MySQLプロトコルに特化したプロキシサーバ
- 冗長構成されたバックエンドDBサーバに対応
- Master-Slave型クラスタ、マルチマスタ型クラスタのどちらにも対応
- 読み込みクエリと書き込みクエリを別サーバに振り分けることができる
- マスタサーバの故障を検知し、バックエンドDBを縮退させることができる
- 管理コマンドにより、バックエンドDBの状態標示、MaxScaleサーバの操作等ができる
- モジュールプラグイン型の実装により、機能追加ができる構造になっている
MariaDB MaxScaleは主に、MariaDB Galera ClusterなどのMariaDBクラスタと組み合わせて利用します。
更新系クエリと参照系クエリの分散
MariaDB MaxScaleは、クライアントから発行されたクエリを解析し、更新系のクエリと参照系クエリを判定し、発行先の実サーバを分けることができます。すなわち、更新系のクエリは決まった1台のサーバに処理をさせ、単純にデータを参照するだけの処理は残ったサーバに処理を分散することで、バックエンドのDBクラスタを効率よく利用できるようになります。
障害発生時のMasterサーバの切り替え
更新系クエリと参照系クエリの分散により、効率よくMariaDBクラスタを利用するためには、実サーバが健全に稼働していることが前提になります。逆に言えば、障害が発生しているサーバは、利用する対象から除外されなくてはなりません。MariaDB MaxScaleは、定期的に実サーバをモニタリングして実サーバの障害を検知し、必要に応じて参照系サーバの除外、更新系サーバの切り替えを行います。
MariaDB MaxScaleを利用したDBクラスタの構成例
MariaDB Galera Clusterとの組み合わせ
MariaDB MaxScaleは、マルチマスタ型であるMariaDB Galera Cluterとの組み合わせのために独自のモニタリング機能を実装しており、更新用ノードの故障検知、故障復旧が素早く安全に行われるようになっています。また、MariaDB Galera Clusterが持つスケールアウトの容易さから、参照系サーバを横展開しやすく、頻繁にDB参照を受けるサービスに向いています。
AWS上での利用
Amazon RDS for MariaDBでは、リードレプリカと呼ばれる、データを複数の更新系以外のRDSにコピーして参照できるような仕組みを提供しています。これとMariaDB MaxScaleの負荷分散機能を組み合わせることにより、やはり参照系サーバのスケールアウトが容易なDBクラスタを構成することができます。
また、MariaDB MaxScaleは、Amazon Auroraクラスタレプリカとの連携もできるようになっています。
MariaDB MaxScaleの冗長化
MariaDB MaxScaleは、それ自体が中継機能を担うものであり、内部的に保持している情報は更新系サーバ(マスタサーバ)がどのノードあるかという情報だけです。このため、Active/Standby型のHAクラスタによる冗長化が容易にできます。MariaDB MaxScaleを冗長構成にすることによって、DBクラスタシステムの可用性を高めることができます。
デージーネットでは
デージーネットではこれまで、サーバシステムとしてのHAクラスタによるデータベースサーバを構築してきましたが、実稼働サーバが単一サーバでありスケールアウトが困難でした。データベースの仕組みとしてのDBクラスタの利用方法について、まずはMariaDB Galera ClusterとMariaDB MaxScaleを組み合わせたDBクラスタの基礎的な動作について検証を行いました。今後もさまざまなアプリケーションの性質に応じた適切な構成について、継続して調査を進めていきます。