How to Install MongoDB on CentOS7 Gracefully

来源:互联网 发布:巨人网络借壳上市分析 编辑:程序博客网 时间:2024/05/22 06:28

倒腾MongoDB好几天,强迫症的老人家发现了这些问题:

  • 其实安装MongoDB不难,但是有没有发现启动起来很麻烦?关闭看进程号,再kill掉T…T

  • 有没有更加gracefully使用MongoDB?

  • 能不能让它随着服务器启动而启动?或者是我想让它启动再启动?

安装环境

还是那句老话,不讲环境的安装教程都是耍流氓~
系统安装环境

安装MongoDB

下载官方安装源

官方下载地址
选择自己合适的版本
根据自己是CentOS7,选择了
RHEL 7 Linux 64-bit x64

CentOS全名为“社区企业操作系统”(Community Enterprise Operating System)
Red Hat Enterprise Linux(缩写为RHEL,Red Hat的企业版)。RedHat Enterprise Linux又分为4个版本 Advanced Server(AS)、ES Workstation(WS)、Desktop,它们的差别不太大,只是功能方面的差别。Advanced Server,缩写即AS。AS在标准Linux内核的基础上,做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。
RHEL 在发行的时候,有两种方式。一种是二进制的发行方式,另外一种是源代码的发行方式。无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布。RHEL 一直都提供源代码的发行方式,CentOS 就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本。由于 LINUX 的源代码是 GNU,所以从获得 RHEL 的源代码到编译成新的二进制,都是合法。只是 REDHAT 是商标,所以必须在新的发行版里将 REDHAT 的商标去掉。
**就是,CentOS是相应版本RHEL的二进制版本。**CentOS7对应的是RHEL7的二进制发行版本。

解压与安装

tar zxvf mongodb-linux-x86_64-rhel70-3.2.10.tgzmv mongodb-linux-x86_64-rhel70-3.2.10 /usr/localcd /usr/localmv mongodb-linux-x86_64-rhel70-3.2.10 mongodb

解压–>将安装包移动到合适的安装路径 –>进入安装路径–>安装包重命名

启动mongodb服务

mongo启动路径

sudo mkdir -p /var/mongodb/data /var/mongodb/logs/mongoLog.logsudo /usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath=/var/mongodb/logs/mongoLog.log --fork

在执行sudo /usr/local/mongodb/bin/mongod保证具有x(执行权限),否则需要添加执行权限:

sudo chmod a+x /usr/local/mongodb/bin/mongod

有没有发现要启动Mongo的服务要写好长T…T
假如要关闭服务
sudo /usr/local/mongodb/bin/mongod --shutdown
也很长,有没有更好的更优雅的使用方式呢?

到这一步,mongoDB已经可以执行使用了,但是这样使用起来会比较麻烦,所以可以考虑一个更加快捷安全的使用方式

配置文件

sudo mkdir /usr/local/mongodb/etcsudo vim /usr/local/mongodb/etc/mongodb.conf

mongodb.conf
搞清楚参数之后,完完全全可以按需写配置文件
配置参数释义

编写启动/暂停mongo脚本

sudo mkidir /usr/local/mongodb/srvsudo vim /usr/local/mongodb/srv/mongodb-start

这里写图片描述
mongod指令参数解释:-f 运行配置文件

sudo vim /usr/local/mongodb/srv/mongodb-stop

mongodb-stop
最后记得添加可执行权限

sudo chmod a+x /usr/local/mongodb/srv/mongodb-stop /usr/local/mongodb/srv/mongodb-start

添加mongo服务

vim /etc/rc.d/init.d/mongodb

mongodb服务脚本

test -x $DAEMON || exit 0 #判断当前文件是否可执行,否则退出set -e #设置了这个选项后,当一个命令执行失败时,shell会立即退出。

在/etc文件夹下,执行ls -d rc*,会列出下面这些文件和目录:
rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.d rc.local
\根据RunLevel执行rc 。rc脚本会到相应的rcN.d中去执行下面的脚本。rc.local是最后调用的脚本,可以放一些用户自定义的任务在里面。

现在一切都清晰了。我们可以通过在相应的rcN.d文件夹下按既定的规范创建/etc/init.d下脚本的软链接的方式来控制系统启动和退出时服务的启动和结束。但是用手动的方式创建软链接来管理毕竟不方便,RedHatLinux提供了chkconfig来帮助创建这些软链接。只要放在/etc/init.d下的服务控制脚本符合前面提到的chkconfig的约定(注释chkconfig 和 description),就可以用chkconfig –add chkconfig –list chkconfig –del 等命令来控制service的启动与否。

chmod a+x /etc/rc.d/init.d/mongodbchkconfig --add mongodbchkconfig --level 345 mongodb on

快捷启动

sudo ln -s /etc/rc.d/init.d/mongodb /usr/bin/mongodb

启动mongodb服务
启动服务
终止mongodb服务
停止服务

有时候还需要使用到mongo的命令行窗口,接着之前的文章Linux快速启动应用程序,也给mongo的命令行添加一个软连接

sudo ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo

进入mongo shell状态
mongo shell
warning暂时没有威胁到使用,所以就暂时搁置了

知识补充(待更)

============2016.11.17更新补充=============

chkconfig --level 345 mongodb on 

到底发生了什么?可以看看/etc/rc.d/的目录结构

ls -R /etc/rc.d/

rc.d-1
rc.d-2

看到这里有那么几个问题:
- rcN.d是什么?
- SNNXX,KNNXX又是什么?
所以需要搞清楚以下几个问题,让它成为“common sense”^_^

Linux启动过程中的/etc/rc.d

这里,只讲解涉及到/etc/rc.d的部分,linux的启动过程是门艺术

  • init.d/ :各种服务器和程序的二进制文件或脚本的存放目录。执行这些脚本可以用来启动,停止,重启这些服务。

  • rcN.d/:各个启动级别的执行程序连接目录。rcN.d/目录之下放的其实是真正启动程序的软连接,真正的启动程序一般存放于/etc/rc.d/init.d/之下

  • rc.local 链接文件,指到/etc/rc.d/rc.local。是系统初始化及服务均启动完毕后,最后执行的一个脚本,一些简单的脚本可以放到其中

CentOS启动后在/etc/rc.d的执行顺序如下:

/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 ,根据$RUNLEVEL调用相关启动脚本,以启动相应的系统服务/etc/rc.d/rc.local  #其他一些系统设置,最终完成系统启动

运行级别

Run level Name Description 0 Halt 关机时进入 1 Single-user mode 超级用户模式,在系统启动出出错、文件系统出错等情况下进入 2 Multi-User Mode(without networking) 多用户模式,如果你没有网络接口可以配置进入此模式 3 Multi-User Mode 多用户模式 4 Not used/user definable 保留,用户也可以使用该运行级别来自定义自己的需求 5 GUI mode 图形界面模式 6 Reboot 重启时进入 s or S Single-user/Maintenance mode 特殊用途

K与S

带K的表示停止(Kill)一个服务,S表示开启(Start)
K和S后面带的数字是用来排序,决定这些脚本执行的顺序,数值小的先执行,数值大的后执行。
比如,当运行级别是4,会先开启network,再开启MongoDB
这里写图片描述

S给和K还分别给init.d下面的脚本传递了start和stop的参数。传S时相当于执行了/etc/rc.d/init.d/xxx start这条命令,K就相当于/etc/rc.d/init.d/xxx stop了。

参考目录

https://docs.mongodb.com/manual/tutorial/
http://monklof.com/post/14/
http://www.cnblogs.com/balaamwe/archive/2012/01/16/2323665.html
https://my.oschina.net/pwd/blog/399374
http://www.haorooms.com/post/3m

0 0
原创粉丝点击