【问题标题】:How verify if the MongoDb Sharded Replica Set works well?如何验证 MongoDb Sharded Replica Set 是否运行良好?
【发布时间】:2015-10-19 16:13:27
【问题描述】:

我设置了一个包含 2 个集群的 MongoDb 分片副本集,但我不知道如何测试一切是否正常。

我在任何主机上都没有错误消息,这表明我的设置正常。所有主机都可以互相 ping 通,并使用默认端口 27017。

这是主机名。

分片 1:

  • mongo-rs1-1
  • mongo-rs1-2
  • mongo-rs1-3

分片 2:

  • mongo-rs2-1
  • mongo-rs2-2
  • mongo-rs2-3

3 个配置服务器:

  • cfg-1
  • cfg-2
  • cfg-3

路由器(Mongos):

  • mongos-1

这是我运行 sh.status() 时的结果:

mongos> sh.status()  
                                                       
--- Sharding Status ---                                                         
  sharding version: {                                                           
        "_id" : 1,                                                              
        "version" : 4,                                                          
        "minCompatibleVersion" : 4,                                             
        "currentVersion" : 5,                                                   
        "clusterId" : ObjectId("562491c645300851d95d85bb")                      
}                                                                               
  shards:                                                                       
        {  "_id" : "rs1",  "host" : "rs1/mongo-rs1-1:27017,mongo-rs1-2:27017,mon
go-rs1-3:27017" }                                                               
        {  "_id" : "rs2",  "host" : "rs2/mongo-rs2-1:27017,mongo-rs2-2:27017,mon
go-rs2-3:27017" }                                                               
  databases:                                                                    
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }     
        {  "_id" : "testshard",  "partitioned" : true,  "primary" : "rs1" }                     
        {  "_id" : "testrs2",  "partitioned" : false,  "primary" : "rs2" }                              
                                                              

我使用命令运行我的 mongos:

mongos --configdb cfg-1:27017,cfg-2:27017,cfg-3:27017

我使用命令运行我的配置服务器:

mongod --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017

我使用命令运行我的副本集(rs1 和 rs2):

mongod --replSet rs1 --noprealloc --smallfiles

副本集设置如下:

rs1:PRIMARY> rs.status()                                                        
{                                                                               
        "set" : "rs1",                                                          
        "date" : ISODate("2015-10-19T15:45:31Z"),                               
        "myState" : 1,                                                          
        "members" : [                                                           
                {                                                               
                        "_id" : 0,                                              
                        "name" : "mongo-rs1-1:27017",                           
                        "health" : 1,                                           
                        "state" : 1,                                            
                        "stateStr" : "PRIMARY",                                 
                        "uptime" : 28658,                                       
                        "optime" : Timestamp(1445239630, 1),                    
                        "optimeDate" : ISODate("2015-10-19T07:27:10Z"),         
                        "electionTime" : Timestamp(1445240879, 1),              
                        "electionDate" : ISODate("2015-10-19T07:47:59Z"),       
                        "self" : true                                           
                },    
                {                                                               
                        "_id" : 1,                                              
                        "name" : "mongo-rs1-2:27017",                           
                        "health" : 1,                                           
                        "state" : 2,                                            
                        "stateStr" : "SECONDARY",                               
                        "uptime" : 28654,                                       
                        "optime" : Timestamp(1445239630, 1),                    
                        "optimeDate" : ISODate("2015-10-19T07:27:10Z"),         
                        "lastHeartbeat" : ISODate("2015-10-19T15:45:30Z"),      
                        "lastHeartbeatRecv" : ISODate("2015-10-19T15:45:30Z"),  
                        "pingMs" : 0,                                           
                        "syncingTo" : "mongo-rs1-1:27017"                       
                },  
                {                                                               
                        "_id" : 2,                                              
                        "name" : "mongo-rs1-3:27017",                           
                        "health" : 1,                                           
                        "state" : 2,                                            
                        "stateStr" : "SECONDARY",                               
                        "uptime" : 28654,                                       
                        "optime" : Timestamp(1445239630, 1),                    
                        "optimeDate" : ISODate("2015-10-19T07:27:10Z"),         
                        "lastHeartbeat" : ISODate("2015-10-19T15:45:29Z"),      
                        "lastHeartbeatRecv" : ISODate("2015-10-19T15:45:30Z"),  
                        "pingMs" : 1,                                           
                        "syncingTo" : "mongo-rs1-1:27017"                       
                }                                                               
        ],                                                                      
        "ok" : 1                                                                
}                          

我做的测试:

  1. 我用我的 MongoDB 客户端连接到 Mongos URL。
  2. 我创建了一个数据库:“testshard”
  3. 我在“testshard”中创建了一个文档
  4. 我登录了 3 个副本:mongo-rs1-* 和 mongo-rs2-* 以检查数据的保存位置

结果

我注意到数据库是在 RS1(分片 1)上创建的,并在 3 个副本上复制:mongo-rs1-1、mongo-rs1-2、mongo-rs1-3。数据库不是在分片 2 上创建的;我认为这是正常的,因为分片功能保存在一个分片上,但不能同时保存。

从这里看,复制品似乎有效。但是分片2呢?如何检查数据是否可以保存到分片2?

测试#2

  1. 我登录了 Mongos 并创建了数据库 rs2,我在 Mongos 的数据库“config”中强制为 rs2。
  2. 我在 testrs2 中创建了一个文档。

我期待看到在 rs2 中创建的新文档,但 rs2 仍然是一个空 DB。

问题

Q1:如何测试“分片”功能?我希望保存一个文档并在正确的副本集(rs1 或 rs2)中查看它。

Q2:Mongo 如何知道 rs1 或 rs2 之间的数据保存在哪里?

Q3:有没有办法自动化分片?我不想告诉哪个数据库应该去哪里,这应该是自动的。我希望数据在 2 个分片之间随机保存。

Q4:就我而言,最好的备份策略是什么?我想我只需要做一个 rs1 和 rs2 的 mongodump 吗?

Q5:如果我说 MongoDB 的唯一访问点是通过 Mongos,我说得对吗?没有人应该查询副本集。

【问题讨论】:

  • 您的问题在这里是题外话,它可能更适合dba.stackexchange.com,但请务必阅读他们的How to Ask 页面,以便了解该网站的内容。

标签: mongodb mongo-shell


【解决方案1】:

Q1:如何测试“分片”功能?我希望保存一个文档并在正确的副本集(rs1 或 rs2)中查看它。

您已剪辑 sh.status() 并省略了分片信息。请参阅这篇文章,了解分片状态应该是什么样子。知道该设计包括区域分片标签,如果省略,它将与您想要的相似。 MongoDb regional replica set - primary node in each region?

Q2:Mongo 如何知道 rs1 或 rs2 之间的数据保存在哪里?

您的基本配置标识了一个分片键,mongo 负责处理哪些文件在哪些分片上进行,并根据需要重新平衡分片。

Q3:有没有办法自动分片?我不想告诉哪个数据库应该去哪里,这应该是自动的。我期待数据在 2 个分片之间随机保存。

默认情况下,分片是“自动化的”。当您对集合进行分片时,您指定了分片键,mongo 会随着数据库的增长和分片键范围之间的文档分布的变化,计算出如何对集合进行分区和重新平衡。

Q4:就我而言,最好的备份策略是什么?我想我只需要做一个 rs1 和 rs2 的 mongodump 吗?

每个分片成员上的 Mongo 转储对于小型数据库来说是一个不错的策略,尽管使用适当分布的副本集消除了对除某些类型的维护之外的所有内容的定期备份的需要(例如,您正在重塑集合并且您想要回滚数据库副本以防维护不顺利)

Q5:如果我说 MongoDB 的唯一访问点是通过 Mongos,对吗?没有人应该查询副本集。

所有访问权限都必须是 mongos。只有管​​理员才能直接访问副本集(或分片成员)。直接成员访问会破坏分片 - 结果会因配置而异。

【讨论】:

  • 非常感谢!!关于 Q2,“您的基本配置标识一个分片键”,您是否参考了任何具体配置? Q3:这个 shard-key 是在哪里定义的?
  • 您使用 mongod --shardsvr 选项创建一个分片。给定两个分片和两个副本集,您有 4 个 mongod:RS1 中的分片 a/b,RS2 中的分片 a/b。分片 a 在 RS1/2 之间复制,分片 b 是相同的。通过向 rs.initiate() 发送包含分片 ID 和成员的配置,您可以将单个分片转换为分片集合。然后创建配置服务器(基本上是 RS/shard 元数据的后备存储)。然后创建 mongos,登录并使用管理命令添加分片,在集合上启用分片,并识别分片键。
  • 上面链接的stackoverflow问题有这些命令的例子。这一切都在一台机器上完成,所以如果你使用你的主机:端口,我认为它会非常相关。对于您的情况,您将省略任何副本集成员的设置优先级并省略最后 4 行 - 您希望 mongo 管理哪些文档去哪里。选择一个分片键可能需要一些思考 - 这应该让你开始:docs.mongodb.org/manual/core/sharding-shard-key。如果上面链接的问题不清楚,请告诉我,以便我改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
相关资源
最近更新 更多