首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证MongoDb共享副本集是否运行良好?

如何验证MongoDb共享副本集是否运行良好?
EN

Stack Overflow用户
提问于 2015-10-19 16:13:27
回答 1查看 2.1K关注 0票数 1

我用两个集群建立了一个MongoDb共享副本集,但我不知道如何测试一切是否正常。

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

这是主机名。

Shard 1:

  • 蒙戈-里斯1-1
  • 蒙戈-Rs1-2
  • 蒙戈-Rs1-3

Shard 2:

  • 蒙古-Rs2-1
  • 蒙古-Rs2-2
  • 蒙古-Rs2-3

3配置服务器:

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

路由器(Mongos):

  • 蒙哥斯-1

下面是我在运行sh.status()时所拥有的内容:

代码语言:javascript
复制
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" }                              

我用命令运行我的芒果:

代码语言:javascript
复制
mongos --configdb cfg-1:27017,cfg-2:27017,cfg-3:27017

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

代码语言:javascript
复制
mongod --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017

我使用命令运行复制集(rs1和rs2):

代码语言:javascript
复制
mongod --replSet rs1 --noprealloc --smallfiles

复制集设置如下:

代码语言:javascript
复制
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。
  2. 我创建了一个DB:"testshard“
  3. 我在"testshard“中创建了一个文档
  4. 我登录了3个副本: mongo-rs1-*和mongo-rs2-*,以检查数据保存的位置。

结果

我注意到DB是在RS1 (shard 1)上创建的,并被复制在3个副本上: mongo-rs1-1,mongo-rs1-2,mongo-rs1-3。DB不是在碎片2上创建的;我认为这是正常的,因为分片功能保存在一个碎片上,而不是两者都保存。

从这里看,这个复制品看起来很管用。那碎片2呢?如何检查数据是否可以保存到碎片2?

测试#2

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

我本来希望看到在rs2中创建的新文档,但rs2仍然是一个空DB。

问题

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

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

Q3:有什么方法可以使切分自动化吗?我不想说哪个数据库应该去哪里,这应该是自动的。我原以为数据会被随机保存在两个碎片之间。

Q4:在我的例子中,最好的备份策略是什么?我想我只需要做一个rs1和rs2?

Q5:如果我说到MongoDB的唯一访问点是通过Mongos,我说的对吗?没有人应该质疑复制集。

EN

回答 1

Stack Overflow用户

发布于 2015-10-22 03:45:28

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

您已经裁剪了sh.status()并省略了切分信息。查看这个帖子的碎片状态应该是什么样子。要知道,该设计包括区域碎片标记,如果省略这些标记,将与您想要的类似。MongoDb regional replica set - primary node in each region?

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

您的基本配置标识了一个碎片键,mongo负责处理哪些文档,什么碎片,并在必要时重新平衡碎片。

Q3:有什么方法可以使切分自动化吗?我不想说哪个数据库应该去哪里,这应该是自动的。我原以为数据会被随机保存在两个碎片之间。

在默认情况下,分片是“自动化的”。当您分割一个集合时,您指定了shard键,mongo指出了如何随着数据库的增长以及碎片键范围之间的文档分布变化来划分集合和重新平衡。

Q4:在我的例子中,最好的备份策略是什么?我想我只需要做一个rs1和rs2?

每个碎片成员上的Mongo转储对于小型数据库来说是一种不错的策略,尽管使用一个体面的分布式副本集可以消除除某些类型的维护之外的一切定期备份的需要(例如,您正在重塑集合,如果维护进行得不好,您需要一个回滚数据库副本)。

Q5:如果我说到MongoDB的唯一访问点是通过Mongos,我说的对吗?没有人应该质疑复制集。

所有的访问都必须是蒙哥斯。只有管理员才能直接访问副本集(或碎片成员)。直接成员访问颠覆切分-结果将因配置而异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33219203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档