mongoDB 从单节点迁移到分布式集群 遇到的问题

49 篇文章 1 订阅

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值