著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。

序章

クラスタリングは、変更をさまざまなサーバーに分散することにより、データベースに高可用性を追加します。 インスタンスの1つに障害が発生した場合、他のインスタンスはすぐにサービスを継続できます。

クラスターには、アクティブ-パッシブアクティブ-アクティブの2つの一般的な構成があります。 アクティブ-パッシブクラスターでは、すべての書き込みは単一のアクティブサーバーで実行され、アクティブサーバーに障害が発生した場合にのみ引き継ぐ準備ができている1つ以上のパッシブサーバーにコピーされます。 一部のアクティブ-パッシブクラスターでは、パッシブノードでのSELECT操作も許可されます。 アクティブ-アクティブクラスターでは、すべてのノードが読み取り/書き込みであり、1つに加えられた変更がすべてに複製されます。

MariaDB は、一般的なMySQLRDBMSシステムと完全に互換性のあるオープンソースのリレーショナルデータベースシステムです。 このページでMariaDBの公式ドキュメントを読むことができます。 Galera は、同期レプリケーションを使用してマルチマスタークラスターをセットアップできるデータベースクラスタリングソリューションです。 Galeraは、クラスター内の任意のノードに読み取りおよび書き込みクエリを送信できるようにしながら、さまざまなノードのデータの同期を自動的に処理します。 Galeraの詳細については、公式のドキュメントページをご覧ください。

このガイドでは、アクティブ-アクティブMariaDBガレラクラスターを構成します。 デモンストレーションの目的で、クラスター内のノードとして機能する3つのCentOS7ドロップレットを構成してテストします。 これは、構成可能な最小のクラスターです。

前提条件

フォローするには、以下に加えて、DigitalOceanアカウントが必要です。

  • プライベートネットワークが有効になっている3つのCentOS7ドロップレット。それぞれ、sudo特権とファイアウォールが有効になっているroot以外のユーザーがいます。 3つのドロップレットでプライベートネットワークを設定するには、プライベートネットワーククイックスタートガイドに従ってください。 sudo権限を持つroot以外のユーザーのセットアップについては、CentOS7を使用したサーバーの初期セットアップのチュートリアルに従ってください。 ファイアウォールを設定するには、新しいCentOS7サーバーの追加の推奨手順の「基本的なファイアウォールの構成」手順を確認してください。

このチュートリアルの手順は、DigitalOceanドロップレット用に作成され、テストされていますが、それらの多くは、プライベートネットワークが有効になっている非DigitalOceanサーバーにも適用できるはずです。

ステップ1—すべてのサーバーにMariaDBリポジトリを追加する

このステップでは、関連するMariaDBパッケージリポジトリを3つのサーバーのそれぞれに追加して、このチュートリアルで使用されている適切なバージョンのMariaDBをインストールできるようにします。 3つのサーバーすべてでリポジトリが更新されると、MariaDBをインストールする準備が整います。

MariaDBについて注意すべき点の1つは、MySQLのドロップイン置換として作成されたため、多くの構成ファイルと起動スクリプトで、mariadbではなくmysqlが表示されることです。 多くの場合、これらは交換可能です。 一貫性を保つために、このガイドではmariadbを使用します。どちらでも機能します。

このチュートリアルでは、MariaDBバージョン10.4を使用します。 このバージョンはデフォルトのCentOSリポジトリに含まれていないため、MariaDBプロジェクトによって維持されている外部CentOSリポジトリを3つのサーバーすべてに追加することから始めます。

注: MariaDBは評判の高いプロバイダーですが、すべての外部リポジトリが信頼できるわけではありません。 信頼できるソースからのみインストールしてください。

まず、テキストエディタでリポジトリファイルを作成して、MariaDBリポジトリキーを追加します。 このチュートリアルでは、viを使用します。

  1. sudo vi /etc/yum.repos.d/mariadb.repo

次に、iを押して挿入モードに入り、次の内容をファイルに追加します。

/etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

escキーを押して通常モードに戻り、:wqと入力してファイルを保存して終了します。 テキストエディタviとその前身vimについて詳しく知りたい場合は、クラウドサーバーへのVimテキストエディタのインストールと使用に関するチュートリアルをご覧ください。 ]。

リポジトリファイルを作成したら、次のコマンドで有効にします。

  1. sudo yum makecache --disablerepo='*' --enablerepo='mariadb'

makecacheコマンドはリポジトリメタデータをキャッシュして、パッケージマネージャーがMariaDBをインストールできるようにします。--disablerepoおよび--enablerepoは、コマンドをmariadbリポジトリファイルにターゲティングします。作成されたばかりです。

次の出力が表示されます。

Output
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile mariadb | 2.9 kB 00:00:00 (1/3): mariadb/primary_db | 43 kB 00:00:00 (2/3): mariadb/other_db | 8.3 kB 00:00:00 (3/3): mariadb/filelists_db | 238 kB 00:00:00 Metadata Cache Created

最初のサーバーでリポジトリを有効にしたら、2番目と3番目のサーバーについて繰り返します。

3つのサーバーすべてにパッケージリポジトリが正常に追加されたので、次のセクションでMariaDBをインストールする準備が整いました。

ステップ2—すべてのサーバーにMariaDBをインストールする

このステップでは、実際のMariaDBパッケージを3台のサーバーにインストールします。

バージョン10.1以降、MariaDBサーバーとMariaDB Galeraサーバーパッケージが組み合わされているため、MariaDB-serverをインストールすると、Galeraといくつかの依存関係が自動的にインストールされます。

  1. sudo yum install MariaDB-server MariaDB-client

インストールを続行するかどうかを確認するように求められます。 yesと入力して、インストールを続行します。 次に、MariaDBパッケージを認証するGPGキーを受け入れるように求められます。 もう一度yesと入力してください。

インストールが完了したら、次のコマンドを実行してmariadbサービスを開始します。

  1. sudo systemctl start mariadb

次のコマンドを実行して、mariadbサービスを起動時に自動的に開始できるようにします。

  1. sudo systemctl enable mariadb

MariaDBバージョン10.4以降、 rootMariaDBユーザーはデフォルトでパスワードを持っていません。 root ユーザーのパスワードを設定するには、MariaDBにログインすることから始めます。

  1. sudo mysql -uroot

MariaDBシェルに入ったら、次のステートメントを実行してパスワードを変更し、your_passwordを目的のパスワードに置き換えます。

  1. set password = password("your_password");

パスワードが正しく設定されたことを示す次の出力が表示されます。

Output
Query OK, 0 rows affected (0.001 sec)

次のコマンドを実行して、MariaDBシェルを終了します。

  1. quit;

SQLの詳細を知りたい場合、または簡単な復習が必要な場合は、MySQLチュートリアルを確認してください。

これで、クラスターの構成を開始するために必要なすべての要素が揃いましたが、後の手順でrsyncpolicycoreutils-pythonを使用してサーバーを同期し、Security-Enhanced Linuxを制御することになります( SELinux)、次に進む前に、それらがインストールされていることを確認してください。

  1. sudo yum install rsync policycoreutils-python

これにより、rsyncおよびpolicycoreutils-pythonの最新バージョンがすでに利用可能であることが確認されるか、アップグレードまたはインストールするように求められます。

これらの手順を完了したら、他の2台のサーバーに対してこれらの手順を繰り返します。

3つのサーバーのそれぞれにMariaDBが正常にインストールされたので、次のセクションの構成手順に進むことができます。

ステップ3—最初のノードを構成する

このステップでは、最初のGaleraノードを構成します。 クラスター内の各ノードは、ほぼ同じ構成である必要があります。 このため、最初のマシンですべての構成を行い、それを他のノードにコピーします。

デフォルトでは、MariaDBは/etc/mysql/conf.dディレクトリをチェックして、.cnfで終わるファイルから追加の構成設定を取得するように構成されています。 クラスタ固有のすべてのディレクティブを使用して、このディレクトリにファイルを作成します。

  1. sudo vi /etc/my.cnf.d/galera.cnf

次の構成をファイルに追加します。 構成では、さまざまなクラスターオプション、クラスター内の現在のサーバーと他のサーバーに関する詳細、およびレプリケーション関連の設定を指定します。 構成内のIPアドレスは、それぞれのサーバーのプライベートアドレスであることに注意してください。 強調表示された行を適切なIPアドレスに置き換えます。

/etc/my.cnf.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/lib64/galera-4/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="This_Node_IP"
wsrep_node_name="This_Node_Name"
  • 最初のセクションは、クラスターが正しく機能できるようにするMariaDB/MySQL設定を変更または再アサートします。 たとえば、GaleraはMyISAMまたは同様の非トランザクションストレージエンジンでは動作しません。また、mysqldlocalhostのIPアドレスにバインドしないでください。
  • 「Galeraプロバイダーの構成」セクションは、WriteSetレプリケーションAPIを提供するMariaDBコンポーネントを構成します。 これは、Galeraが wsrep (WriteSet Replication)プロバイダーであるため、あなたの場合はGaleraを意味します。 一般的なパラメーターを指定して、初期レプリケーション環境を構成します。 これにはカスタマイズは必要ありませんが、Galera構成オプションの詳細についてはこちらをご覧ください。
  • 「Galeraクラスター構成」セクションはクラスターを定義し、IPアドレスまたは解決可能なドメイン名でクラスターメンバーを識別し、メンバーが正しいグループに参加できるようにクラスターの名前を作成します。 wsrep_cluster_nametest_clusterよりも意味のあるものに変更するか、そのままにしておくことができますが、wsrep_cluster_addressを3台のサーバーのプライベートIPアドレスで更新する必要があります。
  • 「Galera同期構成」セクションは、クラスターがメンバー間でデータを通信および同期する方法を定義します。 これは、ノードがオンラインになったときに発生する状態転送にのみ使用されます。 初期設定では、rsyncを使用しています。これは、一般的に利用可能であり、今のところ必要なことを実行するためです。
  • 「Galeraノードの構成」セクションは、現在のサーバーのIPアドレスと名前を明確にします。 これは、ログの問題を診断したり、各サーバーを複数の方法で参照したりする場合に役立ちます。 wsrep_node_addressは、使用しているマシンのアドレスと一致する必要がありますが、ログファイルでノードを識別しやすくするために、任意の名前を選択できます。

クラスタ構成ファイルに問題がなければ、内容をクリップボードにコピーし、ファイルを保存して閉じます。

最初のノードを正常に構成したので、次のセクションで残りのノードの構成に進むことができます。

ステップ4—残りのノードを構成する

このステップでは、残りの2つのノードを構成します。 2番目のノードで、構成ファイルを開きます。

  1. sudo vi /etc/mysql/my.cnf.d/galera.cnf

最初のノードからコピーした構成を貼り付けてから、Galera Node Configurationを更新して、設定している特定のノードのIPアドレスまたは解決可能なドメイン名を使用します。 最後に、その名前を更新します。これは、ログファイルでノードを識別するのに役立つ名前に設定できます。

/etc/mysql/my.cnf.d/galera.cnf
. . .
# Galera Node Configuration
wsrep_node_address="This_Node_IP"
wsrep_node_name="This_Node_Name"
. . .

ファイルを保存して終了します。

これらの手順を完了したら、3番目のノードで繰り返します。

すべてのノードでGaleraを構成すると、クラスターを起動する準備がほぼ整います。 ただし、その前に、ファイアウォールで適切なポートが開いていることと、Galera用にSELinuxポリシーが作成されていることを確認してください。

ステップ5—すべてのサーバーでファイアウォールを開く

このステップでは、ノード間通信に必要なポートが開くようにファイアウォールを構成します。

すべてのサーバーで、次のコマンドを実行して、[前提条件]セクションで設定したファイアウォールのステータスを確認します。

  1. sudo firewall-cmd --list-all

この場合、SSH、DHCP、HTTP、およびHTTPSトラフィックのみが通過を許可されます。

Output
public target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

ここでクラスターを開始しようとすると、ファイアウォールがノード間の接続をブロックするため、失敗します。 この問題を解決するには、MariaDBとGaleraのトラフィックを許可するルールを追加します。

Galeraは4つのポートを利用できます。

  • 3306mysqldumpメソッドを使用するMariaDBクライアント接続および状態スナップショット転送の場合。
  • 4567ガレラクラスターレプリケーショントラフィック用。 マルチキャストレプリケーションは、このポートでUDPトランスポートとTCPの両方を使用します。
  • 4568 インクリメンタル状態転送、またはISTの場合、欠落している状態がクラスター内の他のノードによって受信されるプロセス。
  • 4444他のすべての状態スナップショット転送、またはSSTの場合、ジョイナーノードがドナーノードから状態とデータを取得するメカニズム。

この例では、セットアップ中に4つのポートすべてを開きます。 レプリケーションが機能していることを確認したら、実際に使用していないポートをすべて閉じて、トラフィックをクラスター内のサーバーのみに制限する必要があります。

次のコマンドでポートを開きます。

  1. sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
  2. sudo firewall-cmd --permanent --zone=public --add-port=4567/tcp
  3. sudo firewall-cmd --permanent --zone=public --add-port=4568/tcp
  4. sudo firewall-cmd --permanent --zone=public --add-port=4444/tcp
  5. sudo firewall-cmd --permanent --zone=public --add-port=4567/udp

ここで--zone=public--add-port=を使用すると、firewall-cmdはこれらのポートをパブリックトラフィックに開放します。 --permanentは、これらのルールが持続することを保証します。

注:サーバーで実行されている他の機能によっては、すぐにアクセスを制限したい場合があります。 FirewallDの使用方法の詳細については、チュートリアル CentOS7でFirewallDを使用してファイアウォールを設定する方法を参照してください。

次に、次のコマンドを実行して各サーバーをpublicゾーンに追加し、強調表示されたテキストをノードのそれぞれのプライベートIPアドレスに置き換えます。

  1. sudo firewall-cmd --permanent --zone=public --add-source=galera-node-1-ip/32
  2. sudo firewall-cmd --permanent --zone=public --add-source=galera-node-2-ip/32
  3. sudo firewall-cmd --permanent --zone=public --add-source=galera-node-3-ip/32

ファイアウォールをリロードして変更を適用します。

  1. sudo firewall-cmd --reload

最初のノードでファイアウォールを構成した後、2番目と3番目のノードで同じファイアウォール設定を作成します。

ファイアウォールを正常に構成したので、次のステップでSELinuxポリシーを作成する準備が整いました。

ステップ6—SELinuxポリシーを作成する

このセクションでは、クラスター内のすべてのノードが相互に通信してクラスター操作を実行できるようにするSELinuxポリシーを作成します。

SELinux は、アクセス制御と強制アクセス制御ポリシーのサポートにより、オペレーティングシステムのセキュリティを向上させるLinuxカーネルモジュールです。 CentOS 7ではデフォルトで有効になっており、MariaDBデーモンが多くのアクティビティを実行することを制限しています。

ポリシーを作成するには、SELinuxモードがMySQLに対してpermissiveに設定されているクラスターでさまざまなアクティビティを実行します。 次に、ログに記録されたイベントからポリシーを作成し、ポリシーが正常にインストールされたら、最後にSELinuxモードを強制に設定します。

まず、3つのサーバーすべてで次のコマンドを実行して、関連するポートへのアクセスを許可します。

  1. sudo semanage port -a -t mysqld_port_t -p tcp 4567
  2. sudo semanage port -a -t mysqld_port_t -p udp 4567
  3. sudo semanage port -a -t mysqld_port_t -p tcp 4568
  4. sudo semanage port -a -t mysqld_port_t -p tcp 4444

注:これらのポートの一部へのアクセスを許可すると、ValueErrorを受け取る場合があります。 これは、そのポートのSELinuxステータスがすでに設定されていることを意味します。この場合、このチュートリアルのプロセスには影響しません。

これらのコマンドでは、SELinux管理ツールsemanage-aフラグを使用して、指定されたポートを追加し、データベースサーバーを無視しています。

次に、3つのサーバーすべてで次のコマンドを実行します。これにより、MySQLSELinuxドメインが一時的に許可モードに設定されます。

  1. sudo semanage permissive -a mysqld_t

このコマンドは完了するまでに1分かかる場合があり、出力は表示されません。

次に、すべてのノードでデータベースサーバーを停止して、共有SELinuxポリシーを使用してデータベースクラスターをブートストラップできるようにします。 これを行うには、3つのノードすべてで次のコマンドを実行します。

  1. sudo systemctl stop mariadb

次に、クラスターをブートストラップして、SELinuxポリシーに追加されるノード間通信イベントを生成します。 最初のノードで、次を実行してクラスターをブートストラップします。

  1. sudo galera_new_cluster

最初のノードで以下を実行して、SSTイベントをログに記録するという特定の目的のためにデータベースとテーブルを作成します。

  1. mysql -u root -p -e
  2. 'CREATE DATABASE selinux;
  3. CREATE TABLE selinux.selinux_policy (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id));
  4. INSERT INTO selinux.selinux_policy VALUES ();'

次に、2番目のノードでサーバーを起動します。

  1. sudo systemctl start mariadb

次に、3番目のノードで同じことを行います。

  1. sudo systemctl start mariadb

前のコマンドの出力は表示されません。 ISTイベントを生成するには、3つのサーバーすべてで以下を実行します。

  1. mysql -u root -p -e 'INSERT INTO selinux.selinux_policy VALUES ();'

次に、3つのサーバーすべてで次のコマンドを実行して、SELinuxポリシーを作成して有効にします。

  1. sudo grep mysql /var/log/audit/audit.log | sudo audit2allow -M Galera

この最初のコマンドは、audit.logファイルで生成されたイベントを検索し、audit2allowツールによって生成されたGalera.ppという名前のモジュールにそれらをパイプします。 これにより、次の出力が得られます。

Output
******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i Galera.pp

次に、出力の指示に従い、次のコマンドを使用して、生成されたモジュールをインストールします。

  1. sudo semodule -i Galera.pp

ポリシーがアクティブになったので、MariaDBサーバーの許可モードを無効にします。

  1. sudo semanage permissive -d mysqld_t

SELinuxポリシーを正常に作成して有効にしたので、次のセクションでクラスターを開始する準備が整いました。

ステップ7—クラスターを開始する

このステップでは、MariaDBクラスターを開始します。 開始するには、クラスターをオンラインにするために、実行中のMariaDBサービスを停止する必要があります。

3つのサーバーすべてでMariaDBを停止する

MariaDBサービスを停止するときは、サーバー上でこのアクションを特定の順序で実行することが重要です。 このシャットダウンシーケンスにより、最初のノードが起動時にクラスターを安全にブートストラップできるようになります。

まず、3番目のノードで次のコマンドを実行します。

  1. sudo systemctl stop mariadb

次に、2番目のノードでサービスを停止します。

  1. sudo systemctl stop mariadb

最後に、最初のノードでサービスを停止します。

  1. sudo systemctl stop mariadb

systemctlは、すべてのサービス管理コマンドの結果を表示するわけではないため、成功したことを確認するには、各サーバーで次のコマンドを使用してください。

  1. sudo systemctl status mariadb

最後の行は次のようになります。

Output
. . . Apr 26 03:34:23 galera-node-01 systemd[1]: Stopped MariaDB 10.4.4 database server.

すべてのサーバーでmariadbをシャットダウンすると、続行する準備が整います。

最初のノードを起動します

最初のノードを起動するには、特別な起動スクリプトを使用する必要があります。 クラスタを構成した方法で、オンラインになる各ノードは、galera.cnfファイルで指定された少なくとも1つの他のノードに接続して、初期状態を取得しようとします。 systemdが--wsrep-new-clusterパラメーターを渡すことを可能にするgalera_new_clusterスクリプトを使用しない場合、最初のノードが接続するために実行されているノードがないため、通常のsystemctl start mariadbは失敗します。

  1. sudo galera_new_cluster

このコマンドは、正常に実行されても出力を表示しません。 このスクリプトが成功すると、ノードはクラスターの一部として登録され、次のコマンドで確認できます。

  1. mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

クラスタにノードが1つあることを示す次の出力が表示されます。

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

残りのノードでは、mariadbを通常どおり起動できます。 オンラインのクラスターリストのメンバーを検索するため、メンバーが見つかると、クラスターに参加します。

2番目のノードを起動します

これで、2番目のノードを起動できます。 mariadbを開始します:

  1. sudo systemctl start mariadb

正常に実行されても出力は表示されません。 各ノードがオンラインになると、クラスターサイズが増加します。

  1. mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

次の出力は、2番目のノードがクラスターに参加し、合計で2つのノードがあることを示しています。

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

3番目のノードを起動します

次に、3番目のノードを起動します。 mariadbを開始します:

  1. sudo systemctl start mariadb

次のコマンドを実行して、クラスターサイズを見つけます。

  1. mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

次の出力が表示されます。これは、3番目のノードがクラスターに参加し、クラスター内のノードの総数が3つであることを示しています。

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

この時点で、クラスター全体がオンラインになり、正常に通信しています。 次に、次のセクションでレプリケーションをテストすることにより、セットアップが機能していることを確認できます。

ステップ8—レプリケーションのテスト

これまでの手順を実行して、クラスターが任意のノードから他のノードへのレプリケーション(アクティブ-アクティブレプリケーションと呼ばれる)を実行できるようにしました。 次の手順に従って、レプリケーションが期待どおりに機能しているかどうかをテストして確認します。

最初のノードに書き込む

最初のノードでデータベースを変更することから始めます。 次のコマンドは、playgroundというデータベースと、equipmentというこのデータベース内のテーブルを作成します。

  1. mysql -u root -p -e
  2. 'CREATE DATABASE playground;
  3. CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
  4. INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

前のコマンドで、CREATE DATABASEステートメントはplaygroundという名前のデータベースを作成します。 CREATEステートメントは、playgroundデータベース内に、idという自動インクリメント識別子列とその他の列を持つequipmentという名前のテーブルを作成します。 type列、quant列、およびcolor列は、それぞれ機器のタイプ、数量、および色を格納するために定義されています。 INSERTステートメントは、タイプslide、数量2、および色blueのエントリを挿入します。

これで、テーブルに1つの値があります。

2番目のノードでの読み取りと書き込み

次に、2番目のノードを調べて、レプリケーションが機能していることを確認します。

  1. mysql -u root -p -e 'SELECT * FROM playground.equipment;'

レプリケーションが機能している場合、最初のノードで入力したデータが2番目のノードに表示されます。

Output
+----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+

この同じノードから、クラスターにデータを書き込むことができます。

  1. mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

3番目のノードでの読み取りと書き込み

3番目のノードから、テーブルを再度クエリすることにより、このすべてのデータを読み取ることができます。

  1. mysql -u root -p -e 'SELECT * FROM playground.equipment;'

2つの行を示す次の出力が表示されます。

Output
+----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+

ここでも、このノードから別の値を追加できます。

  1. mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

最初のノードで読む

最初のノードに戻ると、データがどこでも利用できることを確認できます。

  1. mysql -u root -p -e 'SELECT * FROM playground.equipment;'

次の出力が表示されます。これは、行が最初のノードで使用可能であることを示しています。

Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

すべてのノードに書き込むことができ、レプリケーションが適切に実行されていることを正常に確認しました。

結論

この時点で、動作する3ノードのGaleraテストクラスターが構成されています。 実稼働環境でGaleraクラスターを使用することを計画している場合は、5つ以上のノードから始めることをお勧めします。

本番環境で使用する前に、 XtraBackup などのその他の状態スナップショット転送(SST)エージェントを確認することをお勧めします。これにより、新しいノードを非常に迅速にセットアップできます。アクティブノードへの大きな中断。 これは実際のレプリケーションには影響しませんが、ノードが初期化されるときに問題になります。

SQLデータベースについて引き続き学習したい場合は、SQLデータベースの管理方法の記事を参照してください。