これらすべての場合に、ロードバランサーが役立ちます。MariaDBクラスターがある場合、このための1つのオプションは、MariaDBデータベースのデータベースプロキシであるMaxScaleを使用することです。
このブログでは、手動でインストールおよび構成する方法と、ClusterControlがこのタスクでどのように役立つかを示します。この例では、1つのマスターノードと1つのスレーブノードを備えたMariaDBレプリケーションクラスターを使用し、オペレーティングシステムとしてCentOS8を使用します。
MaxScaleのインストール方法
MariaDBデータベースが稼働中であり、MaxScaleをインストールするためのマシン(仮想または物理)もあると想定します。別のホストを使用することをお勧めします。マスターに障害が発生した場合、MaxScaleはスレーブノードにフェイルオーバーできます。それ以外の場合、実行中のサーバーがダウンした場合、MaxScaleはアクションを実行できません。
MaxScaleをインストールするにはさまざまな方法があります。この場合、MariaDBリポジトリを使用します。 MaxScaleサーバーに追加するには、次を実行する必要があります。
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
次に、MaxScaleパッケージをインストールします。
$ yum install maxscale
これで、MaxScaleノードがインストールされました。開始する前に、ノードを構成する必要があります。
MaxScaleを構成する方法
MaxScaleは認証や監視などのタスクを実行するため、特定の権限を持つデータベースユーザーを作成する必要があります。
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
MariaDBバージョン10.2.2から10.2.10にも以下が必要であることに注意してください:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
データベースユーザーの準備ができたので、構成ファイルを見てみましょう。 MaxScaleをインストールすると、ファイルmaxscale.cnfが/etc/の下に作成されます。いくつかの変数とそれを構成するさまざまな方法があるので、例を見てみましょう:
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
この構成では、サーバー定義セクションに表示されているように、192.168.100.126(マスター)と192.168.100.127(スレーブ)の2つのデータベースノードがあります。
2つの異なるサービスもあります。1つはスレーブノードがある読み取り専用用で、もう1つはマスターノードがある読み取り/書き込み用です。
最後に、サービスごとに1つずつ、合計2つのリスナーがあります。ポート4008でリッスンしている読み取り専用リスナーと、ポート4006でリッスンしている読み取り/書き込みリスナー。
これで開始する準備ができたので、実行するだけです:
$ systemctl start maxscale.service
そして確認してください:
$ maxctrl list services
ff $ maxctrl list servers
maxctrlコマンドのリストはここにあります。また、maxadminを使用することもできます。それを管理するために。
次に、接続をテストしましょう。このために、MaxScaleIPアドレスとテストするポートを使用してデータベースへのアクセスを試みることができます。この場合、ポート4006のトラフィックはserver1に送信され、ポート4008のトラフィックはserver2に送信されます。
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
動作します!
ClusterControlを使用してMaxScaleをデプロイする方法
ここで、ClusterControlを使用してこのタスクを簡素化する方法を見てみましょう。このため、MariaDBクラスターがClusterControlに追加されていることを前提としています。
ClusterControlに移動->MariaDBクラスターを選択->クラスターアクション->ロードバランサーの追加->MaxScale。
ここで、新しいMaxScaleノードをデプロイするか、既存のMaxScaleノードをインポートすることもできます1。デプロイする場合は、IPアドレスまたはホスト名、管理者とユーザーのMaxScale資格情報、スレッドの数、およびポート(書き込みおよび読み取り専用)を追加する必要があります。 MaxScale構成に追加するデータベースノードを指定することもできます。
ClusterControlアクティビティセクションでタスクを監視できます。完了すると、MariaDBクラスターに新しいMaxScaleノードが作成されます。
そして、ClusterControlUIからMaxScaleコマンドを実行します。 SSH経由のサーバー。
手動で展開するよりも簡単に見えますよね?
トラフィックのバランスをとったり分割したりする場合、またはフェイルオーバーアクションの場合でも、ロードバランサーを使用することは優れたソリューションであり、MariaDB製品としてのMaxScaleはMariaDBデータベースに適したオプションです。
インストールは簡単ですが、それがあなたにとって新しいものである場合、構成と使用法は難しいかもしれません。その場合、ClusterControlを使用して、より簡単な方法でデプロイ、構成、および管理できます。