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
    Copy to Clipboard Toggle word wrap

手順

  1. MariaDB Galera Cluster パッケージをインストールします。

    # dnf install mariadb-server-galera
    Copy to Clipboard Toggle word wrap

    その結果、次のパッケージが依存関係とともにインストールされます。

  2. システムを初めてクラスターに追加する前に、MariaDB サーバーのレプリケーション設定を更新します。デフォルト設定は、/etc/my.cnf.d/galera.cnf ファイルに含まれています。MariaDB Galera Cluster をデプロイする前に、以下の文字列で開始するように、すべてのノードの /etc/my.cnf.d/galera.cnf ファイルに wsrep_cluster_address オプションを設定します。

    gcomm://
    Copy to Clipboard Toggle word wrap
    • 初期ノードでは、wsrep_cluster_address を空のリストとして設定できます。

      wsrep_cluster_address="gcomm://"
      Copy to Clipboard Toggle word wrap
    • その他のすべてのノードでは、wsrep_cluster_address を設定して、実行中のクラスターに属するノードへのアドレスを追加します。以下に例を示します。

      wsrep_cluster_address="gcomm://10.0.0.10"
      Copy to Clipboard Toggle word wrap

      Galera Cluster アドレスの設定方法は、Galera Cluster Address を参照してください。

  3. /etc/my.cnf.d/galera.cnf 設定ファイルで wsrep_on=1 オプションを設定して、すべてのノードで wsrep API を有効にします。
  4. 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”
    Copy to Clipboard Toggle word wrap
  5. ノードで以下のラッパーを実行して、新規クラスターの最初のノードをブートストラップします。

    # galera_new_cluster
    Copy to Clipboard Toggle word wrap

    このラッパーにより、MariaDB サーバーデーモン (mariadbd) に --wsrep-new-cluster オプションが指定されて実行されるようになります。このオプションは、接続する既存クラスターがないという情報を提供します。したがって、ノードは新規 UUID を作成し、新しいクラスターを特定します。

    注記

    mariadb サービスは、複数の MariaDB サーバープロセスと対話する systemd メソッドをサポートします。したがって、複数の MariaDB サーバーが実行中の場合は、インスタンス名を接尾辞として指定することで、特定のインスタンスをブートストラップできます。

    # galera_new_cluster mariadb@node1
    Copy to Clipboard Toggle word wrap
  6. 各ノードで次のコマンドを実行して、その他のノードをクラスターに接続します。

    # systemctl start mariadb
    Copy to Clipboard Toggle word wrap

    その結果、ノードはクラスターに接続し、それ自体をクラスターの状態と同期します。

1.8.4. MariaDB Galera クラスターのステータスを確認する

MariaDB Galera クラスターの健全性、パフォーマンス、同期を監視し、確保することが重要です。そのためには、各ノードのステータス変数をクエリーして、ノードとクラスターを監視できます。

MariaDB Galera クラスターのステータスを確認するには、次のクエリーを使用します。

  • クラスター内のノードの数を表示します。

    # mysql -u root -p -e 'show status like "wsrep_cluster_size";'
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 4     |
    +--------------------+-------+
    Copy to Clipboard Toggle word wrap
  • ノードのクラスターコンポーネントのステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_cluster_status";'
    +----------------------+---------+
    | Variable_name        | Value   |
    +----------------------+---------+
    | wsrep_cluster_status | Primary |
    +----------------------+---------+
    Copy to Clipboard Toggle word wrap

    wsrep_cluster_status 変数の値は、現在のノードが属するクラスターコンポーネントのステータスを示します。以下の値が使用できます。

    • Primary: クラスターは正常に機能しています。定足数が満たされています。正常なクラスターでは、すべてのノードが Primary を報告します。
    • Non-primary: ノードはクラスターのプライマリーコンポーネントへの接続を失い、アクティブクラスターの一部ではなくなりました。ただし、ノードは引き続き読み取りクエリーを処理できますが、書き込み操作を処理することはできません。
    • Disconnected: ノードはどのクラスターコンポーネントにも接続されていません。その結果、クエリーを受け入れることができず、データはレプリケートされません。
  • ノードのステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_local_state_comment";'
    +---------------------------+--------+
    | Variable_name             | Value  |
    +---------------------------+--------+
    | wsrep_local_state_comment | Synced |
    +---------------------------+--------+
    Copy to Clipboard Toggle word wrap

    wsrep_local_state_comment 変数の頻繁に使用される値は次のとおりです。

    • Synced: ノードはクラスター内で完全に同期されており、レプリケーションにアクティブに参加しています。
    • Desynced: ノードは引き続きクラスターの一部ですが、状態の遷移で主にビジー状態です。
    • Joining: ノードはクラスターへの参加処理中です。
    • Joined: ノードはクラスターに正常に参加しました。クラスターから書き込みセットを受信して適用できます。
    • Donor: ノードは現在、State Snapshot Transfer (SST) を提供しています。新しいノードが参加して完全な状態の遷移が必要な場合、クラスターは既存のノードを選択して必要なデータを送信します。
  • ノードがクラスターからの書き込みセットを受け入れるかどうかを確認します。

    # mysql -u root -p -e 'show status like "wsrep_ready";'
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | wsrep_ready   | ON    |
    +---------------+-------+
    Copy to Clipboard Toggle word wrap

    wsrep_ready 変数が ON の場合、ノードはコンポーネントを正常に初期化し、クラスターに接続されています。さらに、ノードは同期されているか、クエリーを処理できる状態に達しています。

  • ノードが他のホストとネットワーク接続されているか確認します。

    # mysql -u root -p -e 'show status like "wsrep_connected";'
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | wsrep_connected | ON    |
    +-----------------+-------+
    Copy to Clipboard Toggle word wrap

    ON 値は、ノードがクラスター内の少なくとも 1 つのメンバーに接続されていることを意味します。

  • 最後の FLUSH STATUS コマンド以降、またはサーバーの起動以降の書き込みセットのローカル受信キューの平均サイズを表示します。

    # mysql -u root -p -e 'show status like "wsrep_local_recv_queue_avg";'
    +----------------------------+-------+
    | Variable_name              | Value |
    +----------------------------+-------+
    | wsrep_local_recv_queue_avg | 0.012 |
    +----------------------------+-------+
    Copy to Clipboard Toggle word wrap

    0 に近い値は理想的な状態であり、ノードが書き込みセットを受信するとそれを適用し続けることを示します。値が継続的に高い、または増加している場合は、ディスク I/O が遅いなどのパフォーマンスのボトルネックが発生している可能性があります。

  • フロー制御ステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_flow_control_paused";'
    +---------------------------+-------+
    | Variable_name             | Value |
    +---------------------------+-------+
    | wsrep_flow_control_paused | 0     |
    +---------------------------+-------+
    Copy to Clipboard Toggle word wrap

    この変数は、ローカル受信キューがいっぱいでフロー制御がトリガーされたために、ノードが一時停止され、新しい着信トランザクションを処理できない時間の割合を表します。値が 0 に近い場合、ノードはレプリケーションワークロードを効率的に継続していることを示します。値が 1.0 に近づくと、ノードが書き込みセットの適用で頻繁または継続的に問題に遭遇し、クラスターのボトルネックになる可能性があることを意味します。

    ノードが頻繁に一時停止する場合は、/etc/my.cnf.d/galera.cnf ファイルの wsrep_slave_threads パラメーターを調整できます。

  • ノードが並列に適用できる最小シーケンス番号と最大シーケンス番号間の平均距離を表示します。

    # mysql -u root -p -e 'show status like "wsrep_cert_deps_distance";'
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | wsrep_cert_deps_distance | 1     |
    +--------------------------+-------+
    Copy to Clipboard Toggle word wrap

    値が大きいほど、並列度が高くなります。これは、/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"
    Copy to Clipboard Toggle word wrap

    新規ノードを既存クラスターノードのいずれかに接続すると、クラスター内のすべてのノードを表示できるようになります。

    ただし、wsrep_cluster_address にクラスターのすべてのノードをリスト表示することを推奨します。

    したがって、1 つ以上のクラスターノードがダウンしても、その他のクラスターノードに接続することでノードがクラスターに参加できます。すべてのメンバーがメンバーシップに同意すると、クラスターの状態が変更します。新規ノードの状態がクラスターの状態と異なる場合、新しいノードは Incremental State Transfer (IST) または State Snapshot Transfer (SST) のいずれかを要求し、他のノードとの一貫性を確保します。

1.8.6. MariaDB Galera Cluster の再起動

すべてのノードを同時にシャットダウンすると、クラスターが終了し、実行中のクラスターは存在しなくなります。ただし、クラスターのデータは引き続き存在します。

クラスターを再起動するには、MariaDB Galera Cluster のデプロイ の説明に従って、最初のノードをブートストラップします。

警告

クラスターがブートストラップされておらず、最初のノードの mariadbsystemctl start mariadb コマンドのみで起動された場合、ノードは /etc/my.cnf.d/galera.cnf ファイルの wsrep_cluster_address オプションにリスト表示されているノードの 1 つ以上に接続しようとします。現在実行中のノードがない場合、再起動は失敗します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat