Ubuntu 16.04 (阿里云ECS),MongoDB 4.0,

原来,已经写了10篇MongoDB的随笔了。可是,自己居然没有使用配置文件启动过MongoDB,对其更多的配置是不明白的。

昨天(180808)花了一些努力,终于,实现了使用配置文件启动MongoDB、并且改进了随机启动脚本,本文便是对此过程进行的记录。

注意,安装方式很关键!安装方式不同,可能会和本文介绍的内容存在差别,请读者自行判别。本文使用的安装方式Install MongoDB Community Edition on Ubuntu,其中的Using .deb Packages (Recommended)。

新发现,终于知道自己为何可以在ECS上率性用上使用配置文件启动MongoDB了!原来,在其/etc目录中存在一个mongod.conf文件:

$ ls -l mongod.conf
-rw-r--r-- 1 root root 626 Jun 22 10:19 mongod.conf

本地开发环境和ECS都是使用相同的安装方式,可是,刚刚检查本地系统时却没有找到/etc/mongod.conf文件,检查ECS上的mongod.conf的建立时间发现其建立时间为Jun 22,那个时候俺还没有购买ECS呢!运气!哎,总靠运气学习软件、开发、编程可不是好事啊!学习,需要的是dig,不断dig!

旧方式

安装完毕后,mongod、mongo等命令会出现在/usr/bin中,可以使用whereis命令查看(命令很多,本文仅涉及到其中的mongod、mongo)。

由于安装后/etc/下没有配置文件,于是,自己一直使用命令行方式启动MongoDB服务器。

后来,将MongoDB服务器启动命令加入到了启动脚本——简单粗糙版:

在/etc/init.d/中建立MongoDB服务器的启动脚本,并手动在/etc/rc3.d/中建立脚本的软连接(此时根本不知道什么LBS信息,启动脚本的编写规范,直到现在自己也只是知道皮毛)。

下面是旧方式的启动脚本mongo01:

 #!/bin/sh

 # START MongoDB
# Data Directory: /home/log/ws/mdb/data0725 # Only can be accessed from localhost/127.0.0.1
# Use the default port
mongod --dbpath /home/username/ws/mdb/data0725 --logpath /home/username/ws/mdb/data0725/log --logappend --auth --directoryperdb &

前面看过的一篇博文中讲,要是启动脚本中没有LBS信息的话,可能会导致服务无法启动。还好,在上面的MongoDB服务启动时一直是成功的。

注意,末尾添加 空格、&符号。

在代表运行级别3的/etc/rc3.d/目录中建立启动脚本的软连接。

重启,可以发现MongoDB服务器已经启动了,如下:

sudo netstat -antp | grep mongod

ps -ef | grep mongod

做完上面的操作后,启动MongoDB服务器的脚本已经被添加为Linux服务了。

还可以使用service --status-all查看脚本对应服务的运行状态:

[ + ] mongo01

中括号中是+号,表示服务已启动。

从启动脚本可以看到,数据文件存放于家目录下的,日志文件也是存放于其中。

在MongoDB服务器的启动被添加为Linux服务后,默认是使用root账户启动的——可以看到ps -ef显示进程的用户为root,这样的权限太高,需要限制。

而自己之前使用登录账号启动MongoDB时,MongoDB的进程为登录账号。

Linux账号、进程、进程相关的资源——各种文件(包括文件夹)之间存在什么关系呢?

最佳实践是怎样的?配置文件放哪里、数据文件放哪里、日志文件放哪里、PID文件放哪里、其它文件?

之前使用netstat -ano | grep mongod命令时,还可以看到一个/tmp/mongodb-27017.sock文件,这个文件又是做什么用的呢?

总之,对于旧方式自己还是不太放心的,还需要改进,更专业的改进——把东西放到对的位置、安全的位置。

新方式

介绍在阿里云ECS上使用部署。

前面说了,在/etc/目录下发现了一个mongod.conf文件——一个很好的起点,试着用这个文件启动MongoDB服务,是可以的。

不过,看到Nginx等在/etc/中都有自己的目录,于是,新建了mongod目录,并把/etc/中的mongod.conf拷贝了进取,再按照自己的需要改改改。

首先要考虑的是数据库存放位置,孤选择了/home/目录下建立一个mdb目录,再在里面建立各种MongoDB数据库存放文件夹(放在/var/目录下也可以吧?还是推荐方案?默认是放到/data/目录下,可是,没有/data/目录)。

$ ls -l /home/mdb/
total 4
drwxr-xr-x 7 root root 4096 Aug 8 18:04 data0802

/home/mdb/下的data0802就是孤存放数据库的目录了,日志文件存放在/var/log/mongodb/目录下,日志文件名和配置文件名同名——参考了uWSGI服务器的日志文件命名。

还有PID文件,放到了/run/目录下,也应该和配置文件同名(不包括扩展名)(/run/目录下是否也建立一个mongodb目录呢?)。

因此,有下面几个文件是需要关注的:

/home/mdb/data0802

/etc/mongod/data0802.conf

/var/log/mongodb/data0802.log

/run/data0802.pid

配置文件如下:

# 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/mdb/data0802
journal:
enabled: true
directoryPerDB: true
# engine:
# mmapv1:
# wiredTiger: # where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/data0802.log # network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # how the process runs
processManagement:
fork: true
pidFilePath: /run/data0802.pid
timeZoneInfo: /usr/share/zoneinfo # set auth?
setParameter:
enableLocalhostAuthBypass: false security:
authorization: enabled #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:

在配置随机启动前,使用mongod测试下上面的配置文件吧!因为是在/etc/目录下,所以,需要添加sudo!

注意,在执行前请确保没有其它MongoDB服务在运行,或者,不会和配置文件中描述的发生冲突。

$sudo mongod -f /etc/mongod/data0802.conf

注意,上面的配置文件用了绝对路径。

不出意外,运行成功!

需要注意上面的配置文件中紫色的部分,那是自己在默认的配置文件上后来添加的,因为启动时遇到了很多警告或错误信息:

directoryPerDB: true

fork: true

security:

authorization: enabled

可以从参考链接MongoDB Configuration File Options中找到它们代表的意义。

命令行启动的参数 和 配置文件中的配置项 有对应关系,是否一一对应,暂不确定,,而且两者的写法也不太一样。

比如,上面配置文件中的authorization:enabled,在命令行中只要写为--auth即可。

fork: true表示后台启动?其具体意义还需要dig。

不过,仍然坚定支持配置文件方式启动。对于命令行中的选型对应的配置文件选项, 咱可以去参考的官文链接中去 查找——目前来看很easy。

下面,配置随机启动MongoDB服务——和旧方式是不同的。

在/etc/init.d/目录中建立启动脚本mongodb,如下:

 #!/bin/bash
### BEGIN INIT INFO
# Provides: mongodb
# Required-start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: starts the mongodb daemon
# Description: starts mongodb using start-stop-daemon
### END INIT INFO mongod -f /etc/mongod/data0802.conf &

说明,没有sudo,使用了绝对路径,命令后面跟着 空格、&符号。

注意,启动脚本中的LBS信息尚不确定,请大家谨慎使用。

再使用update-rc.d命令安装此启动脚本即可,安装后,Linux服务就多了一项mongodb了!可以使用命令service --status-all查看其状态。

安装启动脚本:

sudo update-rc.d mongodb defaults 10

好了,重启,重启后可以看到mongodb服务已经启动,使用mongo命令也可以连接到MongoDB服务。

如果服务没有启动,那一定是出现了故障了!那么,检查日志文件。日志文件在哪儿?/var/log/mongodb/data0802.log。

参考链接

MongoDB Configuration File Options

PID文件介绍

附录

1.命令行中使用配置文件启动时的一些输出

$ sudo mongod -f data0802.conf
2018-08-08T17:05:27.171+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 5858
child process started successfully, parent exiting

2.使用mongo链接MongoDB服务器的一些输出,其中的WARNING信息可以 促进 完善配置文件

$ mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
Server has startup warnings:
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten]
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 7856 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]

说明:

孤的配置文件中没有使用默认的WiredTiger存储引擎,而是使用了文件系统存储的方式,会比较低效;

WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

开始没有开启安全认证,后来添加了authorization: enabled选项,警告消失:

WARNING: Access control is not enabled for the database.

其它的WARNING尚未解决。

3.解决一下WARNING后使用mongo访问MongoDB服务器的输出

$ mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
>

后记

其实,新方式中的数据库文件夹早已存在了,并且已经建立了两个账号,在做本文实践时,直接拷贝了文件夹,结果,可以使用。只不过,因为之前没有选择WiredTiger存储引擎,所以,现在也是不可以的了。但是,通过数据导出、导入的方式可以将其中的数据转存到另一个支持WiredTiger存储引擎的数据库中。

fork配置项说明:fork server process

Enable a daemon mode that runs the mongos or mongod process in the background.

使得mongod、mongo在后台运行。

还有一个问题,怎么设置、选择启动MongoDB的用户和用户组呢?需要新建吗?怎么新建?

使用配置文件启动MongoDB的更多相关文章

  1. Docker实战(1):通过配置文件启动MongoDB

    系统环境:Centos7 MongoDB 4.0.0 创建文件 注意:创建文件全是为了Docker run做准备,文件所对应的路径需与下一步的映射路径所对应,路径可自我更改. mkdir mongo ...

  2. MongoDB 配置文件启动

    MongoDB 服务启动有两种方式:一种是直接命令启动,一种是通过配置文件启动 1.命令启动: mongod -dbpath C:\data\db -logpath C:\data\log\mongo ...

  3. 操作3 mongodb和mysql 开启慢查询日志 ,以及mongodb从配置文件启动

    1. mongodb从配置文件启动 创建配置文件:/usr/local/mongodb/etc/mongodb.conf 配置文件的内容为: #Directory and relavent set d ...

  4. MongoDB 通过配置文件启动

    mongod启动命令需指定一些参数启动服务,我们通过配置文件的方式配置这些参数加载配置. ./bin/mongod --config ./conf/mongodb.conf(或./bin/mongod ...

  5. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

  6. Windows下安装并启动mongodb

    一.Windows下mongodb的安装 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https ...

  7. nodeJS学习(7)--- WS开发 NodeJS 项目-节2 <安装&设置&启动 mongodb 数据库++遇到的问题>

    本文系统 win7 参考:http://lib.csdn.net/article/mongodb/58097  http://www.cnblogs.com/lzrabbit/p/3682510.ht ...

  8. linux安装启动mongodb

    1:下载 http://www.mongodb.org/downloads 在85机器上上传压缩包后解压缩. 首先在linux中解压缩安装程序 通过命令操作: 解压 tar -zxvf mongodb ...

  9. linux 下指定配置文件安装mongodb

    下载 官网下载地址:https://www.mongodb.com/try/download/community,并上传linux 服务器 二.mongon目录结构下 /data/mongo . lo ...

随机推荐

  1. 关于查询报表总是"超时已过期"的问题解决

    "超时已过期" 的问题一直在烦扰着我, 在查一些数据量比较大的表或者运行一些复杂存储过程的时候就会出现这个提示, 一开始是按下面的来设,有一些报表是可以正常查出来 a.在企业管理器 ...

  2. node之文件的静态资源的托管

    /** * 文件的静态资源托管 */ let express = require('express'); let path =require('path'); let app = express(); ...

  3. wifi 标准

    简介 https://smb.pconline.com.cn/1149/11491365.html

  4. wordpress 点击文章图片 不能编辑(chrome下面) wordpress Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 1.

    说明:在chrome下面,编辑文章插入的图片,点击到图片上面,没有菜单显示. 报错: tinymce.min.js:10 Uncaught DOMException: Failed to execut ...

  5. php学习目录

    前面的话 前端工程师为什么要学习php?是因为招聘要求吗?这只是一方面 一开始,我对学习php是抵触的,毕竟javascript已经够自己喝一壶的了,再去学习php,可能让自己喝醉.但是,在学习jav ...

  6. 【agc002f】Leftmost Ball(动态规划)

    [agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色 ...

  7. linux命令总结free命令

    free 命令是什么 free 命令是一个显示系统中空闲和已用内存大小的工具.free 命令的输出和 top 命令相似.大多数Linux发行版已经含有 free 命令. 如何运行 free 想要运行, ...

  8. Go 语言编程规范

    1. gofmt 命令 大部分的格式问题可以通过 gofmt 来解决,gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,所有格式有关问题,都以gofmt的结果为准.所以,建议 ...

  9. P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下的人找到区间[l,r]储物点的所有东西,清点完 ...

  10. Java基础-SSM之mybatis一对多和多对一关系映射

    Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建customers表: ...