データベースシステムの高可用性を実現するには、本番環境で負荷分散とクラスタリングが非常に重要です。 MariaDB Galera Clusterは、マルチマスタークラスタリングソリューションを提供し、XtraDB/InnoDBストレージエンジンをサポートします。マルチマスタークラスターでは、任意のクラスターノードへの読み取りと書き込みが可能です。いずれかのノードのデータを変更すると、それらは他のすべてのノードに複製されます。 Galeraクラスターは、クラウドおよびWAN環境もサポートしており、国や大陸全体に分散クラスターを構築します。
この投稿では、Ubuntu20.04サーバーで3ノードのMariaDBGaleraクラスターをセットアップする方法を示します。
- Ubuntu20.04を実行している3台のサーバー。
- ルートパスワードはサーバーで構成されています。
開始する前に、システムパッケージを最新バージョンに更新する必要があります。次のコマンドを使用して更新できます:
apt-get update -y
サーバーが更新されたら、次のステップに進むことができます。
MariaDBサーバーをインストールする
まず、すべてのノードにMariaDBサーバーをインストールする必要があります。次のコマンドを実行してインストールできます:
apt-get install mariadb-server -y
インストールが完了したら、MariaDBサービスを開始し、システムの再起動時に開始できるようにします。
systemctl start mariadb
systemctl status mariadb
次に、MariaDBのインストールを保護し、各ノードにMariaDBルートパスワードを設定する必要があります。次のコマンドで実行できます:
mysql_secure_installation
以下に示すように、MariaDBルートパスワードを設定するように求められます。
Enter current password for root (enter for none): Switch to unix_socket authentication [Y/n] n Change the root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
MariaDBサーバーが保護されたら、次のステップに進むことができます。
次に、各ノードが相互に通信できるように、各ノードにGalera構成ファイルを作成する必要があります。
最初のノードで、次のコマンドを使用してgalera.cnfファイルを作成します。
nano /etc/mysql/conf.d/galera.cnf
次の行を追加します:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="node1-ip-address" wsrep_node_name="node1"
終了したら、ファイルを保存して閉じます。
2番目のノードで、次のコマンドを使用してgalera.cnfファイルを作成します。
nano /etc/mysql/conf.d/galera.cnf
次の行を追加します:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="node2-ip-address" wsrep_node_name="node2"
終了したら、ファイルを保存して閉じます。
3番目のノードで、次のコマンドを使用してgalera.cnfファイルを作成します。
nano /etc/mysql/conf.d/galera.cnf
次の行を追加します:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="node3-ip-address" wsrep_node_name="node3"
終了したら、ファイルを保存して閉じます。
この時点で、すべてのノードが相互に通信するように構成されています。
次に、すべてのノードでMariaDBサービスを停止する必要があります。次のコマンドを実行して、MariaDBサービスを停止できます。
systemctl stop mariadb
最初のノードで、次のコマンドを使用してMariaDBGaleraクラスターを初期化します。
galera_new_cluster
次に、次のコマンドを使用してクラスターのステータスを確認します。
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
次の出力が表示されます。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
2番目のノードで、次のコマンドを使用してMariaDBサービスを開始します。
systemctl start mariadb
次に、次のコマンドを使用して、MariaDBGaleraクラスターのステータスを確認します。
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
次の出力が表示されます。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
3番目のノードで、次のコマンドを使用してMariaDBサービスを開始します。
systemctl start mariadb
次に、次のコマンドを使用して、MariaDBGaleraクラスターのステータスを確認します。
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
次の出力が表示されます。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
この時点で、MariaDBGaleraクラスターが初期化されます。これで、次のステップに進むことができます。
次に、レプリケーションが機能しているかどうかを確認する必要があります。
最初のノードで、次のコマンドを使用してMariaDBに接続します。
mysql -u root -p
接続したら、次のコマンドを使用してデータベースを作成します。
MariaDB [(none)]> create database db1;
MariaDB [(none)]> create database db2;
次に、次のコマンドを使用してMariaDBを終了します。
MariaDB [(none)]> exit;
次に、2番目のノードに移動し、次のコマンドを使用してMariaDBにログインします。
mysql -u root -p
次に、次のコマンドを実行して、すべてのデータベースを表示します。
MariaDB [(none)]> show databases;
最初のノードで作成した両方のデータベースが2番目のノードに複製されていることがわかります。
+--------------------+ | Database | +--------------------+ | db1 | | db2 | | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.001 sec)
次に、3番目のノードに移動し、次のコマンドを使用してMariaDBにログインします。
mysql -u root -p
次に、次のコマンドを実行して、すべてのデータベースを表示します。
MariaDB [(none)]> show databases;
最初のノードで作成した両方のデータベースが3番目のノードに複製されていることがわかります。
+--------------------+ | Database | +--------------------+ | db1 | | db2 | | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.001 sec)
上記のガイドでは、Ubuntu20.04サーバーで3ノードのMariaDBGaleraクラスターをセットアップする方法を学びました。これで、MariaDBGaleraクラスターにノードを簡単に追加できます。ご不明な点がございましたら、お気軽にお問い合わせください。