mongodb 启动警告

Mongodb 启动警告

Mongodb在启动时会发出若干的警告,今天好好看了下网上大牛们的讨论,发现这些警告很可能会是以后问题的导火索。遂,一个个慢慢解决。

在没有完全进行任何处理的情况下,启动mongo,提示如下:

Server has startup warnings:

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten]

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten] ** WARNING: Insecure configuration, access control is not enabled and no --bind_ip has been specified.

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted,

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten] **          and the server listens on all available network interfaces.

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2016-09-17T18:28:05.646+0800 I CONTROL  [initandlisten]

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten]

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten]

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten]

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2016-09-17T18:28:05.647+0800 I CONTROL  [initandlisten]

问题如下:

1、  没有使用-bind ip

2、  读写没有限制

3、  服务器监听所有网络中的可用端口

4、  使用root用户

5、  建议使用 numactl –interleave选项

6、  建议关闭大页面内存

 

从后往前走,解决大页面内存。

1、  hugepage

消耗大内存,关闭方法:

echo never >/sys/kernel/mm/redhat_transparent_hugepage/enabled

echo never>/sys/kernel/mm/transparent_hugepage/defrag

 

查看配置后的

cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

已经是never

那么大内存是什么?没有swap,块表的负载减轻。但是很多配置都需要手动的配置,在mongodb中非常的不推荐。占用的内存过大。有一个非常值得注意的地方,在3.0以上cache的size是默认的一半的系统内存。一旦你尝试在一台电脑中运行两个shard的时候,内存分分钟会爆了。

2.numactl –interleave

  首先了解NUMA,它是一种多核CPU架构,每个CPU都访问自身的内存插槽,但是访问其他的节点会非常慢。一个数据库进程是非常耗内存的,因此在NUMA架构下,会经常出现swap页面的情况。命中率过低,swap的速度也很慢。但是其他的节点却在空闲的状态。

使用numactl指定进程的策略,允许从其他节点分配内存。因此,在启动的时候,我们的命令为:

numactl –interleave=all mongod –f /etc/mongodb/mongodb_s0.conf

3.访问控制

在集群搭建的时候,因为服务器硬盘资源的原因,所以,我采用的是:

serverA:mongos+config+shard0

serverB:mongos+config+shard1

serverC:mongos+config+shard2

 在3台服务器中跑数据存储层的代码。为admin中分配一个只有我使用的账号,包括的权限有用户管理、集群管理等。在数据库中为其它用户分配的是一个普通的账号,可读可写。当然也可以用特权进行授予只有若干表的查看权限。

use admin

db.createUser({

         user:"XXX",

         pwd:"XXX",

         roles:[

         {role:"clusterAdmin",db:"admin"},

         {role:"dbOwner",db:"admin"},

         {role:"dbOwner",db:"test"}

         ]

})

 

use test

db.createUser({

         user:"XXX",

         pwd:"XXX",

         roles:[

         {role:"readWrite",db:"test"}

         ]

})

在分配权限的时候,尤其是我们搭建分片集群的时候,有时候希望去查看shard中的数据,那么你必须在shard中也加入用户的权限,否则如果你使用的是mongos配置的权限,你将无法进入。

你可能感兴趣的:(mongodb数据库)