`

搭建mongodb集群(副本集+分片)

 
阅读更多

完整的搭建mongodb集群(副本集+分片)的例子。。。

准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0

副本集及分片策略确定如下:

 

  • 将创建3个副本集,命名为shard1,shard2,shard3;
  • 以上3个副本集作为3个分片;
  • 每个副本集包含3个副本(主、辅1、辅2);
  • 副本分开存储,即shard1存在bluejoe1、bluejoe2、bluejoe3上各一份。。。以此类推
  • 将创建3个配置库实例,一台机器一个
  • bluejoe0上配置一个mongos(mongos一般可以配置在应用端)
画了一个图:
 
 
具体操作步骤如下:
  1. 在bluejoe1上下载mongdb安装包;
  2. 解压至/usr/local/mongdb(注意改名);
  3. 创建data/db1,db2,db3目录,启动3个mongod实例,注意replSet的名字:
    1. mkdir /usr/local/mongodb/data/db1 /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db3  
    2. nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db1 --port 10001 --replSet db1 --logpath=/usr/local/mongodb/log/db1.log &  
    3. nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db2 --port 10002 --replSet db2 --logpath=/usr/local/mongodb/log/db2.log &  
    4. nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db3 --port 10003 --replSet db3 --logpath=/usr/local/mongodb/log/db3.log &  
  4. 使用scp命令,将mongodb目录复制至bluejoe2和bluejoe3机器,并按照第3步启动每台机器上的3个实例;
  5. 初始化副本:
    1. mongo bluejoe1:10001  
    2.   
    3.     use admin  
    4.       
    5.     db.runCommand(  
    6.     {  
    7.         "replSetInitiate":  
    8.         {  
    9.             "_id":"db1",  
    10.             "members":  
    11.             [  
    12.                 {  
    13.                     "_id":1,  
    14.                     "host":"bluejoe1:10001"  
    15.                 },  
    16.                 {  
    17.                     "_id":2,  
    18.                     "host":"bluejoe2:10001"  
    19.                 },  
    20.                 {  
    21.                     "_id":3,  
    22.                     "host":"bluejoe3:10001"  
    23.                 }  
    24.             ]  
    25.         }  
    26.     })  
    27.       
    28.   
    29. mongo bluejoe1:10002  
    30.   
    31.     use admin  
    32.       
    33.     db.runCommand(  
    34.     {  
    35.         "replSetInitiate":  
    36.         {  
    37.             "_id":"db2",  
    38.             "members":  
    39.             [  
    40.                 {  
    41.                     "_id":1,  
    42.                     "host":"bluejoe1:10002"  
    43.                 },  
    44.                 {  
    45.                     "_id":2,  
    46.                     "host":"bluejoe2:10002"  
    47.                 },  
    48.                 {  
    49.                     "_id":3,  
    50.                     "host":"bluejoe3:10002"  
    51.                 }  
    52.             ]  
    53.         }  
    54.     })  
    55.       
    56. mongo bluejoe1:10003  
    57.   
    58.     use admin  
    59.       
    60.     db.runCommand(  
    61.     {  
    62.         "replSetInitiate":  
    63.         {  
    64.             "_id":"db3",  
    65.             "members":  
    66.             [  
    67.                 {  
    68.                     "_id":1,  
    69.                     "host":"bluejoe1:10003"  
    70.                 },  
    71.                 {  
    72.                     "_id":2,  
    73.                     "host":"bluejoe2:10003"  
    74.                 },  
    75.                 {  
    76.                     "_id":3,  
    77.                     "host":"bluejoe3:10003"  
    78.                 }  
    79.             ]  
    80.         }  
    81.     })  
  6. 观察副本集的实时复制特性
    1. 连接上bluejoe1:10001,看到db1:PRIMARY>的字样,说明它是db1的主节点
    2. 创建一张新表,创建几条测试记录
    3. 连接上bluejoe3:10002,看到shard1:SECONDARY>的字样,说明它是shard1的辅助节点
    4. 注意此时无法查询前面新增的记录,会报错not master and slaveOk=false
    5. 回到bluejoe1:10001,设置slaveOk
      1. db.getMongo().setSlaveOk()  
    6. 再回到bluejoe3:10002,即可看到主节点写入的记录
  • 观察副本集的故障转移特性
    1. 杀掉bluejoe1:10001的进程
    2. 再次连接上bluejoe3:10002,看到shard1:PRIMARY>的字样,说明它已经变成shard1的主节点
    3. 如果这时再启动bluejoe1:10001,则发现它已经变成shard1:SECONDARY>
  • 创建data/configdb,启动配置库实例:
    1. mkdir /usr/local/mongodb/data/configdb  
    2. nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --port 20000 --logpath=/usr/local/mongodb/log/configdb.log &  

    如果需要关闭mongod服务,可使用--shutdown选项,如:
    1. /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --shutdown  
     
    到现在为止应该有12个mongd实例,其中3个为配置库实例,剩下的属于3个副本集;
  • 接下来管理分片,在bluejoe0上启动mongs:

    1. nohup /usr/local/mongodb/bin/mongos --port 30000 --configdb bluejoe1:20000,bluejoe2:20000,bluejoe3:20000 &  
  • 连接上mongos,配置分片信息:
    1. mongo bluejoe0:30000  
    2.   
    3. mongos> use admin  
    4. switched to db admin  
    5.       
    6. db.runCommand({"addShard":"db1/bluejoe1:10001"})  
    7. db.runCommand({"addShard":"db2/bluejoe1:10002"})  
    8. db.runCommand({"addShard":"db3/bluejoe1:10003"})  
  • 查看分片情况:
    1. mongos>  db.runCommand({listshards:1})  
    2. {  
    3. <span style="white-space:pre">  </span>"shards" : [  
    4. <span style="white-space:pre">      </span>{  
    5. <span style="white-space:pre">          </span>"_id" : "db1",  
    6. <span style="white-space:pre">          </span>"host" : "db1/bluejoe1:10001,bluejoe2:10001,bluejoe3:10001"  
    7. <span style="white-space:pre">      </span>},  
    8. <span style="white-space:pre">      </span>{  
    9. <span style="white-space:pre">          </span>"_id" : "db2",  
    10. <span style="white-space:pre">          </span>"host" : "db2/bluejoe1:10002,bluejoe2:10002,bluejoe3:10002"  
    11. <span style="white-space:pre">      </span>},  
    12. <span style="white-space:pre">      </span>{  
    13. <span style="white-space:pre">          </span>"_id" : "db3",  
    14. <span style="white-space:pre">          </span>"host" : "db3/bluejoe1:10003,bluejoe2:10003,bluejoe3:10003"  
    15. <span style="white-space:pre">      </span>}  
    16. <span style="white-space:pre">  </span>],  
    17. <span style="white-space:pre">  </span>"ok" : 1  
    18. }  
    可以看出,尽管注册的时候只是提供了副本集的主节点,但mongos已知晓了各辅助节点;

  • 对某个库开启分片功能:
    1. mongos> db.runCommand({"enablesharding":"test"})  
    2. { "ok" : 1 }  
    3. mongos> db.runCommand({"shardcollection":"test.person","key":{_id:'hashed'}})  
    4. { "collectionsharded" : "test.person", "ok" : 1 }  
  • 插入测试数据:
    1. mongos> for(var i=0;i<10;i++){db.person.insert({name:"bluejoe"+i});}  
    2. WriteResult({ "nInserted" : 1 })  
  • 查看数据分片存储情况:
    1. [root@hadoop0 ~]# mongo bluejoe3:10002  
    2. MongoDB shell version: 2.6.5  
    3. connecting to: bluejoe3:10002/test  
    4. shard1:PRIMARY> db.person.find()  
    5. { "_id" : ObjectId("546ff1013a0d0ec68b42a914"), "name" : "bluejoe0" }  
    6. { "_id" : ObjectId("546ff1013a0d0ec68b42a915"), "name" : "bluejoe1" }  
    7. { "_id" : ObjectId("546ff1013a0d0ec68b42a91a"), "name" : "bluejoe6" }  
    8. { "_id" : ObjectId("546ff1013a0d0ec68b42a91b"), "name" : "bluejoe7" }  
    9. { "_id" : ObjectId("546ff1013a0d0ec68b42a91c"), "name" : "bluejoe8" }  
    10. shard1:PRIMARY> exit  
    11. bye  
    12. [root@hadoop0 ~]# mongo bluejoe2:10001  
    13. MongoDB shell version: 2.6.5  
    14. connecting to: bluejoe2:10001/test  
    15. shard2:PRIMARY> db.person.find()  
    16. { "_id" : ObjectId("546ff1013a0d0ec68b42a918"), "name" : "bluejoe4" }  
    17. shard2:PRIMARY> exit  
    18. bye  
    19. [root@hadoop0 ~]# mongo bluejoe3:10001  
    20. MongoDB shell version: 2.6.5  
    21. connecting to: bluejoe3:10001/test  
    22. shard3:PRIMARY> db.person.find()  
    23. { "_id" : ObjectId("546ff1013a0d0ec68b42a916"), "name" : "bluejoe2" }  
    24. { "_id" : ObjectId("546ff1013a0d0ec68b42a917"), "name" : "bluejoe3" }  
    25. { "_id" : ObjectId("546ff1013a0d0ec68b42a919"), "name" : "bluejoe5" }  
    26. { "_id" : ObjectId("546ff1013a0d0ec68b42a91d"), "name" : "bluejoe9" }  
    27. shard3:PRIMARY>   
分享到:
评论

相关推荐

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...

    centos7+mongodb 3.4 集群搭建:分片+副本集

    在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...

    Mongodb分片副本集集群搭建

    总结以上知识点,搭建MongoDB分片副本集集群需要考虑架构设计、版本兼容性、配置服务器和分片服务器的设置、机器规划以及配置参数等方面。了解这些知识点并结合实际操作,可以有效避免搭建过程中遇到的常见问题,...

    K8s 部署 MongoDB(副本集)

    mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,适用于不同的场合,属Replica set应用最为广泛,主从模式现在用的较少,sharding模式最为完备,但配置维护较为复杂 ...

    使用+StatefulSet+搭建+MongoDB+集群.doc

    MongoDB 集群是由多个节点组成的,这些节点可以是副本集成员、分片服务器或仲裁者。集群提供了数据冗余和水平扩展的能力,确保了服务的高可用性。其主要优点包括: 1. **无单点故障**:通过副本集,数据在多个节点...

    centos7下mongodb4.0.6分片集群搭建(psa)-用户认证关键问题汇总

    公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...

    mongodb高可用完全分布集群搭建

    需要配置副本集和分片,以便mongodb可以自动选择合适的节点来存储和读取数据。 每台机器上启动配置服务器(非第一次启动需要添加参数——logappend) 在每台机器上启动配置服务器,以便mongodb可以正确地配置和...

    Mongodb集群之副本集集群搭建

    MongoDB 是一种流行的开源文档型数据库,支持多种集群搭建方式,包括主从模式、副本集(Replica Set)和分片(Sharding)。在本文中,我们将深入探讨副本集集群的构建及其特点。 副本集是MongoDB高可用性和冗余策略...

    CentOS 7下MongoDB 3.4 集群搭建之分片

    本文将详细介绍如何在CentOS 7操作系统下,搭建一个MongoDB 3.4版本的集群,且包括分片(sharding)与副本集(replica set)两大特性。搭建这样的集群,旨在创建一个高性能、高可用且能够水平扩展的数据库架构。 在...

    mongodb分片集群增加acl

    搭建MongoDB分片集群并增加ACL是一个涉及到多个步骤的复杂过程,需要对MongoDB的架构、安全模型有深刻理解。通过本文,可以了解到搭建MongoDB 3.6分片集群的基础步骤,并对如何增加安全性有了基本的掌握。当然,在...

    MongoDB企业级分片集群搭建视频.zip

    目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4

    MongoDB分布式搭建执行文件(直接可运行)搭建MongoDB分布式集群

    (3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由节点服务器(Mongos) - 添加分片集到集群 - 创建数据库...

    mongo集群脚本参考.zip

    在“mongo集群脚本参考.zip”这个压缩包中,可能包含了配置和管理 MongoDB 集群的脚本,包括但不限于创建和管理副本集、设置和调整分片、监控集群状态、迁移数据等任务。这些脚本对于运维人员来说是非常有价值的工具...

    MongoDB在单机上搭建分片副本集群

    mongodb在单机上搭建分片副本集群. 1.安装mongodb。2.准备好配置文件夹。3.创建日志文件。4.启动配置进程(config servers)。5.启动路由进程(mongos)。6.启动分片进程(shard servers)。7.开始设置分片副本集。8.设置...

    mongodb Replica Sets +Sharding高可用集群搭建

    这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的副本集。副本集是MongoDB中的数据冗余和故障转移机制。它由多个MongoDB实例组成,这些实例维护着相同的数据副本。其中,一个实例...

    MongoDB搭建高可用集群的完整步骤(3个分片+3个副本)

    在本文中,我们将探讨如何搭建一个高可用的MongoDB集群,包括3个分片和3个副本集,确保数据的高可用性和容错性。 首先,我们需要规划网络端口和IP地址。在给出的架构图中,每个副本集由3个节点组成,每个节点都有一...

    mongodb集群部署脚本

    mongodb集群部署脚本,包括mongos启动、mongodb config启动,mongodb分片启动,mongodb副本集仲部署等脚本

    mongodb集群搭建教程

    ### MongoDB集群搭建教程 #### 一、主从模式详解 **主从模式**是MongoDB中最常见的复制方式之一,主要用于实现数据库同步备份、故障恢复以及读取扩展等功能。该模式的核心在于建立一个主节点和一个或多个从节点,...

Global site tag (gtag.js) - Google Analytics