Nosql Mongodb之旅(31)—Replica Sets+Sharding

前端之家收集整理的这篇文章主要介绍了Nosql Mongodb之旅(31)—Replica Sets+Sharding前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠、高可用还有些距离,所以有了"Replica Sets + Sharding"的解决方案。

shard:

使用Replica Sets,确保每个数据节点都具有备份,自动容错转移,自动回复能力。

config:

使用3个配置服务器,确保元数据的完整性。

route:

使用3个路由进程,实现负载均衡,提高客户端接入性能

配置Replica Sets + Sharding 架构图:


配置Replica Sets + Sharding

(1)配置shard1所用到的Replica Sets

在server A上

[plain] view plain copy
  1. @H_404_38@[root@localhostbin]#/Apps/mongo/bin/mongod--shardsvr--replSetshard1--port27017
  2. @H_404_38@--dbpath/data/shard1_1--logpath/data/shard1_1/shard1_1.log--logappend--fork
  3. @H_404_38@[root@localhostbin]#alloutputgoingto:/data/shard1_1/shard1_1.log
  4. @H_404_38@forkedprocess:18923
在server B上
    @H_404_38@--dbpath/data/shard1_2--logpath/data/shard1_2/shard1_2.log--logappend--fork
  1. @H_404_38@forkedprocess:18859
  2. @H_404_38@[root@localhostbin]#alloutputgoingto:/data/shard1_2/shard1_2.log
  3. @H_404_38@[root@localhostbin]#
在Server C 上
    @H_404_38@--dbpath/data/shard1_3--logpath/data/shard1_3/shard1_3.log--logappend--fork
  1. @H_404_38@alloutputgoingto:/data/shard1_3/shard1_3.log
  2. @H_404_38@forkedprocess:18768
  3. @H_404_38@[root@localhostbin]#
用mongo 连接其中一台机器的27017 端口的mongod,初始化Replica Sets“shard1”,执行:
    @H_404_38@[root@localhostbin]#./mongo--port27017
  1. @H_404_38@MongoDBshellversion:1.8.1
  2. @H_404_38@connectingto:127.0.0.1:27017/test
  3. @H_404_38@>config={_id:'shard1',members:[
  4. @H_404_38@...{_id:0,host:'192.168.3.231:27017'},
  5. @H_404_38@...{_id:1,host:'192.168.3.232:27017'},
  6. @H_404_38@...{_id:2,host:'192.168.3.233:27017'}]
  7. @H_404_38@...}
  8. @H_404_38@……
  9. @H_404_38@>rs.initiate(config)
  10. @H_404_38@{
  11. @H_404_38@"info":"Confignowsavedlocally.Shouldcomeonlineinaboutaminute.",108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"ok":1
  12. @H_404_38@}
(2)配置shard2所用到的Replica Sets

在server A上

    @H_404_38@[root@localhostbin]#/Apps/mongo/bin/mongod--shardsvr--replSetshard2--port27018
  1. @H_404_38@--dbpath/data/shard2_1--logpath/data/shard2_1/shard2_1.log--logappend--fork
  2. @H_404_38@alloutputgoingto:/data/shard2_1/shard2_1.log
  3. @H_404_38@[root@localhostbin]#forkedprocess:18993
  4. @H_404_38@[root@localhostbin]#
在server B上
    @H_404_38@--dbpath/data/shard2_2--logpath/data/shard2_2/shard2_2.log--logappend--fork
  1. @H_404_38@alloutputgoingto:/data/shard2_2/shard2_2.log
  2. @H_404_38@forkedprocess:18923
  3. @H_404_38@[root@localhostbin]#
在Server C上
    @H_404_38@--dbpath/data/shard2_3--logpath/data/shard2_3/shard2_3.log--logappend--fork
  1. @H_404_38@[root@localhostbin]#alloutputgoingto:/data/shard2_3/shard2_3.log
  2. @H_404_38@forkedprocess:18824
  3. @H_404_38@[root@localhostbin]#

用mongo 连接其中一台机器的27018 端口的mongod,初始化Replica Sets “shard2”,执行:

    @H_404_38@[root@localhostbin]#./mongo--port27018
  1. @H_404_38@connectingto:127.0.0.1:27018/test
  2. @H_404_38@>config={_id:'shard2',host:'192.168.3.231:27018'},host:'192.168.3.232:27018'},host:'192.168.3.233:27018'}]
  3. @H_404_38@
  4. @H_404_38@db.runCommand({enablesharding:"test"})
  5. @H_404_38@db.runCommand({shardcollection:"test.users",key:{_id:1}})
  6. @H_404_38@
  7. @H_404_38@}
(3)配置3 台Config Server
在Server A、B、C上执行:
@H_487_301@
    @H_404_38@/Apps/mongo/bin/mongod--configsvr--dbpath/data/config--port20000--logpath
  1. @H_404_38@/data/config/config.log--logappend--fork
(4)配置3台Route Process
在Server A、B、C上执行:
    @H_404_38@/Apps/mongo/bin/mongos--configdb
  1. @H_404_38@192.168.3.231:20000,192.168.3.232:20000,192.168.3.233:20000--port30000--chunkSize1
  2. @H_404_38@--logpath/data/mongos.log--logappend--fork
(5)配置Shard Cluster
连接到其中一台机器的端口30000 的mongos 进程,并切换到admin 数据库做以下配置
    @H_404_38@[root@localhostbin]#./mongo--port30000
  1. @H_404_38@connectingto:127.0.0.1:30000/test
  2. @H_404_38@>useadmin
  3. @H_404_38@switchedtodbadmin
  4. @H_404_38@>db.runCommand({addshard:"shard1/192.168.3.231:27017,192.168.3.232:27017,192.168.3.233:
  5. @H_404_38@27017"});
  6. @H_404_38@{"shardAdded":"shard1","ok":1}
  7. @H_404_38@>db.runCommand({addshard:"shard2/192.168.3.231:27018,192.168.3.232:27018,192.168.3.233:
  8. @H_404_38@27018"});
  9. @H_404_38@{"shardAdded":"shard2","ok":1}
  10. @H_404_38@>
激活数据库及集合的分片
    @H_404_38@db.runCommand({enablesharding:"test"})
  1. 数据库,以便添加测试数据
      @H_404_38@usetest
    1. @H_404_38@for(vari=1;i<=200000;i++)db.users.insert({id:i,addr_1:"Beijing",addr_2:"Shanghai"});
    2. @H_404_38@db.users.stats()
    3. @H_404_38@{
    4. @H_404_38@"sharded":true,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"ns":"test.users",108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"count":200000,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"size":25600384,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"avgObjSize":128,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"storageSize":44509696,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"nindexes":2,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"nchunks":15,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"shards":{
    5. @H_404_38@"shard0000":{
    6. @H_404_38@},108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_404_38@"shard0001":{
    7. @H_404_38@……
    8. @H_404_38@}
    9. @H_404_38@}
    可以看到Sharding搭建成功了,跟我们期望的结果一致,至此我们就将Replica Sets与Sharding结合的架构也学习完毕了! 原文链接:https://www.f2er.com/nosql/204145.html

    猜你在找的NoSQL相关文章