Ubuntu下MongoDB安装与配置并将其添加到系统服务

一、版本

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才能继续以系统服务身份启动!

你可能感兴趣的:(Linux,mongodb,database,ubuntu,linux,配置)