zoukankan      html  css  js  c++  java
  • 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.readFilefs.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');
    });
  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2361787.html
Copyright © 2011-2022 走看看