MariaDB Galeraは、MariaDBのマルチマスタークラスターです。 MariaDB 10.1以降、MariaDBサーバーとMariaDB Galeraサーバーパッケージが結合され、MariaDBのインストール時にGaleraパッケージとその依存関係が自動的にインストールされます。現在、MariaDBGaleraClusterはInnoDB/XtraDBストレージエンジンのみをサポートしています。 MariaDB 10.0および5.5では、個別にダウンロードする必要があります。 MariaDB Galeraは、サイトのデータベースに冗長性を追加します。 MariaDB Galera Clusterでは、複数のデータベースサーバーが相互接続され、同期が維持されます。
MariaDB Galeraは多くの機能を提供しますが、その一部を以下に示します。
- 同期レプリケーション。
- 自動ノード参加。
- アクティブ-アクティブマルチマスタートポロジ。
- 行レベルでの真の並列レプリケーション。
- 読み取りと書き込みのスケーラビリティ、クライアントの待ち時間の短縮。
- 失敗したノード、クラスターからの自動ドロップ。
このチュートリアルでは、Ubuntu16.04サーバーで実行されている3つのノードでMariaDBGaleraCluster10.1をセットアップする方法を説明します。また、すべてのノード間のデータベースレプリケーションをテストします。
- Ubuntu16.04サーバーを実行している3つのノード。
- 静的IPアドレスが192.168.0.102のNode1、静的IPアドレスが192.168.0.103のNode2、静的IPアドレスが192.168.0.104のNode3がサーバーで構成されます。
- すべてのノードでsudo権限が設定されているroot以外のユーザー。
まず、すべてのノードを最新バージョンに更新する必要があります。次のコマンドですべてを更新できます:
sudo apt-get update -y
sudo apt-get upgrade -y
次に、すべてのノードを再起動して、これらの変更を適用します。次に、sudo userでログインし、次の手順に進みます。
MariaDBGaleraをインストール
MariaDBサーバーとMariaDBガレラサーバーパッケージは、バージョンMariaDB10.1に統合されています。デフォルトでは、MariaDB 10.1はデフォルトのUbuntuリポジトリでは使用できないため、すべてのノードにMariaDBリポジトリを追加する必要があります。
まず、次のコマンドを使用してMariaDBリポジトリキーを追加します。
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
次に、リポジトリを追加し、次のコマンドを使用してAPTキャッシュを更新します。
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update -y
リポジトリが更新されたら、次のコマンドを使用してMariaDBをインストールします。
sudo apt-get install mariadb-server rsync -y
上記のコマンドは、Galeraといくつかの依存関係を持つMariaDBをインストールします。プラグインやストレージエンジンのように、Galeraパーツは構成されるまで休止状態のままです。 MariaDBがすべてのノードにインストールされたら、MariaDBの保護に進むことができます。
デフォルトでは、MariaDBのインストールは保護されていないため、MariaDBのインストールを保護する必要があります。これを行うには、mysql_secure_installationスクリプトを実行します。
sudo mysql_secure_installation
このプロセスでは、rootパスワードを設定し、匿名ユーザーを削除し、rootログインをリモートで禁止し、テストデータベースを削除するように求められます。以下に示すように、すべての質問に答えてください。
Enter current password for root (enter for none): Change the root password? [Y/n] n 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がすべてのノードで保護されたら、次のステップに進むことができます。
まず、Node1に移動し、Galeraの構成ファイルを作成します。デフォルトでは、MariaDBは/etc/mysql/conf.d/ディレクトリから設定を読み取ります。これを行うには、次のコマンドを実行します。
sudo 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://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.102" wsrep_node_name="Node1"
終了したらファイルを保存します。
注: 192.168.0.102はNode1のIPアドレスです
次に、Node2に移動して、Galeraの構成ファイルを作成します。
sudo 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://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.103" wsrep_node_name="Node2"
終了したらファイルを保存します。
注: 192.168.0.103はNode2のIPアドレスです。
次に、Node3に移動して、Galeraの構成ファイルを作成します。
sudo 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://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.104" wsrep_node_name="Node3"
終了したらファイルを保存します。
注: 192.168.0.104はNode3のIPアドレスです。
Galera Clusterは、MySQLクライアント接続に3306、状態スナップショット転送に4444、Galera Clusterレプリケーショントラフィックに4567、インクリメンタル状態転送に4568の4つのポートを使用します。したがって、UFWファイアウォールを使用してこれらすべてのポートを許可する必要があります。これを行うには、すべてのノードで次のコマンドを実行します。
まず、次のコマンドでUFWファイアウォールを有効にします。
sudo ufw enable
次に、次のコマンドですべてのポートを許可します。
sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4567/udp
次に、次のコマンドを使用してファイアウォールのステータスを確認できます。
sudo ufw status
すべてのノードでUFWファイアウォールを構成したら、次の手順に進むことができます。
MariaDBガレラクラスターを開始
すべてのノードを正常に構成したら、Node1に移動して、GaleraClusterを起動します。
Galeraを開始する前に、MariaDBサービスがすべてのノードで停止していることを確認する必要があります。
すべてのノードで次のコマンドを実行します。
sudo systemctl stop mysql
次に、次のコマンドを使用してNode1でGaleraClusterを起動します。
sudo galera_new_cluster
次に、次のコマンドを使用して、クラスターが実行されているかどうかを確認します。
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
すべてが正常であれば、次の出力が表示されます。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Node2で、MariaDBサービスを開始します:
sudo systemctl start mysql
次のコマンドを使用して、MariaDBサービスが機能しているかどうかのステータスを確認できます。
sudo systemctl status mysql
すべてが正常であれば、次の出力が表示されます。
?? mariadb.service - MariaDB database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2017-09-17 10:11:20 EDT; 10min ago Process: 715 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 713 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) Process: 545 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set Process: 535 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 514 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Main PID: 661 (mysqld) Status: "Taking your SQL requests now..." Tasks: 26 (limit: 4915) CGroup: /system.slice/mariadb.service ??????661 /usr/sbin/mysqld Sep 17 10:11:11 debian systemd[1]: Starting MariaDB database server... Sep 17 10:11:15 debian mysqld[661]: 2017-09-17 10:11:15 140287134630464 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process Sep 17 10:11:20 debian systemd[1]: Started MariaDB database server.
これで、2番目のノードがクラスターに自動的にリンクされているはずです。次のコマンドで確認できます:
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
すべてが正常に機能している場合は、クラスターサイズを2に設定する必要があります。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
Node3で、MariaDBサービスを開始します:
sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
すべてが正常に機能している場合は、クラスターサイズを3に設定する必要があります。
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
これで、クラスターは機能し、相互に通信しています。
これで、すべてのノードがオンラインになりました。次は、Galeraクラスター全体でデータベースレプリケーションをテストします。まず、Node1にデータベースを作成し、それがすべてのノードに複製されているかどうかを確認しましょう。
まず、次のコマンドを使用してMariaDbコンソールにログインします。
mysql -u root -p
ルートパスワードを入力し、test_dbという名前のデータベースを作成します:
MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+ | Database | +--------------------+ | test_db | +--------------------+
次に、Node2とNode3に移動し、レプリケーションが機能しているかどうかを確認します。
mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+ | Database | +--------------------+ | test_db | +--------------------+
おめでとう!これで、MariaDBGaleraClusterがUbuntu16.04サーバーに正常にインストールおよび構成されました。
Ubuntu16.04にMariaDBGaleraClusterをインストールして構成するための十分な知識が得られたことを願っています。これで、数個、場合によっては数十個の個別のノードに簡単にスケールアップできます。疑問や質問がある場合は、Galera Cluster Doc
のリンクを参照してください。