转载自:http://blog.csdn.net/bluejoe2000/article/details/41323051

完整的搭建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. use admin
    3. db.runCommand(
    4. {
    5. "replSetInitiate":
    6. {
    7. "_id":"db1",
    8. "members":
    9. [
    10. {
    11. "_id":1,
    12. "host":"bluejoe1:10001"
    13. },
    14. {
    15. "_id":2,
    16. "host":"bluejoe2:10001"
    17. },
    18. {
    19. "_id":3,
    20. "host":"bluejoe3:10001"
    21. }
    22. ]
    23. }
    24. })
    25. mongo bluejoe1:10002
    26. use admin
    27. db.runCommand(
    28. {
    29. "replSetInitiate":
    30. {
    31. "_id":"db2",
    32. "members":
    33. [
    34. {
    35. "_id":1,
    36. "host":"bluejoe1:10002"
    37. },
    38. {
    39. "_id":2,
    40. "host":"bluejoe2:10002"
    41. },
    42. {
    43. "_id":3,
    44. "host":"bluejoe3:10002"
    45. }
    46. ]
    47. }
    48. })
    49. mongo bluejoe1:10003
    50. use admin
    51. db.runCommand(
    52. {
    53. "replSetInitiate":
    54. {
    55. "_id":"db3",
    56. "members":
    57. [
    58. {
    59. "_id":1,
    60. "host":"bluejoe1:10003"
    61. },
    62. {
    63. "_id":2,
    64. "host":"bluejoe2:10003"
    65. },
    66. {
    67. "_id":3,
    68. "host":"bluejoe3:10003"
    69. }
    70. ]
    71. }
    72. })
  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. mongos> use admin
    3. switched to db admin
    4. db.runCommand({"addShard":"db1/bluejoe1:10001"})
    5. db.runCommand({"addShard":"db2/bluejoe1:10002"})
    6. 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>

搭建mongodb集群(副本集+分片)的更多相关文章

  1. Mongodb分布式集群副本集+分片

    目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...

  2. 搭建高可用mongodb集群—— 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...

  3. MongoDB 高可用集群副本集+分片搭建

    MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...

  4. MongoDB 3.4 分片集群副本集 认证

    连接到router所在的MongoDB Shell  我本机端口设置在50000上 mongo --port 接下来的流程和普通数据库添加用户权限一样 db.createUser({user:&quo ...

  5. MongoDB集群——副本集

    1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点.主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副本 ...

  6. window配置mongodb集群(副本集)

    参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...

  7. kubernetes上安装MongoDB-3.6.5集群副本集方式

    一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...

  8. mongodb的分布式集群(4、分片和副本集的结合)

    概述 前面3篇博客讲了mongodb的分布式和集群,当中第一种的主从复制我们差点儿不用,没有什么意义,剩下的两种,我们不论单独的使用哪一个.都会出现对应的问题.比較好的一种解决方式就是.分片和副本集的 ...

  9. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  10. mongo 3.4分片集群系列之二:搭建分片集群--哈希分片

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

随机推荐

  1. 在CentOS6.7操作系统上编译安装httpd2.4

    功能描述: 在CentOS6.7操作系统上,编译安装apache服务,实现定制功能等 一.安装前提 1)安装编译httpd需要的软件包 [root@bqe6tewv41kx ~]#  yum -y i ...

  2. 关于动态生成dom绑定事件失效的原因

    之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试 ...

  3. 关于eclipse在线下载安装android SDK没反应解决方法

    虽然天朝将google这个服务器给和谐掉了 虽然我们也可以选择其他各类FQ软件 虽然你可能有其他手段解决 不过我还是要提供一个参考方法: 具体操作方式: 点击桌面左下角开始菜单中的搜索,把以下路径,复 ...

  4. Robot Framework-Mac版本安装

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

  5. 6.6 Android 编译机制的变迁

    我们使用Java开发android,在编译打包APK文件时,会经过以下流程 Java编译器将应用中所有Java文件编译为class文件(JVM运行的是.class文件,而DVM是.dex文件) dx工 ...

  6. 使用的组件:Jcrop

    JcropImage cropping for jQuery Jcrop 是一个功能强大的 jQuery 图像裁剪插件,结合后端程序(例如:PHP)可以快速的实现图片裁剪的功能. 官网地址:http: ...

  7. 用VS连接oracle数据库时ORA-12504错误

    在用VS2008连接oracle数据库时,可能会出现: ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME 只需在web.config文件Data ...

  8. Linq学习之操作符

    一.环境搭建 下面将逐步搭建我们学习的环境,这个环境不仅仅是这次需要使用,以后的教程一样需要使用这个环境.所以请大家务必按照 搭建这里的环境否则会影响你后面的学习. 我们用到的几张表 通知消息表: 用 ...

  9. Dynamic CRM 2013学习笔记(四十六)简单审批流的实现

    前面介绍过自定义审批流: Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮 Dynamic ...

  10. 帅呆了!ASP.NET Core每秒能处理115万个请求

    今天看到一篇英文博文 -- ASP.NET Core – 2300% More Requests Served Per Second,被震撼了!ASP.NET Core每秒能处理115万个请求(是的, ...