mongoDB 从单节点迁移到分布式集群 遇到的问题
生活随笔
收集整理的這篇文章主要介紹了
mongoDB 从单节点迁移到分布式集群 遇到的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mongoDB 從單節點遷移到分布式集群 遇到的問題:
1.linux 環境下limit 的設置問題:
?? ?錯誤:
?? ?$ ps -ef|grep mongod
?? ?-bash: fork: retry: 資源暫時不可用
?? ?-bash: fork: retry: 資源暫時不可用
?? ?^C-bash: fork: retry: 資源暫時不可用
?? ?-bash: fork: retry: 資源暫時不可用
?? ?-bash: fork: 資源暫時不可用
?? ?原因:
?? ?linux 默認用戶打開文件數為1024,進程數也是1024;
?? ?所以當客戶端連接超過了,就出錯了。
?? ?解決方法:重新設置ulimit ,以解決mongod 自動關閉。
?? ?修改文件:
?? ?/etc/security/limits.conf
?? ?比如添加以下內容:
?? ?mongo??????????????? soft??? nproc?? 30000
?? ?mongo??????????????? hard??? nproc?? 65536
?? ?mongo??????????????? soft??? nofile? 30000
?? ?mongo??????????????? hard??? nofile? 65536
2.mongodump不能先鎖表。
?? ?db.fsyncLock() #鎖住表
?? ?mongodump
?? ?db.fsyncUnLock() #解鎖
?? ?以上方法 mongodump 無法運行,也無法備份數據(停住了)
?? ?這個是我突然想當然的,試試是否在備份時也可以先鎖住表,不讓客戶端寫操作。就出這問題了。
3.數據備份請請確認索引是否有與分片索引相同,有相同的,先刪除索引后,再備份:
?? ?在導入數據時,看到有一個表原先有兩個字段的復合索引,
?? ?在選擇片鍵時,也是這兩個字段做的片鍵,數據導入時,提示索引無法更新,出錯。
?? ?
?? ?解決方法:刪除原索引,或是修改片鍵值。
4.Hash索引時對key進行hash計算然后創建索引,目前只支持等號運行,不支持區間
使用了HASH 片鍵后,查詢/更新,不能使用 in, $gte $lte 之類的條件。
?? ?所以如果你客戶端有太多的代碼是使用了 in, $gte $lte 之類的查詢條件,那要
?? ?權衡一下了。你的片鍵選擇是否得當,或是修改代碼。
5.當更新單個文檔如果不指定片鍵,會出以下錯誤:
?? ?does not contain shard key for pattern { user_id: 1.0, cookie: 1.0 }'
?? ?
?? ?MongoDB更新操作無法確定更新到具體的某個分片上,所以出錯,
?? ?指定片鍵后,更新操作只會路由到某一個分片上。
?? ?但如果你是更新多條記錄,路由會更新到所有分片上。
6.最大連接數問題
?? ?
?? ?mongodb 默認最大連接數為928,如果你沒有指定,到了這個數時,mongos,或是mongodb進程
?? ?會自動關閉,如果查看日志也無法確認是什么原因mongod 服務器突然自動關閉了,那可以查查
?? ?當前連接數是多少,
?? ??? ?mongos> db.serverStatus().connections;
?? ?{
?? ??? ?"current" : 1240,
?? ??? ?"available" : 22760,
?? ??? ?"totalCreated" : NumberLong(189438)
?? ?}
總結
以上是生活随笔為你收集整理的mongoDB 从单节点迁移到分布式集群 遇到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb 分片群集配置 及数据迁移
- 下一篇: mongoDB3.0.2 升级操作