我在 Kubernetes 中將 MongoDB 作為 StatefulSet 運行。
我正在嘗試使用啟動/活躍度探測器,我注意到一些舵圖使用了 MongoDB 的“ping”命令。
正如檔案所說,
ping 命令是一個空操作,用于測驗服務器是否正在回應命令。即使服務器被寫鎖定,此命令也會立即回傳:
這是什么意思?當服務器正在啟動或處于初始同步程序中時,該命令將回傳什么?非常感謝!
uj5u.com熱心網友回復:
不確定 ping 是否是一個好主意,您不關心服務器的一般狀態,您關心它可以接收連接。
活性探測有一個超時,所以將來當你開始一個新的副本時,有狀態集中的新 pod 在等待復制結束時可能會失敗。
您應該使用rs.status()并獲取“myState”欄位。
myState 是 1-10 之間的整數標志。見這對所有可能的狀態。
如果 rs.status() 命令由于某種原因失敗,則意味著 ping 也會失敗。
但是,成功的 ping 并不意味著服務器已準備好接收連接并提供資料,這才是您真正關心的。
探針
啟動探針,myState 等于 1 或 2
這意味著啟動探針將耐心等待直到服務器準備好,無論它是主服務器還是副本服務器。
就緒探測器,myState 等于 1 或 2
這意味著,每當副本需要回滾或正在恢復或 mongod 決定它未準備好接受連接或提供資料的任何原因時,這將讓 kubernetes 知道此 pod 未準備好,并將請求路由到其他 pod sts。
livenes 探針,myState 不等于 6、8 或 10
這意味著,除非服務器狀態為 UNKOWN、DOWN 或 REMOVED,否則 kubernetes 將假定該服務器是活動的。
所以,讓我們測驗一個場景!
- sts 啟動,第一個 Pod 啟動,myState = 0
- 啟動探針等待
- 第一個 MongoDB 節點準備就緒,myState = 1
- 啟動探針終于通過了,現在準備和活躍度探針開始起作用
- 新副本觸發,第二個 Pod 啟動,myState = 0
- 新副本成功加入集合,myState = 5
- 新副本已準備就緒,myState = 2
- 啟動探針終于通過了,現在準備和活躍度探針開始起作用
- 一些行動的時間
- 一個改變數百個檔案的大規模操作在主服務器上回滾
- 第二個 Pod 現在處于 ROLLBACK 狀態,myState = 9,就緒探測失敗,第二個 Pod 現在未就緒
- 現在所有連接都發送到 PRIMARY
- 第二個 pod 已經完成回滾
- 第二個 Pod 沒有作為 SECONDARY 回傳,myState = 2,活性探測成功并且 Pod 回傳到 READY 狀態
- MongoDB dba 搞砸了并發出了從復制集中洗掉輔助節點的命令,myState = 10
- 活性探測失敗,kubernetes 殺死 pod
- sts 需要 2 個副本并再次啟動第二個 pod ...
都好 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/363855.html
上一篇:如何在表視圖控制器中當前顯示的內容的中心顯示彈出視圖?
下一篇:是否可以回滾服務?
