このセクションでは、データベースのレプリケーションに関する FAQ と解決方法について説明します。
リーダー ノードが NSX Advanced Load Balancer クラスタから切断されるとどうなりますか。
リーダー ノードが NSX Advanced Load Balancer クラスタから切断されると、次のようなことか起こります。
クォーラムが失われるため、リーダー ノードが再起動し、NSX Advanced Load Balancer クラスタが切断されます。
DB レプリケーションが完了せず、それが原因でリーダーになれないというメッセージをフォロワー ノードのいずれかが投稿します。
別のフォロワー ノードが、リーダーからの DB レプリケーションを投稿し、リーダー ノードになります。
どのフォロワーも NSX Advanced Load Balancer クラスタでデータベースのレプリケーションを完了できない場合はどうなりますか。
フォロワー ノードでは、次のプロセスを使用してデータベースがレプリケートされます。
データベースのストリーミング レプリケーションを有効にできるかどうかを確認します。通常、これは成功することが期待されます。NSX Advanced Load Balancer は、これを満たす程度の適切な数の WAL レコード ファイルを許可するためです。これが失敗した場合、またはフォロワー ノードを初めてクラスタに追加する場合、フォロワー ノードはフル バックアップ(通常は時間がかかる)を実行します。
ストリーミング レプリケーションが設定されると、NSX Advanced Load Balancer は、レプリケーションが引き続き実行されるかを 1 分ごとにモニターします。連続して 5 回失敗を検出すると、レプリケーションが失敗したことを宣言し、完全なレプリケーションを試みます。
完全なレプリケーションを実行しようとする際、NSX Advanced Load Balancer は常に、データベース データ ディレクトリ全体を次のディレクトリにフル コピーします。これが完了した場合にのみ、データベースの現在のディレクトリに移動します。データベース ファイルのフル コピーの途中で障害が発生しても、最新の有効なディレクトリが引き続き保たれます。
フル バックアップを実行するかどうかを決める際は、これを記録しておき、この間にリーダーの障害が発生した場合は、このノードがリーダーにならないようにすることが重要です。このスキームでは、フォロワー ノードは、常に同期している必要があり、リーダーを引き継ぐことができます。完全同期に失敗すると、安全メカニズムによって、ノードはリーダーを引き継がなくなりますが、手動による操作でいずれかのノードをリーダーとして昇格できます。
完全なレプリケーションが試行されると、cluster_mgr ログには 1 分ごとに同期が表示されますか。
完全なレプリケーションのプロセスのログは、/var/lib/avi/log/postgres_service_main.log
および postgres_service_metrics.log
にあります。
レプリケーション エラーの一般的な原因は何ですか。
永続的な接続の問題により、レプリケーション エラーが発生することがあります。フォロワー ノードの postgres がチェックポイントからリカバリでき、リーダーの背後にある場合、ストリーミング レプリケーションは常に成功します。場合によっては、postgres がグレースフルに停止しないと、リーダーからレプリケートできないことがあります。その場合、リーダーからのフル バックアップが必要になります。
データベース レプリケーション プロセスでの「現在のディレクトリ」と「次のディレクトリ」はどれですか。
構成データベースの場合:「次のディレクトリ」は /var/lib/postgresql/9.3/main_backup
、「現在のディレクトリ」は /var/lib/postgresql/9.3/main/
です。
メトリック データベースの場合:「次のディレクトリ」は /var/lib/postgresql/9.3/pg_metrics/metrics_backup
と /var/lib/postgresql/9.3/pg_metrics/metrics
です。
レプリケーション エラーの症状はどのようなものですか。これらは、リーダーを選ぶときにのみ見られるものですか。このようなイベントについて内部イベントは生成されますか。
DB REPLICATION FAILED イベントは、レプリケーション エラーを検出すると、NSX Advanced Load Balancer で確認されます。
クラスタ コンバージェンスと何らかの関係はありますか。ある場合、これについて最近の改善された点を詳しく教えてください。
NSX Advanced Load Balancer がレプリケーション エラーを検出すると、フル バックアップがトリガされます。この一環で、/var/lib/avi/etc のファイルが編集され、レプリケーションが完了しなかったことが示されます。したがって、コンバージェンスがあれば、特定のノードがリーダーになることに参加することはありません。また、このサービスの状態が COPYING_DB_FROM_LEADER になり、ノードの状態が CLUSTER_ACTIVE から CLUSTER_STARTING に移行します。クラスタ全体の状態は、CLUSTER_HA_ACTIVE とは見えません。
NSX Advanced Load Balancer の最新バージョンでは zookeeper を引き続き使用していますか。そうでない場合、NSX Advanced Load Balancer で今も実行されているのはなぜですか。また変更された点は何ですか。
NSX Advanced Load Balancer の最新バージョンでは zookeeper を使用していません。zookeeper プロセスは後方互換性のために実行されています。NSX Advanced Load Balancer を以前のバージョンから 17.2 にアップグレードする場合、コントローラは、17.2 にはまだない ZK のリーダーシップ情報を SE 向けに公開する必要があります。アップグレードが完了すると、SE は新しいスキームをリーダーシップ通知に使用します。すべてのアップグレードが 17.2.x から行われるようになったら、ZK は削除される予定です。