我正在将辅助副本集成员升级到wiredTiger。我已将它从 MongoDB 2.6.3 升级到 3.0.4,并将存储引擎更改为wiredTiger。现在它正在重新同步主节点的所有数据。在某些时候收到以下错误,并且该过程重新开始:
2015-07-22T13:18:55.658+0000 I INDEX [rsSync] 使用批量方法构建索引
2015-07-22T13:18:55.664+0000 I INDEX [rsSync] 构建索引完成。共扫描了 1591 条记录。0 秒
2015-07-22T13:18:56.397+0000 E STORAGE [rsSync] WiredTiger (24) [1437571136:397083][20413:0x7f3d9ed29700],文件:WiredTiger.wt,session.create:WiredTiger.turtle:fopen:打开太多文件
2015-07-22T13:18:56.463+0000 E REPL [rsSync] 8 24:打开的文件太多
2015-07-22T13:18:56.463+0000 E REPL [rsSync] 初始同步尝试失败,剩余 9 次尝试
同一台机器之前运行的是 2.6.3 版本,没有任何打开文件限制问题。我知道wiredTiger 可能会创建更多文件,所以肯定是这样,但它是否让它们同时打开?
以供参考:
cat /proc/sys/fs/file-max
10747371
在 /etc/init.d/mongod 中,配置为:
ulimit -n 64000
根据文档,mongo 似乎为每个数据文件保存一个文件描述符。与在wiredTiger 中一样,这会导致每个集合一个文件+ 每个索引一个文件,根据我们用例的计算,加起来可以超过700K。
所以我可以将 ulimit 更改为 700000 或更高,但我想知道这是否是最正确的解决方案,以及存在哪些替代方案。