第6章 Galera の使用
高可用性のデプロイメントでは、Red Hat OpenStack Platform は MariaDB Galera Cluster を使用してデータベースのレプリケーションを管理します。「Pacemaker で設定された OpenStack サービス」に記載のとおり、Pacemaker は、マスター/スレーブのステータスを管理する バンドルセット リソースを使用して Galera サービスを実行します。
pcs status コマンドを使用して、galera-bundle サービスが実行されているかどうかと、実行先のコントローラーを確認することができます。
Docker container set: galera-bundle [192.168.24.1:8787/rhosp12/openstack-mariadb:pcmklatest] galera-bundle-0 (ocf::heartbeat:galera): Master overcloud-controller-0 galera-bundle-1 (ocf::heartbeat:galera): Master overcloud-controller-1 galera-bundle-2 (ocf::heartbeat:galera): Master overcloud-controller-2
6.1. ホスト名の解決
MariaDB Galera Cluster のトラブルシューティングを行う際には、ホスト名の解決を確認することができます。デフォルトでは、director は Galera リソースを IP アドレスにではなく hostname にバインドします。[1]そのため、ホスト名の解決を妨げている問題 (例: 設定の誤りや DNS のエラーなど) があると、Pacemaker が Galera リソースを適切に管理できなくなる可能性があります。
ホスト名の解決の問題がないことを確認した後には、クラスター自体の整合性をチェックしてください。そのためには、各コントローラーノードのデータベースで、Write Set Replication のステータスを確認します。
MySQL にアクセスするには、オーバークラウドのデプロイメント中に director によって設定されたパスワードを使用します。MySQL の root パスワードを取得するには、hiera コマンドを使用します。
$ sudo hiera -c /etc/puppet/hiera.yaml "mysql::server::root_password" *<MYSQL-HIERA-PASSWORD>*
Write Set Replication の情報は、各ノードの MariaDB データベースに保管されます。関連する変数はそれぞれ wsrep_ のプレフィックスを使用します。そのため、この情報はデータベースクライアントで直接問い合わせることができます。
$ sudo mysql -B --password="<MYSQL-HIERA-PASSWORD>" -e "SHOW GLOBAL STATUS LIKE 'wsrep_%';"
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| wsrep_protocol_version | 5 |
| wsrep_last_committed | 202 |
| ... | ... |
| wsrep_thread_count | 2 |
+------------------------+-------+MariaDB Galera Cluster の正常性と整合性を検証するには、まず最初にクラスターが正しいノード数を報告するかどうかを確認してから、各ノードで以下の点をチェックします。
- 正しいクラスターに属していること
- クラスターへの書き込みが可能であること
- クラスターからクエリーの受信と書き込みが可能であること
- クラスター内の他のノードに接続されていること
- ローカルのデータベースで Write Set をテーブルにレプリケーションしていること
6.2. データベースクラスターの整合性
MariaDB Galera Cluster の問題を調査する際には、クラスター自体の整合性を確認することができます。クラスターの整合性を検証するには、各コントローラーノード上の特定の wsrep_ データベース変数を確認する必要があります。データベースの変数を確認するには、次のコマンドを実行します。
$ sudo mysql -B --password="<MYSQL-HIERA-PASSWORD>" -e "SHOW GLOBAL STATUS LIKE 'VARIABLE';"
VARIABLE は確認する wsrep_ データベース変数に置き換えてください。たとえば、ノードの cluster state UUID を確認するには、以下のコマンドを実行します。
$ sudo mysql -B --password="<MYSQL-HIERA-PASSWORD>" -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';"
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_state_uuid | e2c9a15e-5485-11e0-0800-6bbb637e7211 |
+--------------------------+--------------------------------------+
以下の表には、クラスターの整合性と関連するさまざまな wsrep_ データベース変数をまとめています。
表6.1 クラスターの整合性を確認するためのデータベース変数
| 変数 | 概要 | 説明 |
|---|---|---|
|
|
クラスターの状態の UUID |
ノードが属するクラスターの ID。全ノードに全く同じ ID が割り当てられている必要があります。異なる ID が割り当てられたノードは、クラスターに接続できません。 |
|
|
クラスター内のノード数 |
これは、任意のノード 1 台で確認することができます。値が実際のノード数を下回る場合には、いずれかのノードでエラーが発生したか、接続を失ったことになります。 |
|
|
クラスターの変更回数 |
クラスターが複数のコンポーネント (パーティション) に分割されているかどうかを確認します。これは、ネットワークのエラーが原因となっている場合が多いです。全ノードの値が全く同じである必要があります。
異なる |
|
wsrep_cluster_status |
Primary コンポーネントのステータス |
ノードがまだクラスターへの書き込みをできるかどうかを確認します。可能な場合には、 |
6.3. データベースクラスターノード
Galera クラスターの問題を特定のノードに切り分けすることができる場合には、その他の wsrep_ データベース変数が具体的な問題を解く手がかりとなる可能性があります。これらの変数は、「データベースクラスターの整合性」に記載のクラスターのチェックと同様の方法で確認することができます。
$ sudo mysql -B --password="<MYSQL-HIERA-PASSWORD>" -e "SHOW GLOBAL STATUS LIKE 'VARIABLE';"
VARIABLE は以下の値のいずれかに置き換えます。
表6.2 ノードの整合性を確認するためのデータベース変数
| 変数 | 概要 | 説明 |
|---|---|---|
|
wsrep_ready |
ノードがクエリーを受け入れる機能 |
ノードがクラスターから write set を受け入れることができるかどうかを示します。受け入れることができる場合には、 |
|
wsrep_connected |
ノードのネットワーク接続性 |
そのノードが他のノードに接続されているかどうかを示します。接続されている場合には、 |
|
wsrep_local_state_comment |
ノードの状態 |
ノードの状態の概要を表示します。ノードがクラスターにまだ書き込み可能な場合には (
ノードが稼働していないコンポーネントの一部の場合には、 |
wsrep_connected が ON の場合には、そのノードが一部のノードのみに接続されている可能性があることも意味します。たとえば、クラスターのパーティションの場合には、そのノードは、クラスターに書き込みができないコンポーネントの一部となっている可能性があります。詳しくは、「データベースクラスターの整合性」 を参照してください。
wsrep_connected が OFF の場合は、ノードはどのクラスターコンポーネントにも接続されていません。
6.4. データベースレプリケーションのパフォーマンス
クラスターおよびそのクラスター内の個々のノードが正常な状態で安定している場合には、レプリケーションのスループットを確認して、パフォーマンスのベンチマークを行うことができます。この作業は、「データベースクラスターノード」および「データベースクラスターの整合性」と同様に wsrep_ データベースの変数をチェックすることによって行います。
$ sudo mysql -B --password="<MYSQL-HIERA-PASSWORD>" -e "SHOW STATUS LIKE 'VARIABLE';"
VARIABLE は以下の値のいずれかに置き換えます。
表6.3 クラスターのパフォーマンス (レプリケーションのスループット) を確認するためのデータベース変数
| 変数 | 概要 |
|---|---|
|
|
最後にクエリーされた後のローカル受信キューの平均サイズ |
|
|
その変数が最後にクエリーされた後の送信キューの平均の長さ |
|
|
いずれかの変数が最後にクエリーされた後のローカル受信キューの最小サイズと最大サイズ |
|
|
その変数が最後にクエリーされた後に フロー制御 が原因でノードが一時停止された時間の割合 |
|
|
並行して適用可能なシーケンス番号 ( |
それらの変数のいずれかをクエリーするときには毎回、FLUSH STATUS コマンドを実行すると値がリセットされます。クラスターのレプリケーションのベンチマークを行うには、それらの値を複数回クエリーして、その変化を確認する必要があります。この変化は、フロー制御 がクラスターのパフォーマンスにどの程度影響を及ぼしているかを判断するのに役立てることができます。
フロー制御とは、クラスターがレプリケーションを制御するのに使用するメカニズムです。ローカル受信 Write Set キューが一定の閾値を超えると、ノードがそのキューに追い付くために、フロー制御がレプリケーションを一時停止します。詳しくは、Galera Cluster のサイトで、「Flow Control」のセクションを参照してください。
異なる値およびベンチマークを最適化するには、以下の変数をチェックします。
- wsrep_local_recv_queue_avg > 0.0
-
ノードが 受信に対応できる速度で Write Set を適用することはできないため、レプリケーションのスロットルがトリガーされます。このベンチマークの詳しい情報は、
wsrep_local_recv_queue_minとwsrep_local_recv_queue_maxを確認してください。 - wsrep_local_send_queue_avg > 0.0
- wsrep_local_send_queue_avg の値が高くなると、レプリケーションのスロットルとネットワークスループットの問題が発生する可能性も高くなります。これは特に wsrep_local_recv_queue_avg の値が高くなると、その傾向が強くなります。
- wsrep_flow_control_paused > 0.0
フロー制御によりノードが一時停止されています。ノードが一時停止されている時間を確認するには、
wsrep_flow_control_pausedの値をクエリーの間隔の秒数で乗算してください。たとえば、最後のチェックから 1 分後にwsrep_flow_control_paused = 0.50となった場合には、ノードのレプリケーションは 30 秒停止されたことになります。また、wsrep_flow_control_paused = 1.0の場合には、最後のクエリーからずっと停止していたことになります。理想的には、
wsrep_flow_control_pausedは可能な限り0.0に近い値であるべきです。- wsrep_cert_deps_distance
-
スロットルおよび一時停止の場合には、
wsrep_cert_deps_distanceの変数をチェックして、(平均で) 適用可能な write set の数を確認することができます。その後に、wsrep_slave_threadsをチェックして、同時に適用された write set の実際の数を確認します。 - wsrep_slave_threads
wsrep_slave_threadsの設定をより高くすると、スロットリングと一時停止を緩和するのに役立ちます。たとえば、wsrep_cert_deps_distanceの値が20の場合は、wsrep_slave_threadsを 2 倍にして2から4にすると、ノードが適用できる write set の量も 2 倍になります。ただし、wsrep_slave_threadsは、ノード内の CPU コア数を超えないように設定するべきです。問題のあるノードで、
wsrep_slave_threadsがすでに最適に設定されている場合には、接続の問題の可能性を調査するためにそのノードをクラスターから除外することを検討してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.