一、版本
Ubuntu 16.04 LTS
MongoDB V3.6.3
二、安装
1、最新的社区版,可参考官方说明进行安装;
2、卸载老版本:
(1)如果是在ubuntu的软件源中安装的,那么用sudo apt remove mongodb-server;
(2)如果是添加了mongodb官方提供的源,那么用sudo apt remove mongodb-org*
三、配置文件
按照上述方法安装的话,新版本的mongod和mongo都安装在/usr/bin目录下;
同时,会在/etc下安装配置文件mongod.conf;
还有,会有一个软链接/etc/systemd/system/multi-user.target.wants/mongod.service,链接指向/lib/systemd/system/mongod.service;
自己开发、测试用的ubuntu系统/var目录一般不会独立分区,所以不太喜欢把mongodb数据库和log日志保存在默认的/var目录下,因此需要通过配置文件指定;
以下是指定这两个目录需要改动配置文件/etc/mongod.conf的地方:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /home/moqsien/mydata/mongoData/ # 改成你自己的目标目录,用于存储数据库
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true # 每次都在日志文件末尾追加日志,而不是新建日志文件或覆盖原来的日志文件
path: /home/moqsien/mydata/mongoData/log/mongod.log # 改成你自己的目标目录,用于存储日志文件
# network interfaces
net:
port: 27017 # 绑定端口, 27017为默认值
bindIp: 127.0.0.1 # 绑定IP,这里用本地IP
processManagement:
fork: false # 关闭多进程,也可以开启,默认为开启
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
四、更改文件夹权限
打开/lib/systemd/system/mongod.service系统服务文件,做一点改动,主要是User和Group:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=moqsien # 改成你登录Ubuntu的用户名
Group=moqsien # 同上
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf # 在本行加上--auth, 可开启数据库权限限制
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Transparent_hugepages disabled # 取消Linux的透明大页内存设置
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
再将第三步中设置的保存数据库和日志的文件夹的拥有者设置为与User和Group对应的值:
sudo chown -R moqsien:moqsien /home/moqsien/mydata/mongoData
四、启动mongodb服务进行测试(此时在用mongo命令测试时,会有几个WARNING)
1、重载daemon:sudo systemctl daemon-reload
2、激活mongod服务:sudo systemctl enable mongod
3、开启mongod服务:sudo systemctl start mongod
4、查看mongod服务状态:sudo systemctl status mongod
如果看到Active,表明上述设置完成,例如:
mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2018-04-04 19:19:48 CST; 22min ago
Docs: https://docs.mongodb.org/manual
Process: 1231 ExecStartPre=/bin/sh -c echo never > /sys/kernel/mm/transparent_hugepage/defrag (cod
Process: 1201 ExecStartPre=/bin/sh -c echo never > /sys/kernel/mm/transparent_hugepage/enabled (co
Main PID: 1245 (mongod)
CGroup: /system.slice/mongod.service
└─1245 /usr/bin/mongod --quiet --config /etc/mongod.conf --auth
五、禁用Transparent_HugePages以及开启数据库权限功能Auth
1、禁用Transparent_HugePages
在/lib/systemd/system/mongod.service的[service]下面添加以下三行(在第三步中有体现):
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
2、开启数据库权限认证功能Auth
清除数据库保存目录下的所有旧文件(如果日志文件保存在此,日志文件不必清除),重启系统,这时候mongod服务是以无权限限制模式开启的,可以大致按照官方文档设置。
比如,mongo默认的port就是27017,那么我们不需要用mongo --port 27017,直接mongo就好;
比如,user和pwd可以自己设置值;
设置好了之后,退出mongo,瞄一眼数据库保存目录中是不是产生很多新文件,如果是,基本是OK的;
然后,打开/lib/systemd/system/mongod.service系统服务文件,对执行程序的那一行做如下修改:
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf --auth # 在本行加上--auth, 可开启数据库权限限制
因为我们先去将mongod服务放置到了系统服务之中,所以,做完上面的工作,我们可以再重启一下,来测试我们的设置是否能够正常工作;
重启之后,运行下面的命令:
mongo -u "你设置的用户名" -p "你设置的密码" --authenticationDatabase "admin"
如果成功,你可以看到没有任何WARNING:
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
>
3、关于XFS分区格式的WARNING:
这是WARNING推荐使用的分区格式,可以暂时不用理会,在生产环境中再来考虑。
六、注意事项
1、若MongoDB更新之后,上述过程中的mongod.service文件需要从新设置,数据库文件夹下的原来的数据库文件也需要删除,然后MongoDB才能继续以系统服务身份启动!