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. k8s kubectl edit 方式修改 nodeport 的端口

    0. 买了一本 每天五分钟玩转 k8s 还有 刚才转帖的blog 里面有一个 kubectl edit 的语法能够在线更改端口号 ,之前一直没弄明白. 刚才做了下实验.发现很好用 这里记录一下. 1. ...

  2. SQL 中LTrim、RTrim与Trim的用法

    LTrim.RTrim与 Trim 函数 返回 Variant (String),其中包含指定字符串的拷贝,没有前导空白 (LTrim).尾随空白 (RTrim) 或前导和尾随空白 (Trim).语法 ...

  3. Java之递归遍历目录,修改指定文件的指定内容

    EditProperties.java package PropertiesOperation.Edit; import java.io.File; /** * 替换指定Porpoerties文件中的 ...

  4. Codeforces 1097 G. Vladislav and a Great Legend

    题目链接 一道好题. 题意:给定一棵\(n\)个点的树,求: \[\sum_{S\subseteq \{1,2,\dots,n\}}f(S)^k\] 其中\(f(S)\)代表用树边将点集\(S\)连通 ...

  5. djang-rest-framework学习-day1

    1.老套路:setting 设置复制粘贴!,必要库的安装: 一些库安装失败的解决办法:在 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 上找到下载,然后使用用 ...

  6. 【BZOJ1306】[CQOI2009]循环赛(搜索)

    [BZOJ1306][CQOI2009]循环赛(搜索) 题面 BZOJ 洛谷 题解 爆搜一下,\(hash\)记录是否已经考虑过这个状态,记忆化解决问题. #include<iostream&g ...

  7. 手速太慢QAQ

    显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...

  8. codeforces906 D

    题目链接:http://codeforces.com/contest/906/problem/D 题意: 给你n个数,再给你l~r,求%m 题解: 一开始不会 后来查到了欧拉降幂定理: 然后就会了 这 ...

  9. How to 对拍?

    对拍从数学的统计学角度来说是一个好的方法,至少能在你竞赛中帮你拿回一些分--yzr大牛pas的对拍一开始还没写过,突然想学一下对拍.那么就学吧.dp水题(搜索):https://www.luogu.o ...

  10. 【转】MPU6050的数据获取、分析与处理

    摘要 MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度.由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各 ...