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. Alpha冲刺——day3

    Alpha冲刺--day3 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  2. 用prop还是attr

    jquery中attr和prop的区别   在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答 ...

  3. PHP操作Redis数据库常用方法

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis支持的数据类型有 Stirng(字符串), Lis ...

  4. Python Kivy 中文教程:安装(Windows)

    Kivy 是一套用于跨平台快速应用开发的开源框架,只需编写一套代码,便可运行于各大桌面及移动平台上(包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberr ...

  5. Linux vi中查找字符内容的方法

      使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容. 这时,使用查找功能尤为重要. 方法如下: 1.命令模式下输入“/字符串”,例如“/Section 3”. 2.如果查找下一个, ...

  6. Codeforces 600E Lomsat gelral(dsu on tree)

    dsu on tree板子题.这个trick保证均摊O(nlogn)的复杂度,要求资瓷O(1)将一个元素插入集合,清空集合时每个元素O(1)删除.(当然log的话就变成log^2了) 具体的,每次先遍 ...

  7. poj2828 Buy Tickets (线段树 插队问题)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22097   Accepted: 10834 Des ...

  8. 理解 Continuation

    理解 Continuation (2012-08-26 10:39:34)     终于,我也不能免俗地要来谈谈这几个 Schemer 的必谈话题(顺便山寨了一个标题). Scheme 是一门神奇的编 ...

  9. 洛谷P3703 [SDOI2017]树点涂色(LCT,dfn序,线段树,倍增LCA)

    洛谷题目传送门 闲话 这是所有LCT题目中的一个异类. 之所以认为是LCT题目,是因为本题思路的瓶颈就在于如何去维护同颜色的点的集合. 只不过做着做着,感觉后来的思路(dfn序,线段树,LCA)似乎要 ...

  10. BZOJ 3167: [Heoi2013]Sao

    3167: [Heoi2013]Sao Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 96  Solved: 36[Submit][Status][D ...