MongoDB分片集群-遇到的坑

坑点一:创建用户的问题


在mongos下创建的用户,只存在配置服务,和分片没有关系,所以分片必须自己创建一个管理员用户,
不然分片中没有任何用户查看不了任何集群信息,例如无法使用mongostat 命令查看分片中的内存情况的。

重点:必须在mongos和分片主机中创建管理用户,必须赋予集群管理的权限不然白搭

创建命令:
db.createUser(  
    {  
      user: "root",  
      pwd: "root",  
      roles: [
        {role:'root',db:'admin'},
        {role:'clusterAdmin',db:'admin'},
        {role:'readWriteAnyDatabase',db:'admin'}    
        ]  
    }  
  )
  
修改命令:
db.updateUser(
  'root',
  {
    pwd:'root',
    roles:[
        {role:'root',db:'admin'},
        {role:'clusterAdmin',db:'admin'},
        {role:'readWriteAnyDatabase',db:'admin'}
    ]
  }
)

坑点二:MongoDB 分片集群默认内存 0.5*(实际内存-1)

引用官方文档的一句话:
MongoDB可以利用WiredTiger内部缓存和文件系统缓存。
从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者:
50%(RAM-1 GB)或256 MB。
例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM(0.5 (4 GB-1 GB)= 1.5 GB)。
相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,
因为这是总RAM的一半以上减去一GB(0.5 (1.25 GB-1 GB)= 128 MB

因为内部缓存这个机制的存在,所以一台机除非内存足够大,否则最好不超过两台MongoDB,
我因为在16G的服务器部署了三台分片服务器,平均每台要用到7.5G内存,服务器无法满足,导致内存满,MongoDB异常退出,交易异常。
所以这里只能暂时配上设置内存大小参数--fork --wiredTigerCacheSizeGB 4 缓解压力

重点:一个服务器最好不多于两个MongoDB进程,并且设置内存限制参数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值