如果您叢集中的主要節點失敗,然後在將待命節點升階為新的主要節點時恢復連線,則會導致 repmgr 資料不準確。您可以使用 repmgr cluster show 命令偵測異常。

在前主要節點上執行 repmgr cluster show

在下列範例中,在恢復連線的前主要節點上執行 repmgr cluster show 命令會產生下列系統輸出。

 
     ID |  Name     | Role    | Status            | Upstream  | Location | Connection string
--------+-----------+---------+-------------------+-----------+----------+------------------------
 Node 1 | Node1 name| standby |!running as primary|Node 3 name| default  | host=host IP address user=repmgr dbname=repmgr
 Node 2 | Node2 name| standby |     running       |Node 3 name| default  | host=host IP address user=repmgr dbname=repmgr
 Node 3 | Node3 name| primary |   * running       |           | default  | host=host IP address user=repmgr dbname=repmgr
   WARNING: following issues were detected
  - node 1(ID: Node 1) is registered as standby but running as primary

在此範例中,節點 1 是叢集中的目前主要節點。

執行 repmgr cluster show 命令時待命節點顯示 !running as primary 狀態,表示前主要節點正在叢集中執行。在此情況下,您必須關閉並解除登錄前主要節點。

在新的主要節點上執行 repmgr cluster show

在下列範例中,在新的主要節點上執行 repmgr cluster show 命令會產生下列系統輸出。

     ID |  Name    | Role    | Status     | Upstream   | Location | Connection string
--------+----------+---------+------------+------------+----------+------------------------
 Node 1 |Node1 name| primary |  * running |            | default  | host=host IP address user=repmgr dbname=repmgr
 Node 2 |Node2 name| standby |    running | Node1 name | default  | host=host IP address user=repmgr dbname=repmgr
 Node 3 |Node3 name| primary |  ! running |            | default  | host=host IP address user=repmgr dbname=repmgr
   WARNING: following issues were detected
  - node 3(ID: Node 3) is running but the repmgr node record is inactive

在此範例中,repmgr 資料是正確的。它準確地指出節點 1 正在執行,並且它是目前的主要節點。關於節點 3 (前主要節點) 的警告訊息指出該節點上的 repmgr 資料不準確。

升階待命節點後執行 repmgr cluster show,但不在剩餘待命節點上執行 standby follow

在下列範例中,您可以看到主要節點失敗的叢集中的每個節點上的 repmgr 資料。已使用 repmgr standby promote 命令手動升階待命節點,但未在剩餘待命節點上執行 repmgr standby follow

當您在主要節點上執行 repmgr cluster show 時,系統輸出表示 repmgr 資料正確,但新的主要節點 (節點 2) 後面未跟隨任何待命節點。

     ID |  Name    | Role    | Status    | Upstream   |Location | Connection string
--------+----------+---------+-----------+------------+---------+------------------------
 Node 1 |Node1 name| primary | * running |            | default | host=host IP address user=repmgr dbname=repmgr
 Node 2 |Node2 name| primary | ! running |            | default | host=host IP address user=repmgr dbname=repmgr
 Node 3 |Node3 name| standby |   running |Node 1 name | default | host=host IP address user=repmgr dbname=repmgr
   WARNING: following issues were detected
  - node 1(ID: Node 1) is running but the repmgr node record is inactive

節點 1 (前主要節點) 和節點 3 (跟隨前主要節點的待命節點) 提供的 repmgr 資料不準確。

     ID |  Name    | Role    | Status              | Upstream |Location | Connection string
--------+----------+---------+---------------------+----------+---------+------------------------
 Node 1 |Node1 name| primary |   * running         |          | default | host=host IP address user=repmgr dbname=repmgr
 Node 2 |Node2 name| standby |! running as primary |Node1 name| default | host=host IP address user=repmgr dbname=repmgr
 Node 3 |Node3 name| standby |     running         |Node1 name| default | host=host IP address user=repmgr dbname=repmgr
   WARNING: following issues were detected
  - node 2(ID: Node 2) is registered as standby but running as primary

在待命節點上執行 repmgr cluster show

在跟隨目前主要節點的待命節點上執行命令,會產生 repmgr 資料準確的系統輸出,該資料與目前主要節點上的資料相同。

在跟隨前主要節點的待命節點上執行命令,會產生 repmgr 資料不準確的系統輸出,該資料與前主要節點上的資料相同。

記錄項目

如果失敗的前主要節點在將待命節點升階為新的主要節點後恢復連線,則會在 repmgr 資料不準確的所有節點上的 update-repmgr-data.log 檔案中顯示下列項目。

ERROR: An old primary is running in the repmgr cluster.
ERROR: Manual intervention is required to repair the repmgr cluster.
ERROR: The first step should be to shutdown and unregister the old primary.