web-dev-qa-db-ja.com

mariadb galera-ノードのシャットダウンエラー1047 WSREPがアプリケーションで使用するノードをまだ準備していない場合のエラー

2つのCentOS 6.6サーバーに2つのMariadb Galeraノード(mariadb-galera-10.0.27-linux-x86_64.tar.gz)をインストールしました。

インストール後、パラメーター--wsrep-new-clusterでnode1を起動し、このパラメーターなしでnode2を起動します。それらは正常に機能し、データは2つのノード間で正常に同期されます。

しかし、node1をシャットダウンすると。 Node2はまだ実行中ですが、データベースにアクセスしようとすると。次のエラーが表示されます。

use testdb;
ERROR 1047 (08S01): WSREP has not yet prepared node for application use 

この場合はどうなりますか?ここに2つのノードでの構成があります(異なるIPアドレス)。

[galera] 
wsrep_on=ON
wsrep_cluster_name='mysql-cluster'
wsrep_provider='/home/mariadb/mariadb-galera/lib/galera/libgalera_smm.so'
wsrep_provider_options="gcache.size=1G"
wsrep_cluster_address="gcomm://10.211.26.116:4567?

pc.wait_prim=no"
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_node_address=10.211.26.117:4567
wsrep_node_name='db2'
7
namdt55555

2ノードクラスター

two-nodeクラスターでは、single-node failureにより、他の作業を停止します。

状況

2つのノードのみで構成されるクラスターがあります。ノードの1つがクラスターを異常な状態のままにします。つまり、initまたはsystemdを使用してシャットダウンする代わりに、クラッシュしたり、ネットワーク接続が失われたりします。残っているノードは操作不能になります。人間のオペレーターや別のノードなどのサードパーティから追加情報が提供されるまで、この状態が続きます。

他のノードがクラスタを不当に離れた後もノードが動作し続けた場合、2つのノードのそれぞれが自分自身をプライマリコンポーネントと見なすリスクがあります。これを防ぐために、ノードは動作しなくなります。

ソリューション

2つの解決策があります:

  • Pc.boostrap wsrep Providerオプションを使用して、生き残ったノードをbootstrapして、新しいプライマリコンポーネントを形成できます。これを行うには、データベースクライアントにログインし、次のコマンドを実行します。

SET GLOBAL wsrep_provider_options = 'pc.bootstrap = YES';

これにより、残っているノードが新しいプライマリコンポーネントとしてブートストラップされます。他のノードがオンラインに戻るか、このノードとのネットワーク接続を回復すると、状態転送を開始し、このノードに追いつきます。

  • ノードを引き続き動作させたい場合は、pc.ignore_sb wsrep Providerオプションを使用できます。これを行うには、データベースクライアントにログインし、次のコマンドを実行します。

SET GLOBAL wsrep_provider_options = 'pc.ignore_sb = TRUE';

ノードは更新の処理を再開し、スプリットブレインの状況が疑われる場合でも、更新を継続します。

注意警告:pc.ignore_sbを有効にすることは、前述のスプリットブレイン状況のリスクがあるため、マルチマスター設定では危険です。ただし、マスタースレーブクラスターの場合は特に簡素化されます(特に2つのノードのみを使用する場合)。

上記のソリューションに加えて、Galera Arbitratorを使用して、状況を完全に回避できます。 Galeraアービトレーターは、クォーラム計算の奇数ノードとして機能します。つまり、2ノードクラスターの1つのノードでGalera Arbitratorを有効にすると、他のノードに障害が発生したりネットワーク接続が失われたりしても、そのノードはプライマリコンポーネントのままです。

http://galeracluster.com/documentation-webpages/twonode.html

7
scarface_90

考えられる理由は、node1が異常にダウンしたか、少なくともnode2がダウンしたと考えたことです。この場合、2ノードクラスターはスプリットブレイン状態になり、クラスターの残りの部分は、プライマリコンポーネントであるかどうかを判断できません。そのため、2ノードクラスターは推奨されません。

Node1のログを調べて、正常にシャットダウンしたかどうかを確認し、正常にシャットダウンした場合は、node2のログで状況をどのように認識したかを確認します。 node1が正常にシャットダウンした場合、次のようなメッセージが表示されます。

[Note] WSREP: forgetting xxxxxxx (tcp://X.X.X.X:XXXX)

等。;しかし、他のノードが失われたと考えた場合は、次のようになります

[Note] WSREP: (70f85e74, 'tcp://x.x.x.x:xxxx') turning message relay requesting on, nonlive peers: tcp://X.X.X.X:XXXX

等.

http://nirbhay.in/blog/2015/02/split-brain/ を参照して、スプリットブレインの状況の詳細とログ例を参照してください。

それを回避する最も安価な方法は、Galeraアービトレーターを使用することです: http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/

1
elenst