MariaDB MaxScale〜OSSのデータベース向け負荷分散ソフトウェア〜
MariaDB MaxScaleとは、オープンソースのデータベース向けプロキシサーバです。特にMySQL互換のデータベースに特化しています。MariaDB MaxScaleはアプリケーションとデータベースの間で処理を中継するプロキシサーバで、データの整合性を保持したまま負荷分散を行うことができます。
MariaDB MaxScaleとは
MariaDB MaxScale(以下:MaxScale)は、オープンソースのデータベース向けのプロキシサーバです。MariaDB社が開発しました。特にMySQL互換のデータベースに特化しており、対応するデータベースは、「MariaDB(MariaDB Galera Cluster)」や「MySQL」があります。MaxScaleでは、データベースクラスタへのアクセスを一元化し、クライアント側にクラスタを意識させることなく利用することができます。さらに、MaxScaleを利用すればデータの整合性を保持したままデータベースの負荷分散を行うことができます。
データーベースの負荷分散の課題
データベースの負荷分散を実装する場合、以下のような課題があります。
処理を分けるプログラムを実装しなければならない
分散先のデータベースがマスタスレーブ型レプリケーションクラスタの場合、以下の問題があります。
- 更新処理はマスタサーバでしか行うことができない
- スレーブサーバで更新処理を受け取った場合はエラーになる
整合性が取れなくなることがある
分散先のデータベースがマルチマスタ型レプリケーションクラスタの場合、以下の問題があります。
- 更新処理の場合、分散先の全サーバでデータの更新が必要
- ノードを超えたロックができないデータベースがある
- ロードバランサで負荷分散した場合、処理を平等に各ノードへ割り振る
- 更新処理の同期が完了する前に、新たな更新処理が別のノードに割り振られる可能性がある
- データの整合性が取れなくなる可能性がある
つまり、マスタスレーブ型レプリケーションクラスタ、マルチマスタ型レプリケーションクラスタどちらの場合でも、更新処理と検索処理を分けるプログラムを作成し、特定のノードにのみ更新処理を割り振るように実装しなければなりません。
しかし、以下の理由からプログラムを作成し実装することは非常に難しいものとなっています。
- 一般的なソフトウェアはプログラムの変更ができない場合が多い
- ソフトウェアを最初から作らなければならない
MariaDB MaxScaleでできること
MaxScaleは、MySQLクエリによって振り分け先を変えることができます。クライアントから発行されたクエリが更新クエリの場合はマスタノードへ、参照クエリの場合はスレーブノードへ振り分けます。これにより、更新クエリは必ずマスタノードへ割り振られるため、更新の整合性を保ったまま負荷分散を行うことができます。
以下では、MaxScaleの特徴について詳しく紹介します。
MariaDB MaxScaleの特徴
MaxScaleには以下のような特徴があります。
- 参照クエリと更新クエリの分散が可能
- 冗長構成されたバックエンドDBサーバに対応
- モニタリングによる障害検知/フェイルオーバー
参照クエリと更新クエリの分散が可能
MaxScaleは、クライアントから発行されたクエリの内容に応じて、利用するノードを分散させます。発行されたクエリが更新クエリの場合はマスタノード、参照クエリの場合はスレーブノードにそれぞれ分散されます。さらに参照クエリの場合は、処理しているクエリ数が最も少ないノードに割り振るため、スレーブノードで負荷分散されます。このため、更新クエリと比較して参照クエリが非常に多く、参照系サーバのスケールアウトにより性能を上げられるような用途の場合に効果を発揮します。
冗長構成されたバックエンドDBサーバに対応
MaxScaleは、マスタスレーブ型レプリケーションクラスタ、マルチマスタ型レプリケーションクラスタのどちら冗長構成にも対応できます。
マスタスレーブ型レプリケーションクラスタ
マスタスレーブ型レプリケーションクラスタの場合、MaxScaleはクラスタをモニタリングし、マスタとして稼働しているサーバを認識します。また、障害などによりフェイルオーバーが発生した場合も、MaxScaleはクラスタをモニタリングしているため、新たにマスタサーバとして稼働したサーバを検知することができます。
マルチマスタ型レプリケーションクラスタ
マルチマスタ型レプリケーションクラスタの場合、MaxScaleがマスタサーバを決定します。
マスタスレーブ型レプリケーションクラスタ、マルチマスタ型レプリケーションクラスタどちらの場合でも、MaxScaleはマスタサーバを認識し更新クエリを割り振るため、データの整合性を保持することができます。
モニタリングによる障害検知とフェイルオーバー
MaxScaleは、バックエンドノードの状態を監視しています。この監視により、ノード障害を検知した場合、自動的にノードの切り離しを行います。また、マスタサーバに障害が発生した場合、自動でフェイルオーバーさせることができます。
上記の特徴からMaxScaleは、冗長構成を取るバックエンドDBと組み合わせることで、負荷分散ソフトウェアとして利用することができます。
MariaDB Galera Clusterと組み合わせた利用方法
MariaDB Galera Clusterとは、MySQLように開発されたマルチマスタレプリケーションエンジンを利用したクラスタです。どのノードに書き込んでも即座にすべてのノードにレプリケーションされます。しかし、トランザクションやロックなどにより、一連の更新処理が保全されている必要があります。そこで、MaxScaleを組み合わて利用することで、MariaDB Galera Clusterの冗長性を生かしつつ、可用性を考慮した耐障害性のあるDBクラスタを構成することができます。
最小サーバ構成
MariaDB Galera Clusterサーバと同じサーバ上に、MaxScaleをインストールする構成です。MaxScaleのサービスは、Pacemakerを利用してフェイルオーバーさせます。
- メリット
- サーバ数を少なくすることができる
- デメリット
- 1台のサーバに持たせる機能が多く構成が複雑になる
分離構成
MariaDB Galera Clusterは3台で構成し、MaxScaleは別サーバ2台でHAクラスタから起動する構成です。
- メリット
- 構造が最も単純で管理しやすい
- MaxScaleサービスの可用性が高い
- プロキシとDBの役割分担が明確になる
- デメリット
- サーバの台数が多くなる
※ただし、バックエンドのノード数が多くなる場合には相対的にデメリットは緩和される
- サーバの台数が多くなる
負荷分散機を利用した構成
MariaDB Galera ClusterとMaxScaleを3台のサーバに同居させ、どのMaxScaleのサービスを利用するかをロードバランサが担当する構成です。
- メリット
- サーバ数を少なくすることができる
- サービスの冗長性確保が行いやすい
- デメリット
- 1台のサーバに持たせる機能が多くなる
- モニタリングのトラフィックが他の2方式と比べ多くなる
MaxScaleのサブスクリプション契約
MaxScaleのバックエンドのインスタンス数が3以上の場合は、有償のMaxScaleサブスクリプションを購入する必要があります。そのため、先ほど記載した「最小サーバ構成」「分離構成」「負荷分散機を利用した構成」すべてにおいてサブスクリプション契約が必要です。サブスクリプションを契約する場合は、MariaDB Corporationのリセラーパートナーから購入できます。
デージーネットのMariaDB MaxScaleに対する取り組み
デージーネットでは、MaxScaleを使用した負荷分散システムの構築などを提案しています。デージーネットでMaxScaleを使用したシステム構築サービスを提供したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供しています。これは、MaxScale単体のサポートではなく、Linuxなどを含むシステム全体に対するサポートです。
Open Smart Assistanceでは、MaxScaleにバグがあった場合には、回避方法の調査、コミュニティへの連絡による改善促進といったサポートを受けることができます。
また、Open Smart Assistanceのクーポンサービスにより、システムの拡張などの運用業務についてもサポートしています。