初始安装的MongoDB启动通常会有以下4类报警信息:
1. WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2. WARNING: Access control is not enabled for the database.
3. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
4. WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
问题1: WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
此报警属于操作系统文件格式的问题,不影响正常使用。
解答:
当在生产环境的Linux系统,内核版本至少为2.6.36,使用ext4或者xfs文件系统。若可能的话尽量搭配
xfs和mongoBD使用。
使用WiredTiger存储引擎强烈推荐XFS,可以避免ext4和wiredtiger搭配的性能问题;
使用MMAPv1存储引擎,MongoDB会在使用前预先分配数据文件并通常创建大的文件。
也推荐使用XFS搭配MongoDB使用。
通常使用xfs文件系统至少保持Linux kernel 版本为2.6.25及以上;
若使用EXT4文件系统至少使用Linux kernel版本为2.6.28及以上;
若使用CentOS和RHEL Linux kernel版至少为2.6.18-194。
注释:在MongoDB4.0版本MMAPv1存储引擎已经废弃,将来会移除,推荐使用WiredTiger存储引擎。
参考:
https://docs.mongodb.com/manual/administration/production-notes/#kernel-and-file-systems
问题2:WARNING: Access control is not enabled for the database.
此告警信息是说MongoDB需要有一个安全库来开启数据库访问控制,默认安装的启动的是mongod --dbpath /var/lib/mongo
此时无须用户认证登录的信息。
解决办法:
在MongoDB部署上启用访问控制会强制执行身份验证,要求用户识别自己。当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root",roles: [{role:"userAdminAnyDatabase", db: "admin" } ]})
创建用户和密码均为root,具有全部的权限。
重启mongoDB 使用用户名和密码登录:
#systemctl stop mongod
#mongod --auth --dbpath /var/lib/mongo
# mongo --username root --password root --port 27017 --authenticationDatabase admin
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 4.0.1
>
添加额外的账号信息:
use test
db.createUser(
{
user: "test",
pwd: "test",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
登录测试验证:
# mongo --username test --password test --port 27017 --authenticationDatabase test
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 4.0.1
问题3:WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
这两个问题是CentOS7特有的,因为从CentOS7版本开始会默认启用Transparent Huge Pages(THP)
Transparent Huge Pages(THP)本意是用来提升内存性能,但某些数据库厂商还是建议直接
关闭THP(比如说Oracle、MariaDB、MongoDB等),否则可能会导致性能出现下降。
--查看:
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
--修改系统配置加入如下配置重启操作系统:
# vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
#shutdown -r
或者
#reboot
问题4:允许MongoDB远程访问。
#cat /etc/mongod.conf
...
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
默认的配置只允许本地访问,若允许所有主机访问可以将bindIp设置为0.0.0.0,但是这样并不安全,
可以开启外网访问密码验证。
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled