為什麼 MongoDB 不自動重啟?

為什麼 MongoDB 不自動重啟?

MongoDB 3.6 似乎不會自動配置為在崩潰時重新啟動。查看與 Ubuntu 16.04LTS 的最新 .deb 軟體包捆綁在一起的 systemd 服務,它似乎沒有配置重新啟動:

$ sudo systemctl cat mongod
# /lib/systemd/system/mongod.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false

# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target

發送 SIGKILL 和 SIGSEGV 都會終止該進程,並且不會重新啟動它。我不確定這些是否被 systemd“捕獲”而不只是重新啟動。

有幾個問題:這對於像資料庫這樣的高可用性服務至關重要嗎?看起來確實是這樣。 MongoDB 有什麼理由不進行開箱即用的設定嗎?

答案1

儘管您始終可以更改部署的服務預設值,但意外關閉絕對是強烈建議管理員介入的情況。

如果進程關閉的原因mongod是一個不變量,如果沒有手動幹預就無法修復(例如,磁碟空間不足或資料檔案損壞),那麼自動重新啟動將沒有幫助,並且可能會使情況變得更糟。一般來說,mongod不應因可恢復錯誤而關閉。 MongoDB伺服器異常架構區分每個操作的致命錯誤和對整個過程致命的錯誤。進程致命錯誤是指繼續可能導致可怕結果的情況,例如資料遺失或磁碟上的資料損壞。使用者或作業系統發起的終止進程的訊號(例如記憶體不足又名 OOM Killer在 Linux 上)也會導致mongod關閉。

評論中提到的一個範例錯誤是索引建構在使用舊版本 MongoDB 的某些輔助節點上出現段錯誤。透過自動服務重新啟動,這種情況可能會導致無限循環,其中輔助服務可能會崩潰、重新啟動、恢復索引構建、遇到相同的情況,然後重新啟動......只是為了恢復注定的索引構建。當此重新啟動循環正在進行時,輔助副本的間歇性可用性可能會影響使用輔助副本讀取首選項或副本集其他成員的用戶端(例如,重複搜尋上游 oplog 以恢復同步)。

作為系統管理員,我更願意查看 MongoDB 日誌並嘗試了解進程關閉的原因,以便解決根本原因。理想情況下,部署將有足夠的容錯能夠應對會員無法聯繫的情況,以便有時間調查和糾正情況。

根據問題和部署的性質(獨立、副本集或分片叢集),我可能還想在嘗試任何自動或手動復原之前備份資料檔案。例如,在不正常關閉後重新啟動時,mongod有一個初始恢復階段,該階段將應用未完成的日誌條目並運行存儲引擎檢查,例如dbPath.對於獨立伺服器,明智的做法是在嘗試恢復/修復之前獲取未修改的資料檔案的副本。透過副本集部署,資料已經在副本集的另一個成員上複製,因此如果標準恢復不成功,我會重新同步該成員而不是嘗試任何修復。

答案2

如果您使用的是 systemd,則Restart=always[Service]部分應允許服務在崩潰後重新啟動。

答案3

如果您確實關心高可用性,那麼您將運行副本集,並且可以處理 1 個或多個節點故障。

我個人在生產環境中管理大型分片 mongodb 部署已經 5 年了,我更喜歡實例不自動重啟,因為我想在實例重新在副本集中輪換之前調查任何問題。

https://docs.mongodb.com/manual/core/replica-set-high-availability/

相關內容