1.8. Galera で MariaDB を複製する
Red Hat Enterprise Linux 上の Galera ソリューションを使用して、MariaDB データベースをレプリケートできます。
1.8.1. MariaDB Galera Cluster の概要 リンクのコピーリンクがクリップボードにコピーされました!
Galera レプリケーションは、複数の MariaDB サーバーで構成される同期マルチソース MariaDB Galera Cluster の作成に基づいています。レプリカが通常読み取り専用である従来のプライマリー/レプリカ設定とは異なり、MariaDB Galera Cluster のノードはすべて書き込み可能にすることができます。
Galera レプリケーションと MariaDB データベースとの間のインターフェイスは、書き込みセットレプリケーション API (wsrep API) で定義されます。
MariaDB Galera Cluster の主な機能は以下のとおりです。
- 同期のレプリケーション
- アクティブ/アクティブのマルチソーストポロジー
- クラスターノードへの読み取りおよび書き込み
- 自動メンバーシップ制御、失敗したノードのクラスターからの削除
- 自動ノードの参加
- 行レベルの並列レプリケーション
- ダイレクトクライアント接続: ユーザーはクラスターノードにログインし、レプリケーションの実行中にノードを直接操作できます。
同期レプリケーションとは、サーバーがトランザクションに関連付けられた書き込みセットをクラスター内のすべてのノードにブロードキャストすることで、コミット時にトランザクションをレプリケートすることを意味します。クライアント (ユーザーアプリケーション) は、データベース管理システム (DBMS) に直接接続し、ネイティブの MariaDB と同様の動作が発生します。
同期レプリケーションは、クラスター内の 1 つのノードで発生した変更が、クラスター内の他のノードで同時に発生することを保証します。
そのため、同期レプリケーションには、非同期のレプリケーションと比べて次のような利点があります。
- 特定のクラスターノード間の変更の伝播に遅延がない
- すべてのクラスターノードには常に一貫性がある
- いずれかのクラスターノードがクラッシュしても、最新の変更は失われない
- すべてのクラスターノードのトランザクションが並列に実行する
- クラスター全体にわたる因果関係
1.8.2. MariaDB Galera Cluster を構築するためのコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
MariaDB Galera Cluster を構築するには、システムに以下のパッケージをインストールする必要があります。
-
mariadb-server-galera
: MariaDB Galera Cluster のサポートファイルとスクリプトが含まれます。 -
mariadb-server
: MariaDB アップストリームがパッチを適用し、書き込みセットレプリケーション API (wsrep API) を組み込みます。この API は、Galera レプリケーションと MariaDB との間のインターフェイスを提供します。 galera
: MariaDB アップストリームがパッチを適用し、MariaDB の完全サポートを追加します。galera
パッケージには、以下の内容が含まれます。- Galera Replication Library は、レプリケーション機能全体を提供します。
- Galera Arbitrator ユーティリティーは、スプリットブレインのシナリオで投票に参加するクラスターメンバーとして使用できます。ただし、Galera Arbitrator は実際のレプリケーションには参加できません。
-
Galera Arbitrator ユーティリティーのデプロイに使用される Galera Systemd service および Galera wrapper script。RHEL 10 は、
/usr/lib/systemd/system/garbd.service
および/usr/sbin/garb-systemd
にあるこれらのファイルのアップストリームバージョンを提供します。
1.8.3. MariaDB Galera Cluster のデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
MariaDB Galera Cluster パッケージをデプロイし、設定を更新できます。新しいクラスターを形成するには、クラスターの最初のノードをブートストラップする必要があります。
前提条件
- クラスター内のすべてのノードに TLS がセットアップ されている。
すべてのノード上のすべての証明書の
Extended Key Usage
フィールドが次のように設定されている。TLS Web Server Authentication, TLS Web Client Authentication
TLS Web Server Authentication, TLS Web Client Authentication
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
MariaDB Galera Cluster パッケージをインストールします。
dnf install mariadb-server-galera
# dnf install mariadb-server-galera
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その結果、次のパッケージが依存関係とともにインストールされます。
-
mariadb-server-galera
-
mariadb-server
galera
MariaDB Galera Cluster の構築に必要なこれらのパッケージの詳細は、MariaDB クラスターをビルドするためのコンポーネント を参照してください。
-
システムを初めてクラスターに追加する前に、MariaDB サーバーのレプリケーション設定を更新します。デフォルト設定は、
/etc/my.cnf.d/galera.cnf
ファイルに含まれています。MariaDB Galera Cluster をデプロイする前に、以下の文字列で開始するように、すべてのノードの/etc/my.cnf.d/galera.cnf
ファイルにwsrep_cluster_address
オプションを設定します。gcomm://
gcomm://
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初期ノードでは、
wsrep_cluster_address
を空のリストとして設定できます。wsrep_cluster_address="gcomm://"
wsrep_cluster_address="gcomm://"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他のすべてのノードでは、
wsrep_cluster_address
を設定して、実行中のクラスターに属するノードへのアドレスを追加します。以下に例を示します。wsrep_cluster_address="gcomm://10.0.0.10"
wsrep_cluster_address="gcomm://10.0.0.10"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Galera Cluster アドレスの設定方法は、Galera Cluster Address を参照してください。
-
/etc/my.cnf.d/galera.cnf
設定ファイルでwsrep_on=1
オプションを設定して、すべてのノードでwsrep
API を有効にします。 TLS 鍵と証明書を含む Galera 設定ファイルに
wsrep_provider_options
変数を追加します。以下に例を示します。wsrep_provider_options="socket.ssl_cert=/etc/pki/tls/certs/source.crt;socket.ssl_key=/etc/pki/tls/private/source.key;socket.ssl_ca=/etc/pki/tls/certs/ca.crt”
wsrep_provider_options="socket.ssl_cert=/etc/pki/tls/certs/source.crt;socket.ssl_key=/etc/pki/tls/private/source.key;socket.ssl_ca=/etc/pki/tls/certs/ca.crt”
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードで以下のラッパーを実行して、新規クラスターの最初のノードをブートストラップします。
galera_new_cluster
# galera_new_cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このラッパーにより、MariaDB サーバーデーモン (
mariadbd
) に--wsrep-new-cluster
オプションが指定されて実行されるようになります。このオプションは、接続する既存クラスターがないという情報を提供します。したがって、ノードは新規 UUID を作成し、新しいクラスターを特定します。注記mariadb
サービスは、複数の MariaDB サーバープロセスと対話する systemd メソッドをサポートします。したがって、複数の MariaDB サーバーが実行中の場合は、インスタンス名を接尾辞として指定することで、特定のインスタンスをブートストラップできます。galera_new_cluster mariadb@node1
# galera_new_cluster mariadb@node1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各ノードで次のコマンドを実行して、その他のノードをクラスターに接続します。
systemctl start mariadb
# systemctl start mariadb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その結果、ノードはクラスターに接続し、それ自体をクラスターの状態と同期します。
検証
- MariaDB Galera クラスターのステータスを確認する を参照してください。
1.8.4. MariaDB Galera クラスターのステータスを確認する リンクのコピーリンクがクリップボードにコピーされました!
MariaDB Galera クラスターの健全性、パフォーマンス、同期を監視し、確保することが重要です。そのためには、各ノードのステータス変数をクエリーして、ノードとクラスターを監視できます。
MariaDB Galera クラスターのステータスを確認するには、次のクエリーを使用します。
クラスター内のノードの数を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードのクラスターコンポーネントのステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow wsrep_cluster_status
変数の値は、現在のノードが属するクラスターコンポーネントのステータスを示します。以下の値が使用できます。-
Primary
: クラスターは正常に機能しています。定足数が満たされています。正常なクラスターでは、すべてのノードがPrimary
を報告します。 -
Non-primary
: ノードはクラスターのプライマリーコンポーネントへの接続を失い、アクティブクラスターの一部ではなくなりました。ただし、ノードは引き続き読み取りクエリーを処理できますが、書き込み操作を処理することはできません。 -
Disconnected
: ノードはどのクラスターコンポーネントにも接続されていません。その結果、クエリーを受け入れることができず、データはレプリケートされません。
-
ノードのステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow wsrep_local_state_comment
変数の頻繁に使用される値は次のとおりです。-
Synced
: ノードはクラスター内で完全に同期されており、レプリケーションにアクティブに参加しています。 -
Desynced
: ノードは引き続きクラスターの一部ですが、状態の遷移で主にビジー状態です。 -
Joining
: ノードはクラスターへの参加処理中です。 -
Joined
: ノードはクラスターに正常に参加しました。クラスターから書き込みセットを受信して適用できます。 -
Donor
: ノードは現在、State Snapshot Transfer (SST) を提供しています。新しいノードが参加して完全な状態の遷移が必要な場合、クラスターは既存のノードを選択して必要なデータを送信します。
-
ノードがクラスターからの書き込みセットを受け入れるかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow wsrep_ready
変数がON
の場合、ノードはコンポーネントを正常に初期化し、クラスターに接続されています。さらに、ノードは同期されているか、クエリーを処理できる状態に達しています。ノードが他のホストとネットワーク接続されているか確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ON
値は、ノードがクラスター内の少なくとも 1 つのメンバーに接続されていることを意味します。最後の
FLUSH STATUS
コマンド以降、またはサーバーの起動以降の書き込みセットのローカル受信キューの平均サイズを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 0 に近い値は理想的な状態であり、ノードが書き込みセットを受信するとそれを適用し続けることを示します。値が継続的に高い、または増加している場合は、ディスク I/O が遅いなどのパフォーマンスのボトルネックが発生している可能性があります。
フロー制御ステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この変数は、ローカル受信キューがいっぱいでフロー制御がトリガーされたために、ノードが一時停止され、新しい着信トランザクションを処理できない時間の割合を表します。値が 0 に近い場合、ノードはレプリケーションワークロードを効率的に継続していることを示します。値が 1.0 に近づくと、ノードが書き込みセットの適用で頻繁または継続的に問題に遭遇し、クラスターのボトルネックになる可能性があることを意味します。
ノードが頻繁に一時停止する場合は、
/etc/my.cnf.d/galera.cnf
ファイルのwsrep_slave_threads
パラメーターを調整できます。ノードが並列に適用できる最小シーケンス番号と最大シーケンス番号間の平均距離を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 値が大きいほど、並列度が高くなります。これは、
/etc/my.cnf.d/galera.cnf
ファイルのwsrep_slave_threads
パラメーターで使用できる最適な値です。
1.8.5. 新規ノードの MariaDB Galera Cluster への追加 リンクのコピーリンクがクリップボードにコピーされました!
新規ノードを MariaDB Galera Cluster に追加するには、以下の手順に従います。
この手順に従って、既存のノードを再接続することもできます。
手順
特定のノードで、
/etc/my.cnf.d/galera.cnf
設定ファイルの[mariadb]
セクション内にあるwsrep_cluster_address
オプションで、1 つ以上の既存クラスターメンバーにアドレスを指定します。[mariadb] wsrep_cluster_address="gcomm://192.168.0.1"
[mariadb] wsrep_cluster_address="gcomm://192.168.0.1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規ノードを既存クラスターノードのいずれかに接続すると、クラスター内のすべてのノードを表示できるようになります。
ただし、
wsrep_cluster_address
にクラスターのすべてのノードをリスト表示することを推奨します。したがって、1 つ以上のクラスターノードがダウンしても、その他のクラスターノードに接続することでノードがクラスターに参加できます。すべてのメンバーがメンバーシップに同意すると、クラスターの状態が変更します。新規ノードの状態がクラスターの状態と異なる場合、新しいノードは Incremental State Transfer (IST) または State Snapshot Transfer (SST) のいずれかを要求し、他のノードとの一貫性を確保します。
1.8.6. MariaDB Galera Cluster の再起動 リンクのコピーリンクがクリップボードにコピーされました!
すべてのノードを同時にシャットダウンすると、クラスターが終了し、実行中のクラスターは存在しなくなります。ただし、クラスターのデータは引き続き存在します。
クラスターを再起動するには、MariaDB Galera Cluster のデプロイ の説明に従って、最初のノードをブートストラップします。
クラスターがブートストラップされておらず、最初のノードの mariadb
が systemctl start mariadb
コマンドのみで起動された場合、ノードは /etc/my.cnf.d/galera.cnf
ファイルの wsrep_cluster_address
オプションにリスト表示されているノードの 1 つ以上に接続しようとします。現在実行中のノードがない場合、再起動は失敗します。