スマートスタイル TECH BLOG

データベース&クラウド技術情報

MaxScale 2.2 のモニター機能を使って自動フェイルオーバーを実現する

MariaDB MaxScale はマスター/スレーブ構成のMySQLやMariaDBでアプリケーション側からの接続を振り分けるプロキシの機能がメインでした。
この機能を使うことでフェイルオーバーが発生してマスターサーバーが変わってもアプリケーション側からは継続してデータベースを参照することができます。
ただし、2.2以前のバージョンではこのフェイルオーバーの処理は別のツールやスクリプトを使って実現する必要がありましたが、2.2からは「MySQL Monitor」から「MariaDB Monitor」と名称が変更になり、MaxScale単体で自動フェイルオーバー、自動フェイルバックまで行えるようになりました。

今回はこの機能強化されたモニター機能を使ってMariaDBの自動フェイルオーバー、自動フェイルバックを検証してみたいと思います。

MariaDB MaxScale は Business Source License(BSL)で配布されています。本番環境で利用される場合、サブスクリプションの購入が必要になる場合があります。

参考

構成

以下のような構成で検証しました

サーバー IP
maxscale 192.168.33.10
node1 192.168.33.11
node2 192.168.33.12
node3 192.168.33.13

MariaDBのマスター/スレーブレプリケーションの構築

MariaDB 10.2 のインストール

レポジトリの追加

MariaDBの公式サイトではyumレポジトリの追加方法について記載されているページが2箇所あります。どちらも結果は同じですのでお好きな方法で追加してください。

レポジトリファイルを追加する方法 

参考: Installing MariaDB with yum – MariaDB Knowledge Base

curl コマンドで取得する方法

オプションをつければインストールするバージョンも指定できます。

参考:MariaDB Package Repository Setup and Usage – MariaDB Knowledge Base

必要なパッケージのインストール

レプリケーション設定

フェイルオーバー機能を使う場合、GTIDベースのレプリケーション設定が必須です。

my.cnf の設定

GTIDベースのレプリケーションを組むための設定を下記のように記載します。
server_idとlog-basenameは各ノードごとに変更してください。

MariaDB の起動

rootのパスワード設定

MariaDB へログイン

MySQL5.7のように仮パスワードはなく、rootパス無しでログインできます。

rootのパスワード設定

MySQL5.7のようにデフォルトではパスワードポリシーもありません。

レプリケーションユーザーの作成

フェイルオーバーを行うので3つのノード全てで作成します。

レプリケーションの開始

レプリケーションの開始位置を揃えるためにリセットマスターを行います。

GTIDモードでレプリケーションを設定します。(node1がマスター)

レプリケーションの状態を確認

スレーブ(node2,node3)は書き込みができないようにread_onlyモードに設定します

参考

MaxScaleのセットアップ

MaxScaleのインストール

MariaDBのyumレポジトリはすでに追加済みとします。

必要なパッケージのインストール

設定が完了していないため、この段階ではまだサービスを起動させません。

MaxScale用のMariaDBユーザーの作成

MariaDBへの接続ユーザーの必要な権限は下記に記載があります
MariaDB MaxScale Configuration & Usage Scenarios – MariaDB Knowledge Base

ユーザーを作成します

モニター機能を使う場合は以下の権限も必要です

さらにフェイルオーバーを行う場合はSUPER権限も必要です

ただ、残念ながら手元の環境ではこれでも権限が足りないようでフェイルオーバー処理に失敗しました。
全権を付与するとうまく動作するようです

参考:MariaDB Monitor – MariaDB Knowledge Base

MaxScaleの設定

/etc/maxscale.cnf の編集

デフォルトで設定がされていますが、ほとんどの場合そのままでは動作しないため、必要に応じて編集します。

監視対象のMariaDBサーバーの設定
モニターの設定

replication_user と replication_password が未設定の場合、フェイルオーバー時に組まれるレプリケーションは
user で設定された maxscale ユーザーでレプリケーションが組まれます。

サービスの設定

書き込みと読み込み別々のルーティングを行うように設定します。

参考:Readconnroute – MariaDB Knowledge Base

リスナーの設定

外からのアクセスを受け付ける設定がリスナーです。書き込みと読み込みを別々のポートで受け取るようにします。

管理の設定

maxctrl コマンドを使う場合は設定が必要になります。

MaxScaleの起動

サービスを起動します。

動作確認

maxctrl コマンドで状態を確認することができます。

サービスの状態

サーバーの状態

自動フェイルオーバー

ここではマスター(node1)がダウンした場合の挙動を確認します。

マスターを停止

停止直後のサーバーの状態です。Master サーバーが存在しない状態です。

しばらく待つと自動フェイルオーバーが実行され、node2が新しいマスターとして昇格しレプリケーションが再構築されます。

node2が新マスターに昇格すると、read_onlyモードは解除されます。

自動フェイルバック

フェイルバックについても auto_rejoin を設定することで自動で行われます。
先ほどダウンした node1 が復旧してレプリケーションが組める状態であれば新マスターのスレーブとして組み込まれます。

また、スレーブとして組み込まれた場合、read_onlyモードがONに設定されます。

まとめ

今回は MariaDB MaxScale の自動フェイルオーバーについて検証を行いました。
自動フェイルオーバーを検討する際、アプリケーション側からは昇格したマスターへの接続の切り替えを行うプロキシやロードバランサーも同時に考慮する必要がありましたが、MariaDB MaxScale を利用することでこれらをまとめて解決することができます。


MariaDB

 

Return Top