MariaDBクラスターは、Galeraクラスターを備えたMariaDBサーバーとMariaDBMaxScaleで構成されています。マルチマスターレプリケーションソリューションとして、GaleraClusterを備えたMariaDBサーバーはすべてプライマリサーバーとして動作できます。これは、クラスター内の任意のノードに加えられた変更が、InnoDBストレージエンジンの証明書ベースのレプリケーションとトランザクションのグローバル順序付けを使用して、クラスター内の他のすべてのノードにレプリケートされることを意味します。 MariaDB MaxScaleは、MariaDBサーバー上に配置されたデータベースプロキシであり、高可用性、スケーラビリティ、およびセキュリティを拡張すると同時に、基盤となるデータベースインフラストラクチャからアプリケーション開発を分離することでアプリケーション開発を簡素化します。
このブログシリーズでは、MariaDBクラスターにmaxctrlを使用したMaxScale管理について説明します。ブログシリーズのこの最初の記事では、maxctrlコマンドラインユーティリティの概要といくつかの基本について説明します。次の図に示すように、セットアップは1つのMaxScaleサーバーとGalera4を備えた3ノードのMariaDB10.4で構成されています。
MariaDBクラスターはClusterControlによってデプロイおよび管理されましたが、MaxScaleホストはクラスター内の新しいホストであり、このウォークスルーの目的でClusterControlによってデプロイされませんでした。
MaxScaleのインストール
MaxScaleのインストールは非常に簡単です。 MaxScaleのMariaDBダウンロードページから適切なオペレーティングシステムを選択してダウンロードします。次の例は、CentOS8ホストにMaxScaleをインストールする方法を示しています。
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
デーモンの起動後、デフォルトでは、MaxScaleコンポーネントは次のポートで実行されます。
- 0.0.0.0:4006-デフォルトの読み取り/書き込み分割リスナー。
- 0.0.0.0:4008-デフォルトのラウンドロビンリスナー。
- 127.0.0.1:8989-MaxScaleRestAPI。
上記のポートは変更可能です。本番環境のスタンドアロンMaxScaleサーバーは、ポート3306で読み取り/書き込み分割、ポート3307でラウンドロビンで実行されるのが一般的です。この構成は、このブログ投稿で展開するものです。
パッケージがインストールされると、次のユーティリティ/プログラムを入手できます。
- maxscale -MaxScale自体。
- maxctrl -通信にMaxScaleRESTAPIを使用するMaxScaleのコマンドライン管理クライアント。
- maxadmin -非推奨のMaxScale管理およびモニタークライアント。代わりにmaxctrlを使用してください。
- maxkeys -このユーティリティは、MariaDB MaxScale構成ファイルで使用されるパスワードを暗号化するときに、ユーティリティmaxpasswdによって使用されるAES暗号化キーと初期化ベクトルを指定されたディレクトリのファイル.secretsに書き込みます。
- maxpasswd -このユーティリティは、maxkeysを使用して以前に作成された.secretsファイルを使用して暗号化されたパスワードを作成します。
MaxScaleは、次の場所から特定の順序ですべての構成オプションをロードします。
- /etc/maxscale.cnf
- /etc/maxscale.cnf.d/*.cnf
- /var/lib/maxscale/maxscale.cnf.d/*.cnf
MaxScale構成の詳細については、MaxScale構成ガイドをご覧ください。
MaxScaleが初期化されると、デフォルトのファイルとディレクトリ構造は次のようになります。
- MaxScaleデータディレクトリ:/ var / lib / maxscale
- MaxScale PIDファイル:/var/run/maxscale/maxscale.pid
- MaxScaleログファイル:/var/log/maxscale/maxscale.log
- MaxScaleのドキュメント:/ usr / share / maxscale
MaxCtrl-CLI
開始したら、MaxCtrlコマンドラインクライアントを使用して、ローカルホストのポート8989でリッスンするMaxScaleRESTAPIを使用してMaxScaleを管理できます。 REST APIのデフォルトのクレデンシャルは「admin:mariadb」です。 REST APIで使用されるユーザーは、MaxAdminネットワークインターフェイスで使用されるユーザーと同じです。つまり、MaxAdminネットワークインターフェイス用に作成されたユーザーは、MaxScaleRESTAPIとMaxCtrlを使用する必要があります。
mysqlクライアントと同様に、maxctrlユーティリティをインタラクティブモードで使用できます。次のスクリーンショットのように、「maxctrl」と入力するだけで、インタラクティブモード(プロンプトがシェルプロンプトからmaxctrlプロンプトに変わります)になります。
または、シェルプロンプトでまったく同じコマンドを直接実行することもできます。例:
MaxCtrlコマンドオプションは、付属のMaxScaleバージョンによって異なります。この記事の執筆時点では、MaxScaleのバージョンは2.4であり、コマンドの完全なリストについては、このドキュメントを参照する必要があります。 MaxCtrlは、ここで詳細に説明されているMaxScaleRESTAPIインターフェースを利用します。
MariaDBサーバーをMaxScaleに追加する
MaxScaleを最初に起動すると、いくつかのデフォルトのパラメーターと例を含む構成ファイルが/etc/maxscale.cnfに生成されます。この構成は使用せず、代わりに独自の構成を作成します。後で空にしたいので、このファイルのバックアップを作成します:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
MaxScaleを再起動して、すべてを新しく開始します:
$ systemctl restart maxscale
MaxScaleの「サーバー」という用語は、基本的にバックエンドのMariaDBサーバーを意味します。この場合、MariaDBクラスターの3つのノードすべてです。 3つのMariaDBクラスターサーバーすべてをMaxScaleランタイムに追加するには、次のコマンドを使用します。
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
追加されたサーバーを確認するには、listコマンドを使用します。
$ maxctrl list servers
そして、次の出力が表示されます:
MaxScaleへの監視の追加
次に、MaxScaleを使用するように監視サービスを構成します。 MaxScaleは、データベースの種類に応じて、次のような多数の監視モジュールをサポートします。
- MariaDBモニター
- Clustrixモニター
- ColumnStoreモニター
このセットアップでは、「galeramon」と呼ばれるGaleraMonitorモジュールを使用します。まず、MariaDBクラスター内のサーバーの1つでMaxScaleが使用するデータベースユーザーを作成する必要があります。この例では、mariadbgalera1、192.168.0.221を選択して、次のステートメントを実行しました。
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
ここで、192.168.0.220はMaxScaleサーバーのIPアドレスです。
maxscale_monitorユーザーパスワードをプレーンテキストで保存することは安全ではありません。代わりに、パスワードを暗号化された形式で保存することを強くお勧めします。これを実現するには、このMaxScaleインスタンス専用の秘密鍵を生成する必要があります。 「maxkeys」ユーティリティを使用して、暗号化と復号化の目的でMaxScaleが使用する秘密鍵を生成します。
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
これで、maxpasswdユーティリティを使用して、パスワードの暗号化された値を生成できます。
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
MaxScale内に監視ユーザーのクレデンシャルを保存する場合は、代わりに常に上記の値を使用します。これで、maxctrlを使用してGaleraモニタリングサービスをMaxScaleに追加する準備が整いました:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
MaxScaleへのサービスの追加
サービスは基本的に、MaxScaleがクエリをバックエンドサーバーにルーティングする方法です。 MaxScale 2.4は、複数のサービス(またはルーター)をサポートします。つまり、次のとおりです。
- Avrorouter
- Binlogrouter
- CLI
- HintRouter
- Readconnroute
- Readwritesplit
- SchemaRouter
- SmartRouter
MariaDBクラスターの場合、必要なルーティングサービスは読み取り/書き込み分割とラウンドロビン負荷分散の2つだけです。読み取り/書き込み分割の場合、書き込みクエリは、サーバーに到達できなくなるまで単一のMariaDBサーバーにのみ転送され、サーバーに到達できなくなると、MaxScaleは書き込みクエリを次に使用可能なノードに転送します。ラウンドロビンバランシングの場合、クエリはラウンドロビン方式ですべてのバックエンドノードに転送されます。
ラウンドロビン(またはマルチマスター)のルーティングサービスを作成します:
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
読み取り/書き込み分割(またはシングルマスター)用の別のルーティングサービスを作成します:
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
確認方法:
MaxCtrlによって正常に作成されたすべてのコンポーネントは、/の下に独自の構成ファイルを生成します。 var / lib / maxscale/maxscale.cnf.d。この時点で、ディレクトリは次のようになります。
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
MaxScaleへのリスナーの追加
リスナーは、サービスが着信接続をリッスンするポートを表します。ポートまたはUNIXソケットファイルにすることができ、コンポーネントタイプは「リスナー」である必要があります。通常、リスナーはサービスに関連付けられています。このセットアップでは、2つのリスナーを作成します。ポート3306の読み取り/書き込みリスナーとポート3307のラウンドロビンリスナーです。
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
次のコマンドで確認します。
この時点で、MaxScaleはクエリを次のように負荷分散する準備ができています。 MariaDBクラスター。アプリケーションから、ポート3306でMaxScaleホストにクエリを送信します。ここで、書き込みクエリは常に同じデータベースノードにヒットし、読み取りクエリは他の2つのノードに送信されます。これは、シングルライター設定とも呼ばれます。マルチライター設定を使用する場合は、ラウンドロビンバランシングアルゴリズムに基づいて、書き込みがすべてのバックエンドMariaDBノードに転送されます。優先度と重みを使用して、バランスをさらに微調整できます。
繰り返しますが、maxctrlを介して構成オプションを変更すると、次の出力に示すように、正常に作成されたすべてのコンポーネントは、/ var / lib / maxscale/maxscale.cnf.d内に独自の構成ファイルを持ちます。
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
上記の構成オプションは、ニーズに合わせて直接変更できますが、新しい変更をロードするには、MaxScaleサービスを再起動する必要があります。もう一度やり直したい場合は、このディレクトリの下のすべてを消去して、MaxScaleを再起動できます。
次のエピソードでは、MariaDBクラスター用のMaxCtrlの管理コマンドと監視コマンドについて説明します。