zoukankan      html  css  js  c++  java
  • (12)mongodb replcation与shard结合使用

      replcation 复制集保证了每个节点中的数据都是一样的,将相同的数据备份到不同的节点,shard 分片是按照某种规则将不同数据写到不同的节点中。replcation与shard结合使用只需将复制集添加到 shard 中就可以了,每一个复制集看做一个整体,当成一个节点对待,如图所示:

    一般来说如果数剧量很大的话就会用到分片,同时也会用到复制集了,实现步骤记录如下:

    1、准备3台服务器,192.168.31.151、192.168.31.152、192.168.31.153。其中152、153放置复制集,151放置 mongs 和 configsvr

    2、首先启动两个复制集 

      登录152,执行sh /usr/scripts/mongodbStart2.sh,并且输入参数y清空之前的数据,脚本如下:

    #!/bin/bash
    IP=192.168.31.152
    RS=rs152
    read -t 30 -p 'please input is reset[y/n]:' reset
    if [ $reset == 'y' ]
         then
            echo "reset"
            pkill -9 mongo
                rm -rf /var/mongodb/
    fi
    mkdir -p /var/mongodb/mdata17 /var/mongodb/mdata18 /var/mongodb/mdata19 /var/mongodb/mlog
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb1.conf
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb2.conf
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb3.conf
    /usr/local/mongodb245/bin/mongo --port 27017 <<EOF
    use admin;
    var rsconf={
        _id:'${RS}',
        members:[
            {_id:0,host:'${IP}:27017'},
            {_id:1,host:'${IP}:27018'},
            {_id:2,host:'${IP}:27019'}
        ]
    };
    rs.initiate(rsconf);
    EOF
    /usr/local/mongodb245/bin/mongo
    View Code

      登录153,执行sh /usr/scripts/mongodbStart2.sh,并且输入参数y清空之前的数据,脚本如下:

    #!/bin/bash
    IP=192.168.31.153
    RS=rs153
    read -t 30 -p 'please input is reset[y/n]:' reset
    if [ $reset == 'y' ]
         then
            echo "reset"
            pkill -9 mongo
                rm -rf /var/mongodb/
    fi
    mkdir -p /var/mongodb/mdata17 /var/mongodb/mdata18 /var/mongodb/mdata19 /var/mongodb/mlog
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb1.conf
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb2.conf
    /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/mongodb3.conf
    /usr/local/mongodb245/bin/mongo --port 27017 <<EOF
    use admin;
    var rsconf={
        _id:'${RS}',
        members:[
            {_id:0,host:'${IP}:27017'},
            {_id:1,host:'${IP}:27018'},
            {_id:2,host:'${IP}:27019'}
        ]
    };
    rs.initiate(rsconf);
    EOF
    /usr/local/mongodb245/bin/mongo
    View Code

    3、配置启动 configsvr

      登录151,为了测试不受影响,需要清理以下之前的文件,执行以下语句,

      [root@localhost mongodb245]# rm -rf /var/smongodb/
      [root@localhost mongodb245]# mkdir -p /var/smongodb/mdata17 /var/smongodb/mdata18 /var/smongodb/mdata20 /var/smongodb/mlog
      [root@localhost mongodb245]# /usr/local/mongodb245/bin/mongod -f /usr/local/mongodb245/smongodbConfigsvr.conf

      /smongodbConfigsvr.conf脚本如下:

    dbpath=/var/smongodb/mdata20
    logpath=/var/smongodb/mlog/mongolog20.log   
    smallfiles=true
    logappend=true
    bind_ip=0.0.0.0
    fork=true
    configsvr=true
    port=27020
    View Code

    4、启动 mongs 路由服务

      登录151,执行以下语句:

      /usr/local/mongodb245/bin/mongos -f /usr/local/mongodb245/smongodb.conf

      smongodb.conf 的脚本如下:

    logpath=/var/smongodb/mlog/mongolog30.log   
    logappend=true
    bind_ip=0.0.0.0
    fork=true
    port=30000
    configdb=192.168.31.151:27020
    View Code

    5、将152rs 153rs 两个复制集添加到分片上:

      sh.addShard('rs152/192.168.31.152:27017')

      sh.addShard('rs153/192.168.31.153:27017')

      查看一下分片的状态,截图如下:

      

    6、指定分片的规则:

      sh.enableSharding('shop')

      sh.shardCollection('shop.user',{userid:1});

    7、为了查看方便,提前手动分片:在userid 达到1000,2000,3000时生成chunk块

      sh.splitAt('shop.user',{userid:1000});

      sh.splitAt('shop.user',{userid:2000});

      sh.splitAt('shop.user',{userid:3000});

      查看一下状态,截图如下:

    8、插入4000条测试数据

    mongos> use shop;
    mongos> for(var i=1;i<=4000;i++){db.user.insert({userid:i,otherStr:'anjagslkdadkjfag akjglakjgaj kajgag'})}

    9、分别查询:mongos、复制集rs152(分别登陆27017、27018、27019)、复制集rs153(分别登陆27017、27018、27019)

      注意用复制集的从库登陆客户端查询时先要执行 rs.slaveOk();

      mongos> db.user.find().count();
      4000

      rs152:SECONDARY> db.user.find().count();  27017、27018、27019查到相同的数据
      2001

      rs153:SECONDARY> db.user.find().count();  27017、27018、27019查到相同的数据
      1999

    到此 mongodb 中 replcation与 shard 结合使用的配置与测试完成。

      

  • 相关阅读:
    Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50
    ecshop lang用法
    php常用Stream函数集介绍
    php实现多任务并发探讨
    ThinkPHP 3.2 版本升级了哪些内容
    免费手机号码归属地API查询接口和PHP使用实例分享
    [SHELL进阶] (转)最牛B的 Linux Shell 命令 (四)
    [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)
    [SHELL进阶] (转)最牛B的 Linux Shell 命令 (二)
    [SHELL实例] (转)最牛B的 Linux Shell 命令 (一)
  • 原文地址:https://www.cnblogs.com/javasl/p/11299889.html
Copyright © 2011-2022 走看看