• 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');
    });
  • 相关阅读:
    python—内置函数-filter,map,reduce
    python—模块-练习
    python—模块-re正则表达式
    python—模块-logging
    python—模块-subprocess
    python—模块-hashlib加密
    python—模块-configparser
    SpringBoot结合设计模式(观察者模式、策略模式)- 个人记录
    Spring事务-随笔
    Servlet、Tomcat、SpringMVC-整理-随笔
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2361787.html
Copyright © 2020-2023  润新知