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)
}