原博文出自于:  http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/    感谢!

upstart封装mongodb应用为系统服务

ubuntu实用工具系列文章

操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-upstart-mongodb/

前言

本文将介绍封装mongodb应用为系统服务,mongod应用会像一个守护程序一样,被操作系统所管理。通过upstart以系统服务的方式管理mongodb应用。运维起来也会很容易!!

本次实验是针对单个进程mongodb的,如果是mongodb集群,效果会更加明显的。特别进程被非法停止后的自动重启功能,增加了系统的健壮性。

文章目录:

  1. mongodb环境介绍
  2. upstart任务脚本
  3. mongodb应用管理

1. Mongodb环境介绍

moive.me是一个nodejs应用,使用mongodb作为数据存储。nodejs开发请参考:从零开始nodejs系列文章

正常情况mongodb的启动命令
~ /usr/bin/mongod --config /etc/mongodb-moive.conf

为mongodb配置启动参数,配置文件mongodb-moive.conf

~ vi /etc/mongodb-moive.conf

dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb-moive.log
logappend=true
bind_ip = 127.0.0.1
port = 27017
journal=true
#fork=true #如果打开fork, 则upstart的stop,status命令失效。

上面的方式,应用程序会在当前的console界面中运行,一旦console结束,应用也会停止。我们改一下命令,让程序在后台运行。

~ /usr/bin/mongod --config /etc/mongodb-moive.conf &

这样程序就就在后台启动了。进程正常运行着,我也不用做太多的事情。

如果我想停止这个程序,怎么办呢? 找到mongod的系统进程,再杀死。如果我们系统中跑着多个mongod的进程,那么找起来也是一个工作量,而且如果杀错了进程,后果不堪设想。多进程的mongod请参考 MongoDB部署实验系列文章

如果moive的单个应用,能像系统服务一样,通过start, stop, status管理,那将会是多么方便的一件事啊!

2. upstart任务脚本

upstart的使用在 upstart把应用封装成系统服务 一文中已经介绍过了。

~ vi /etc/init/mongodb-moive.conf

description "mongodb moive.me"
author "bsspirit <http://blog.fens.me>" limit nofile 20000 20000 kill timeout 300 respawn
respawn limit 2 5 pre-start script
mkdir -p /var/lib/mongodb/
mkdir -p /var/log/mongodb/
end script start on runlevel [2345]
stop on runlevel [06] script
exec /usr/bin/mongod --config /etc/mongodb-moive.conf
end script

3. Mongodb应用管理

启动mongodb-moive应用,进程ID:2037


~ start mongodb-moive
mongodb-moive start/running, process 2037 ~ ps -aux|grep mongo
root 2037 0.7 1.5 705112 15960 ? Ssl 07:53 0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf

查看运行状态, 进程2037正常运行


~ status mongodb-moive
mongodb-moive start/running, process 2037 ~ mongo
MongoDB shell version: 2.0.4
connecting to: test > show dbs
local (empty)
nodejs 0.203125GB
session 0.203125GB

非法关闭测试:杀死nodejs应用进程2037,通过upstart管理,mongodb-moive应用会自动重启


~ kill -9 2037 #查看系统进程,发现进程ID变了
~ ps -aux|grep mongo
root 2054 2.0 1.5 638548 15872 ? Ssl 07:53 0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf #查看进程状态,进程ID确实变了,而且是自动完成的
~ status mongodb-moive
mongodb-moive start/running, process 2054 #命令进行mongo
~ mongo
MongoDB shell version: 2.0.4
connecting to: test > show dbs
local (empty)
nodejs 0.203125GB
session 0.203125GB

刚才mongod被进程杀死时的日志, 2037被杀死,2054自动重启。


***** SERVER RESTARTED ***** Sat Jun 22 07:53:35 [initandlisten] MongoDB starting : pid=2037 port=27017 dbpath=/var/lib/mongodb 64-bit host=li478-194
Sat Jun 22 07:53:35 [initandlisten] db version v2.0.4, pdfile version 4.5
Sat Jun 22 07:53:35 [initandlisten] git version: nogitversion
Sat Jun 22 07:53:35 [initandlisten] build info: Linux lamiak 2.6.42-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 BOOST_LIB_VERSION=1_46_1
Sat Jun 22 07:53:35 [initandlisten] options: { config: "/etc/mongodb-moive.conf", dbpath: "/var/lib/mongodb", journal: "true", logappend: "true", logpath: "/var/log/mongodb/mongodb-moive.log" }
Sat Jun 22 07:53:35 [initandlisten] journal dir=/var/lib/mongodb/journal
Sat Jun 22 07:53:35 [initandlisten] recover : no journal files present, no recovery needed
Sat Jun 22 07:53:35 [initandlisten] waiting for connections on port 27017
Sat Jun 22 07:53:35 [websvr] admin web console waiting for connections on port 28017
Sat Jun 22 07:53:38 [initandlisten] connection accepted from 127.0.0.1:37554 #1
Sat Jun 22 07:53:39 [conn1] end connection 127.0.0.1:37554 ***** SERVER RESTARTED ***** Sat Jun 22 07:53:56 [initandlisten] MongoDB starting : pid=2054 port=27017 dbpath=/var/lib/mongodb 64-bit host=li478-194
Sat Jun 22 07:53:56 [initandlisten] db version v2.0.4, pdfile version 4.5
Sat Jun 22 07:53:56 [initandlisten] git version: nogitversion
Sat Jun 22 07:53:56 [initandlisten] build info: Linux lamiak 2.6.42-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 BOOST_LIB_VERSION=1_46_1
Sat Jun 22 07:53:56 [initandlisten] options: { config: "/etc/mongodb-moive.conf", dbpath: "/var/lib/mongodb", journal: "true", logappend: "true", logpath: "/var/log/mongodb/mongodb-moive.log" }
Sat Jun 22 07:53:56 [initandlisten] journal dir=/var/lib/mongodb/journal
Sat Jun 22 07:53:56 [initandlisten] recover begin
Sat Jun 22 07:53:56 [initandlisten] info no lsn file in journal/ directory
Sat Jun 22 07:53:56 [initandlisten] recover lsn: 0
Sat Jun 22 07:53:56 [initandlisten] recover /var/lib/mongodb/journal/j._0
Sat Jun 22 07:53:56 [initandlisten] recover cleaning up
Sat Jun 22 07:53:56 [initandlisten] removeJournalFiles
Sat Jun 22 07:53:56 [initandlisten] recover done
Sat Jun 22 07:53:56 [websvr] admin web console waiting for connections on port 28017
Sat Jun 22 07:53:56 [initandlisten] waiting for connections on port 27017
Sat Jun 22 07:54:04 [initandlisten] connection accepted from 127.0.0.1:37559 #1
Sat Jun 22 07:54:56 [clientcursormon] mem (MB) res:47 virt:1008 mapped:160
Sat Jun 22 07:59:56 [clientcursormon] mem (MB) res:47 virt:1008 mapped:160
Sat Jun 22 08:00:25 [conn1] end connection 127.0.0.1:37559

正常关闭mongodb测试:通过stop命令


~ stop mongodb-moive
mongodb-moive stop/waiting ~ status mongodb-moive
mongodb-moive stop/waiting ~ ps -aux|grep mongo

正常关闭mongodb测试:通过mongo命令


~ mongo
MongoDB shell version: 2.0.4
connecting to: test > use admin
switched to db admin > db.shutdownServer()
Sat Jun 22 08:10:11 DBClientCursor::init call() failed
Sat Jun 22 08:10:11 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Sat Jun 22 08:10:11 trying reconnect to 127.0.0.1
Sat Jun 22 08:10:11 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Sat Jun 22 08:10:11 Error: error doing query: unknown shell/collection.js:151
>
bye ~ ps -aux|grep mongo
root 2332 0.6 1.5 705112 15960 ? Ssl 08:10 0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf

我们看们通过mongo的shutdownServer()命令,mongo也会重启,可能是runlevel的设置问题。我们选择要不要使用respawn的重启功能。

我们已经按照moive应用的需求,配置好了mongodb-moive启动程序。

系统运维也将变得如此简单。

转载请注明出处:
http://blog.fens.me/linux-upstart-mongodb/

转】upstart封装mongodb应用为系统服务的更多相关文章

  1. C#封装MongoDB工具类库

    什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩 ...

  2. 简单封装mongodb

    首先安装mongodb  npm i mongodb --save 简单封装,在modules目录下新建db.js var MongoClient=require('mongodb').MongoCl ...

  3. 基于官方驱动封装mongodb

    还是一如既往先把结构图放出来,上上个版本添加了redis的缓存,但是不满足我的需求,因为公司有项目要求是分布式所以呢,这里我就增加了mongoDb进行缓存分布式,好了先看结构图(1). 总的来说比较蛋 ...

  4. 封装MongoDB的 asp.net 链接类

    using System;using System.Collections.Generic;using System.Linq;using MongoDB; /// <summary>// ...

  5. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  6. node.js中文资料导航 Mark

    Node.js HomePage Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js ...

  7. 【干货分享】Node.js 中文资料导航

    这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...

  8. node.js中文资料导航

    以下资料来自gitHUb上面:https://github.com/youyudehexie/node123 Node.js HomePage Node官网七牛镜像 Infoq深入浅出Node.js系 ...

  9. 千里之行始于足下,node.js 资源中文导航

    响应@jiyinyiyong 号召,cnodjs 好的资源蛮多的,的确欠缺分类,在一群FAQ中,的确很容易沉下去,根据自己对node.js的理解,做成一个资源导航,PS:如果觉得合适,希望能够合并的c ...

随机推荐

  1. Android进阶图片处理之三级缓存方案

    图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...

  2. 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)

    各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...

  3. Ubuntu16.04 下python2 | python3

    在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...

  4. java读取Excel表格中的数据

    1.需求 用java代码读取hello.xls表格中的数据 2.hello.xls表格 3.java代码 package com.test; import java.io.File; import j ...

  5. Ant中批量调用TestNG的XML文件,并调用TestNgXlst生成漂亮的html测试报告

    from:http://blog.csdn.net/bwgang/article/details/7865184 1.在Ant中设置如下: <target name="run_test ...

  6. 初步学习C++中的继承关系

    继承机制是面向对象程序设计使代码能够复用的最重要的手段,它同意程序猿在保持原有类特性的基础上进行扩展,添加功能. 这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂 ...

  7. Docker vs. Kubernetes vs. Apache Mesos: Why What You Think You Know is Probably Wrong

    Docker vs. Kubernetes vs. Apache Mesos: Why What You Think You Know is Probably Wrong - Mesosphere h ...

  8. POJ2289 Jamie's Contact Groups —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-2289 Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 6 ...

  9. hihocoder 第二十五周 spfa 最短路

    其实hihocoder里的题目目前大都是模板题啊-.- 这周的是SPFA,暑假的时候有看过SPFA,不过一直用的都是Dijkstra,感觉spfa要更加简洁一点~~,今天找了一份之前一直都看不太懂所以 ...

  10. bzoj4390

    树上差分 感觉挺巧妙的... 每次更新就是在u,v上+1,x是lca(u,v),在x和fa[x]上-1,那么每个点的权值就是子树和,正确性yy一下就行了 不过树状数组的常数真是小,改成前缀和才快了20 ...