您好,登錄后才能下訂單哦!
Part1:寫在最前
在MongoDB sharding環境中,我們會遇到一些常見的錯誤,本文就MongoDB官網列出的錯誤進行翻譯。
Part2:整體環境
MongoDB 3.4.4
Part1:某個應用或者Mongos宕機
如果每個應用程序服務器都有自己的mongos實例,其他應用程序服務器可以繼續訪問數據庫。 此外,mongos實例不保持持久狀態,并且可以重新啟動(啟動過程中為unavailable),而不會丟失任何狀態或數據。 當一個mongos實例啟動時,它會從configserver取回數據,并可以開始路由查詢。
Part2:在sharding集群中,其中一個mongod進程宕機
對于sharding環境,副本集提供了非常好的高可用能力。如果宕機的是主庫,則副本集會選出一個新的主庫。如果宕機的是從庫,則副本集會讓這臺從庫與主庫斷開連接,并且這臺從庫的數據不會被清空。在三個成員副本集中,即使該組的單個成員遇到災難性故障,另外兩個成員也有完整的數據副本。
經常去檢查可用性是否中斷以及是否有故障,如果系統出現不可恢復的故障,盡快替換掉出問題的服務器,并將一臺新的成員加入到副本集中,以保證整個副本集集群的高可用性。
Part3:sharding中的所有成員都unavailable
如果副本集分片的所有成員都不可用,則該分片中保留的所有數據都不可用。但是,所有其他分片上的數據將保持可用,并且可以將數據讀取和寫入其他分片。?但是,應用程序必須能夠處理部分結果,此時DBA該調查中斷的原因,并嘗試盡快恢復分片。
Part4:configserver副本集成員不可用
在版本3.2中更改:從MongoDB 3.2開始,分片集群的配置服務器可以部署為副本集。 副本集配置服務器必須運行WiredTiger存儲引擎。 MongoDB 3.2不推薦使用配置服務器的三個鏡像mongod實例。
副本集為配置服務器提供高可用性。 如果不可用的配置服務器是主服務器,則副本集將選擇新的主服務器。
如果副本集配置服務器丟失其主服務器,并且無法選擇主服務器,則集群的元數據將變為只讀。 仍然可以從分片讀取和寫入數據,但是在primary可用之前無法進行塊遷移或塊分割。 如果所有配置數據庫變得不可用,則集群無法使用。
Part5:configserver數據過舊導致游標失敗
當一個或多個mongos實例尚未從配置數據庫更新其集群元數據的緩存時,查詢返回以下警告:
could not initialize cursor across all shards because : stale config detected
此警告不應傳回應用程序。警告將重復,直到所有的mongos實例刷新其緩存。要強制實例刷新其緩存,請運行flushRouterConfig命令。
Part6:分片鍵和集群可用性
選擇分片鍵時最重要的考慮因素是:
1.確保MongoDB能夠在分片間均勻分配數據
2.衡量寫操作可以遍布整個集群
3.確保mongos可以將大多數查詢隔離成特定的mongod。
更多:
1.每個分片應該是副本集,如果特定的mongod實例失敗,則副本集成員將選擇另一個作為主節點并繼續操作。?但是,如果整個分片由于某種原因無法訪問或失敗,則該數據將不可用。
2.如果分片鍵允許mongos將大多數操作分離成單個分片,則單個分片的失敗只會使一些數據不可用。
3.如果分片建分布的數據要求獲取整個集群,那么這個分片不可用將導致整個集群不可用
實質上,這也說明了選擇合適的片鍵對于單個分片隔離查詢操作的重要性
Part7:configserver串錯誤
從MongoDB 3.2開始,configserver服務器可以部署為副本集。 分片集群的mongos實例必須指定相同的configserver服務器副本集名稱,但可以指定副本集的不同成員的主機名和端口。
3.4開始,不再支持使用鏡像mongod實例作為配置服務器(SCCC)。 在將分片集群升級到3.4之前,必須將配置服務器從SCCC轉換為CSRS。
對于早期版本的MongoDB分片集群,configserver服務器使用三個鏡像mongod實例的拓撲,分片集群中的mongos實例必須指定相同的configDB字符串。
Part8:移動configerserver服務器時避免停機
使用CNAME來識別您的配置服務器到集群,以便可以重新命名和重新編號配置服務器,而不會停機。
Part9:move Chunk 報錯
chunk migration結束時,分片必須連接到configserver數據庫才能更新群集元數據中的塊的記錄。 如果分片無法連接到configserver數據庫,MongoDB會報告以下錯誤:
ERROR: moveChunk commit failed: version is at <n>|<nn> instead of <N>|<NN>" and "ERROR: TERMINATING"
當發生這種情況時,shard副本集的primary 復制終止以保護數據一致性。 如果secondary成員可以訪問配置數據庫,則在選舉為新主之后,分片上的數據將再次被訪問。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。