好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mongodb部署

mongodb部署

一、简单启动

举例:

./mongod --dbpath / var /lib/mongodb/ --port  12345 

这中方法相对比较简单,这里不做具体的阐述,查看下面的文档即可

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

二、master-slave

     1. 运行脚本脚本:

$ cd ~/apps
$ wget http: // fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.3.tgz
$ tar zxvf mongodb-linux-x86_64-1.8.3.tgz
$ mv mongodb-linux-x86_64-1.8.3 mongodb
# master
./mongodb/bin/mongod --master --port 7891 --dbpath=/home/zhujiadun.pt/mongodbdata/master_slave/master/ --logpath=/home/zhujiadun.pt/mongodbdata/master_slave/master.log --fork
# slave 10 sec sync
./mongodb/bin/mongod --slave --port 7892 --source 10.232.36.110:7891 --slavedelay 10 --dbpath=/home/zhujiadun.pt/mongodbdata/master_slave/slave/ --logpath=/home/zhujiadun.pt/mongodbdata/master_slave/slave.log --fork

复制代码

      --fork:让mongodb以后台守护进程的方式运行。 作用相当于:

nohup ./mongodb/bin/mongod --master --port 27017 --dbpath=$HOME/data/mongodb --logpath=$HOME/data/mongodb.log &

复制代码

      主备指定的数据文件地址(--logpath)必须是不同的,而且贮备都提供一个对外的端口号,以便监控相关情况。

      一个小技巧:http的监控接口是(mongodb端口+1000),比如默认创建的MongoDB服务监听的是27017端口,而28017(监听端口+1000) 是web admin interface 监听端口,这个28017就是Http Console监控端口。 

      2. 查看主备效果

     主库插入:

     

     备库查询:

    

    

    主服务器可以通过自己local库的slave集合查看从服务器列表

    从服务器可以通过自己local库的source集合查看主服务器信息或维护多个主服务器。 (一个slave服务器可以服务多个master服务器)

三、Replica Set(副本集)

    启动脚本:

#start node1 mongodb
./mongodb/bin/mongod --dbpath=/home/zhujiadun.pt/mongodbdata/replica_set/node1/ --logpath=/home/zhujiadun.pt/mongodbdata/replica_set/node1.log --port 10001 --replSet blort/10.232.36.110:10002 --fork
#start node2 mongodb
./mongodb/bin/mongod --dbpath=/home/zhujiadun.pt/mongodbdata/replica_set/node2/ --logpath=/home/zhujiadun.pt/mongodbdata/replica_set/node2.log --port 10002 --replSet blort/10.232.36.110:10001 --fork
#start node3 mongodb
./mongodb/bin/mongod --dbpath=/home/zhujiadun.pt/mongodbdata/replica_set/node3/ --logpath=/home/zhujiadun.pt/mongodbdata/replica_set/node2.log --port 10003 --replSet blort/10.232.36.110:10001 --fork

复制代码

    启动第三个结点时,副本集有一个亮点就是有自动检测功能:在其中指定单台服务器后,MongoDB就会自动搜索并连接其余的结点。

    启动几台服务器之后,日志会会告诉你副本没有进行初始化,因为还差最后一步:在shell初始化

# init the configure
./mongodb/bin/mongo 10.232 . 36.110 : 10001 /admin
db.runCommand({ " replSetInitiate " :{
" _id " : " blort " ,
" members " : [
{
" _id " : 1 ,
" host " : " 10.232.36.110:10001 "
},
{
" _id " : 2 ,
" host " : " 10.232.36.110:10002 "
},
{
" _id " : 3 ,
" host " : " 10.232.36.110:10003 "
}
]
}})

复制代码

     举例:

        

     

     连接这个mongodb集群:

./mongodb/bin/mongo  10.232 . 36.110 : 10001 , 10.232 . 36.110 : 10002 , 10.232 . 36.110 : 10001 
MongoDB shell version: 1.8 . 3
connecting to: 10.232 . 36.110 : 10001 , 10.232 . 36.110 : 10002 , 10.232 . 36.110 : 10001 /test
Tue Feb 21 14 : 17 : 57 SyncClusterConnection connecting to [ 10.232 . 36.110 : 10001 ]
Tue Feb 21 14 : 17 : 57 SyncClusterConnection connecting to [ 10.232 . 36.110 : 10002 ]
Tue Feb 21 14 : 17 : 57 SyncClusterConnection connecting to [ 10.232 . 36.110 : 10001 ]
blort:PRIMARY>

复制代码





官方文档:

http://www.mongodb.org/display/DOCS/Replication

连接mongodb的方法:

http://www.cnblogs.com/pipizhu/archive/2011/08/08/2130966.html

nodejs对文件的读写还是相当灵活的,可以根据不同的场景来选择不同的方法,具体可以参见: Nodejs fs

      一.直接操作文件

     最简单的两个 fs.readFile 和 fs.writeFile

   举例:这个程序的功能是将一个比较大json格式的文件转换成你想自己要格式的文件。

 var  fs = require('fs');
fs.readFile('./json.json', function (err,data){
if (err) throw err;

var jsonObj = JSON.parse(data);
var space = ' ';
var newLine = '\n';
var chunks = [];
var length = 0;

for ( var i=0,size=jsonObj.length;i<size;i++){
var one = jsonObj[i];
// what value you want
var value1 = one['value1'];
var value2 = one['value2'];
....
var value = value1 +space+value2+space+.....+newLine;
var buffer = new Buffer(value);
chunks.push(buffer);
length += buffer.length;
}

var resultBuffer = new Buffer(length);
for ( var i=0,size=chunks.length,pos=0;i<size;i++){
chunks[i].copy(resultBuffer,pos);
pos += chunks[i].length;
}

fs.writeFile('./resut.text',resultBuffer, function (err){
if (err) throw err;
console.log('has finished');
});

});

复制代码

       它的原理是将文件数据一次性全部读入内存,优点就是接下来都是在内存的操作,速度会很快。但缺点也很明显,就是当文件非常大时,会造成内存溢出。  

    

        二. 使用文件流

   2.1 读取文件,api相见: fs.createReadSream  和   fs.createWriterStream

       以下代码实现的功能就是通过文件流来实现图片的复制:

 var  fs = require('fs');
var rOption = {
flags : 'r',
encoding : null ,
mode : 0666
}

var wOption = {
flags: 'a',
encoding: null ,
mode: 0666
}

var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);

fileReadStream.on('data', function (data){
fileWriteStream.write(data);

});

fileReadStream.on('end', function (){
console.log('readStream end');
fileWriteStream.end();
});

复制代码

       这里再补充在流中非常有用的一个函数: pipe ,它以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。使用起来非常方便,依然实现上例中的功能:      

 var  fs = require('fs');

var fileReadStream = fs.createReadStream('./myjpg.jpg');
var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
fileReadStream.pipe(fileWriteStream);

fileWriteStream.on('close', function (){
console.log('copy over');
});

复制代码

       用这个函数可以轻松地实现一个静态资源服务器:

 var  http = require("http");
var fs = require("fs"),
var path = require("path"),
var url = require("url");

var server = http.createServer( function (req, res) {
var pathname = url.parse(req.url).pathname;
console.log(pathname);
var filepath = path.join("./tmp", "wwwroot", pathname);
console.log(filepath);
var stream = fs.createReadStream(filepath, {flags : "r", encoding : null });
stream.on("error", function () {
res.writeHead(404);
res.end();
});
stream.pipe(res);
});
server.on("error", function (error) {
console.log(error);
});
server.listen(8088, function (){
console.log('server listen on 8088');
});

复制代码

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于mongodb部署的详细内容...

  阅读:43次