mongodb的副本集成員狀態state解析


 

 

 綜述:

# 停掉數據庫,直接刪除本地數據,然后啟動mongo數據庫,啟動之后存在一個同步的過程,會非常耗時。

# startup2:表示正在初始化並同步數據。

 副本集的每個成員都有一個狀態,反映了它在集合中的配置情況。

 

數字 名稱 狀態描述
0 STARTUP 還不是任何集合的活動成員。所有的成員啟動在該狀態。在STARTUP狀態mongod解析副本集配置文檔。
1 PRIMARY 處於PRIMARY狀態的成員是唯一能接受寫操作的成員。
2 SECONDARY 處於SECONDARY狀態的成員復制數據存儲。數據可用於讀,盡管可能比較舊。
3 RECOVERING 可以選舉。成員要么實施啟動自檢測,或完成回滾或重新同步的轉換。處於維修模式時:db.adminCommand({"replSetMaintenance":true})
5 STARTUP2 成員加入了集合,正運行初始化同步。
6 UNKNOWN 成員的狀態,正如從集合的另一個成員中所看到的,未知。
7 ARBITER 仲裁不復制數據,而僅僅參與選舉。
8 DOWN 該成員,正如從集合的立即你跟一個成員所見,不可達。(not reachable/healthy),執行: db.shutdownServer()
9 ROLLBACK 該成員正在實施回滾。數據不可讀。
10 REMOVED 成員曾今在副本集但隨后被移除。


 

 舉例:

glc-test:SECONDARY> use admin
switched to db admin
glc-test:SECONDARY> db.shutdownServer()
server should be down...
2020-11-26T15:57:35.265+0800 I NETWORK  [js] trying reconnect to xxx:28042 failed
2020-11-26T15:57:35.267+0800 I NETWORK  [js] reconnect xxx:28042 failed failed 
2020-11-26T15:57:35.270+0800 I NETWORK  [js] trying reconnect to xxx:28042 failed
2020-11-26T15:57:35.271+0800 I NETWORK  [js] reconnect xxx:28042 failed failed 
> ^C
2020-11-26T15:57:45.250+0800 I NETWORK  [js] trying reconnect to xxx:28042 failed
2020-11-26T15:57:45.251+0800 I NETWORK  [js] reconnect xxx:28042 failed failed 
2020-11-26T15:57:45.252+0800 I QUERY    [js] Failed to end session { id: UUID("0dbe7d46-7f64-4af4-9a82-346be3b0d8fe") }
 due to SocketException: socket exception [CONNECT_ERROR] server [couldn't connect to server xxx:28042,
 connection attempt failed: SocketException: Error connecting to xxx:28042 (ip:28042) :: caused by :: Connection refused]



{
"_id" : 4,
"name" : "xxx:28042",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2020-11-26T07:58:56.535Z"),
"lastHeartbeatRecv" : ISODate("2020-11-26T07:57:32.974Z"),
"pingMs" : NumberLong(1),
"lastHeartbeatMessage" : "Error connecting to xxx:28042 (ip:28042) :: caused by :: Connection refused",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : -1
}

 

 

PRIMARY:

處於PRIMARY狀態的成員接受寫操作。
一個副本集每次最多只有一個主成員。在一次選舉后,一個SECONDARY狀態成員成為主成員。處於PRIMARY狀態的成員有資格選舉。

SECONDARY:

處於SECONDARY狀態的成員復制主成員的數據集合,並可以被配置為接受讀操作。輔助成員有資格在選舉中投票,如果主成員不可用,會被選舉為PRIMARY狀態。
ARBITER

處於ARBITER狀態的成員不復制數據,也不接受寫操作。它們有資格選舉,僅僅存在於選舉中決勝負。如果集合要么有大量的成員,並能夠參與決勝選舉,否則副本集應該只有一個成員處於ARBITER狀態。在任何副本集中最多只有一個仲裁被配置。
其他狀態

STARTUP:

副本集的每個成員以STARTUP狀態啟動。Mongod然后加載成員的副本集配置,成員的狀態轉化為STARTUP2。在STARTUP狀態的成員沒有資格選舉,因為它們不被人為是任何副本集的成員。
STARTUP2

一旦mongod加載成員配置完成,副本集的每個成員就進入STARTUP2狀態,在此時它開始成員副本集的一個活動成員。成員然后決定是否需要初始化同步。如果一個成員開始初始化同步,成員保持STARTUP2狀態直到所有數據拷貝完成所有索引創建完成。之后,成員轉換為RECOVERING狀態。

RECOVERING:

當副本集成員不准備接受讀取時,它進入RECOVERING狀態。RECOVERING狀態發生在正常操作期間,不必顯示一個錯誤條件。處於RECOVERING狀態的成員有資格在選舉中投票,但是沒有資格進入PRIMARY狀態。

在復制足夠的數據給客戶端所需讀取數據的一致性視圖,成員便從RECOVERING狀態轉為SECONDARY狀態。在RECOVERING和SECONDARY狀態之間的唯一區別是,RECOVERING阻止客戶端讀取,SECONDARY運行讀取。SECONDARY狀態並不保證主成員數據陳舊化。

注:關於負載,一個輔助成員可能會遠遠落后於副本集的其他成員,以至於它可能需要重新同步數據到副本集。當這種情況發生時,成員進入RECOVERING狀態,並需要手工干預。
錯誤狀態

處於錯誤狀態的成員不能選舉。


UNKNOWN:

從沒交流狀態信息到副本集的成員會處於UNKNOWN狀態。

 

DOWN:

丟失到副本集連接的成員被集合的剩余成員看作為DOWN狀態。

REMOVED:


從副本集移除的成員進入REMOVED狀態。當成員進入REMOVED狀態,日志將會標記replset REMOVED消息事件。

 

ROLLBACK:

當副本集在選舉中替換掉主成員,舊的主成員可能包含不會復制到輔助成員的文檔。在這種情況下,舊的主成員反轉這些寫操作。在回滾期間,成員將保持ROLLBACK狀態。

FATAL:

處於FATAL狀態的成員觸發了一個不可恢復錯誤。成員必需關閉並重啟,可能還需要重新同步。

 

 

 

###################################################


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM