倒腾MongoDB好几天,强迫症的老人家发现了这些问题:
其实安装MongoDB不难,但是有没有发现启动起来很麻烦?关闭看进程号,再kill掉T…T
有没有更加gracefully使用MongoDB?
能不能让它随着服务器启动而启动?或者是我想让它启动再启动?
安装环境
还是那句老话,不讲环境的安装教程都是耍流氓~
安装MongoDB
下载官方安装源
官方下载地址
选择自己合适的版本
根据自己是CentOS7,选择了
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.tgz
mv mongodb-linux-x86_64-rhel70-3.2.10 /usr/local
cd /usr/local
mv mongodb-linux-x86_64-rhel70-3.2.10 mongodb
解压–>将安装包移动到合适的安装路径 –>进入安装路径–>安装包重命名
启动mongodb服务
sudo mkdir -p /var/mongodb/data /var/mongodb/logs/mongoLog.log
sudo /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/etc
sudo vim /usr/local/mongodb/etc/mongodb.conf
搞清楚参数之后,完完全全可以按需写配置文件
配置参数释义
编写启动/暂停mongo脚本
sudo mkidir /usr/local/mongodb/srv
sudo vim /usr/local/mongodb/srv/mongodb-start
mongod指令参数解释:-f 运行配置文件
sudo vim /usr/local/mongodb/srv/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
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/mongodb
chkconfig --add mongodb
chkconfig --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状态
warning暂时没有威胁到使用,所以就暂时搁置了
知识补充(待更)
============2016.11.17更新补充=============
chkconfig --level 345 mongodb on
到底发生了什么?可以看看/etc/rc.d/的目录结构
ls -R /etc/rc.d/
看到这里有那么几个问题:
- 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