坑点一:创建用户的问题
在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进程,并且设置内存限制参数