mongoDB's GridFS used with replicaSet and sharding

简介:
版本: 
mongodb 1.6.5 x64 bin

环境图:
mongoDBs GridFS used with replicaSet and sharding - 德哥@Digoal - The Heart,The World.
 
 
看到这个图是不是有点像RAID1/0的存储方式.

描述:
Server1 : 172.16.3.174
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1953.conf --shardsvr --replSet rep/172.16.3.176:1954
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1954.conf --shardsvr --replSet rep1/172.16.3.176:1953
Server2 : 172.16.3.176
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1954.conf --shardsvr --replSet rep/172.16.3.174:1953
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1953.conf --shardsvr --replSet rep1/172.16.3.174:1954
Server3 : 172.16.3.33
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1953.conf --shardsvr --replSet rep2/172.16.3.39:1954
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1954.conf --shardsvr --replSet rep3/172.16.3.39:1953
Server4 : 172.16.3.39
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1954.conf --shardsvr --replSet rep2/172.16.3.33:1953
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1953.conf --shardsvr --replSet rep3/172.16.3.33:1954
/app/mongodb1.6.5/bin/mongos --port 1956 --configdb 172.16.3.67:1955 --fork --logpath /var/log/mongo/mongodb_1956.log --logappend
Server5 : 172.16.3.67
/app/mongodb1.6.5/bin/mongod --config /app/mongodb1.6.5/conf/mongod1955.conf --configsvr

配置文件 : 
[root@db6 conf]# cat mongod1953.conf 
port=1953
fork=true
logpath=/var/log/mongo/mongodb_1953.log
logappend=true
dbpath=/mongodata/data1953
directoryperdb=true
noauth=true
nohttpinterface=true
nssize=128
oplogSize=512
maxConns=1000

[root@db6 conf]# cat mongod1954.conf 
port=1954
fork=true
logpath=/var/log/mongo/mongodb_1954.log
logappend=true
dbpath=/mongodata/data1954
directoryperdb=true
noauth=true
nohttpinterface=true
nssize=128
oplogSize=512
maxConns=1000

[root@kefu conf]# cat mongod1955.conf 
port=1955
fork=true
logpath=/var/log/mongo/mongodb_1955.log
logappend=true
dbpath=/mongodata/data1955
directoryperdb=true
noauth=true
nohttpinterface=true
nssize=128
oplogSize=512
maxConns=1000

# 初始化replica
> db.runCommand({"replSetInitiate" : {
... "_id" : "rep1",                     
... "members" : [
... {"_id" : 1,"host" : "172.16.3.174:1953"},
... {"_id" : 2,"host" : "172.16.3.176:1954"}]}})
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

> db.runCommand({"replSetInitiate" : {
... "_id" : "rep1",                     
... "members" : [
... {"_id" : 1,"host" : "172.16.3.176:1953"},
... {"_id" : 2,"host" : "172.16.3.174:1954"}]}})
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

> db.runCommand({"replSetInitiate" : {
... "_id" : "rep2",                     
... "members" : [
... {"_id" : 1,"host" : "172.16.3.33:1953"},
... {"_id" : 2,"host" : "172.16.3.39:1954"}]}})
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

> db.runCommand({"replSetInitiate" : {
... "_id" : "rep3",                     
... "members" : [
... {"_id" : 1,"host" : "172.16.3.39:1953"},
... {"_id" : 2,"host" : "172.16.3.33:1954"}]}})
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

# 上传文件
/app/mongodb1.6.5/bin/mongofiles -h 172.16.3.39:1956 -d test put ./SLES-11-SP1-DVD-x86_64-GM-DVD2.iso

# 允许数据库shard和collection shard
> 连接到mongos admin库,允许gridfs的files和chunks collection sharding
> use admin
> db.runCommand({"enablesharding" : "test"})
> db.runCommand({"shardcollection" : "test.fs.files", "key" : {"_id" : 1}})
> db.runCommand({"shardcollection" : "test.fs.chunks", "key" : {"_id" : 1}})

# 查看shard状态
> db.printShardingStatus()                             
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      { "_id" : "rep", "host" : "rep/172.16.3.174:1953" }
      { "_id" : "rep1", "host" : "rep1/172.16.3.176:1953" }
      { "_id" : "rep2", "host" : "rep2/172.16.3.33:1953" }
      { "_id" : "rep3", "host" : "rep3/172.16.3.39:1953" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }

# 查看gridfs上传文件后的状态
> db.fs.chunks.totalSize()
8905203712
> db.fs.chunks.stats()    
{
        "sharded" : true,
        "ns" : "test.fs.chunks",
        "count" : 23949,
        "size" : 6279589664,
        "avgObjSize" : 262206.7586955614,
        "storageSize" : 9065091584,
        "nindexes" : 2,
        "nchunks" : 27,
        "shards" : {
                "rep" : {
                        "ns" : "test.fs.chunks",
                        "count" : 10158,
                        "size" : 2663364768,
                        "avgObjSize" : 262193.81453041936,
                        "storageSize" : 4957868032,
                        "numExtents" : 31,
                        "nindexes" : 2,
                        "lastExtentSize" : 829803520,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 933888,
                        "indexSizes" : {
                                "_id_" : 434176,
                                "files_id_1_n_1" : 499712
                        },
                        "ok" : 1
                },
                "rep1" : {
                        "ns" : "test.fs.chunks",
                        "count" : 7865,
                        "size" : 2062311264,
                        "avgObjSize" : 262213.7652892562,
                        "storageSize" : 2380098048,
                        "numExtents" : 27,
                        "nindexes" : 2,
                        "lastExtentSize" : 400175616,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 827392,
                        "indexSizes" : {
                                "_id_" : 385024,
                                "files_id_1_n_1" : 442368
                        },
                        "ok" : 1
                },
                "rep2" : {
                        "ns" : "test.fs.chunks",
                        "count" : 3046,
                        "size" : 798730912,
                        "avgObjSize" : 262222.88640840445,
                        "storageSize" : 943973632,
                        "numExtents" : 22,
                        "nindexes" : 2,
                        "lastExtentSize" : 160821760,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 294912,
                        "indexSizes" : {
                                "_id_" : 139264,
                                "files_id_1_n_1" : 155648
                        },
                        "ok" : 1
                },
                "rep3" : {
                        "ns" : "test.fs.chunks",
                        "count" : 2880,
                        "size" : 755182720,
                        "avgObjSize" : 262216.22222222225,
                        "storageSize" : 783151872,
                        "numExtents" : 21,
                        "nindexes" : 2,
                        "lastExtentSize" : 134018304,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 278528,
                        "indexSizes" : {
                                "_id_" : 131072,
                                "files_id_1_n_1" : 147456
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}
> exit  


注意事项 : 
1. mongos和config db不能在同一台服务器,否则在addshard的时候会报如下错误
> db.runCommand({"addshard" : "rep/db5.product.sky-mobi.com.sh:1953"})
{
        "ok" : 0,
        "errmsg" : "can't use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs "
}

2. shard的replicaSet的名字不能一样,否则会报如下错误 : 
> db.runCommand({"addshard" : "rep/172.16.3.174:1953"})
{ "shardAdded" : "rep", "ok" : 1 }
# 再次添加同一replica名字的shard,报错
> db.runCommand({"addshard" : "rep/172.16.3.176:1953"})
{
        "ok" : 0,
        "errmsg" : "E11000 duplicate key error index: config.shards.$_id_  dup key: { : \"rep\" }"
}
# 因此这里使用了rep , rep1 , rep2 , rep3

3. sharding 支持自动探测 replicaSet的存活状态,支持识别replicaSet的failover.
目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
33250 201
如何保证分布式文件系统的数据一致性
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36820 22
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24905 16
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36824 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29949 52

热门文章

最新文章