完整的搭建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的名字:
    mkdir /usr/local/mongodb/data/db1 /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db3
    nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db1 --port 10001 --replSet db1 --logpath=/usr/local/mongodb/log/db1.log &
    nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db2 --port 10002 --replSet db2 --logpath=/usr/local/mongodb/log/db2.log &
    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. 初始化副本:
    mongo bluejoe1:10001use admindb.runCommand({"replSetInitiate":{"_id":"db1","members":[{"_id":1,"host":"bluejoe1:10001"},{"_id":2,"host":"bluejoe2:10001"},{"_id":3,"host":"bluejoe3:10001"}]}})mongo bluejoe1:10002use admindb.runCommand({"replSetInitiate":{"_id":"db2","members":[{"_id":1,"host":"bluejoe1:10002"},{"_id":2,"host":"bluejoe2:10002"},{"_id":3,"host":"bluejoe3:10002"}]}})mongo bluejoe1:10003use admindb.runCommand({"replSetInitiate":{"_id":"db3","members":[{"_id":1,"host":"bluejoe1:10003"},{"_id":2,"host":"bluejoe2:10003"},{"_id":3,"host":"bluejoe3:10003"}]}})
  6. 观察副本集的实时复制特性
    1. 连接上bluejoe1:10001。看到db1:PRIMARY>的字样,说明它是db1的主节点
    2. 创建一张新表。创建几条測试记录
    3. 连接上bluejoe3:10002。看到shard1:SECONDARY>的字样,说明它是shard1的辅助节点
    4. 注意此时无法查询前面新增的记录,会报错not master and slaveOk=false
    5. 回到bluejoe1:10001,设置slaveOk
      db.getMongo().setSlaveOk()
    6. 再回到bluejoe3:10002,就可以看到主节点写入的记录

观察副本集的故障转移特性

  1. 杀掉bluejoe1:10001的进程
  2. 再次连接上bluejoe3:10002。看到shard1:PRIMARY>的字样,说明它已经变成shard1的主节点
  3. 假设这时再启动bluejoe1:10001,则发现它已经变成shard1:SECONDARY>

创建data/configdb。启动配置库实例:

mkdir /usr/local/mongodb/data/configdb
nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --port 20000 --logpath=/usr/local/mongodb/log/configdb.log &

假设须要关闭mongod服务,可使用--shutdown选项。如:

/usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --shutdown

到如今为止应该有12个mongd实例。当中3个为配置库实例,剩下的属于3个副本集。接下来管理分片,在bluejoe0上启动mongs:

nohup /usr/local/mongodb/bin/mongos --port 30000 --configdb bluejoe1:20000,bluejoe2:20000,bluejoe3:20000 &

连接上mongos,配置分片信息:

mongo bluejoe0:30000mongos> use admin
switched to db admindb.runCommand({"addShard":"db1/bluejoe1:10001"})
db.runCommand({"addShard":"db2/bluejoe1:10002"})
db.runCommand({"addShard":"db3/bluejoe1:10003"})

查看分片情况:

mongos>  db.runCommand({listshards:1})
{"shards" : [{"_id" : "db1","host" : "db1/bluejoe1:10001,bluejoe2:10001,bluejoe3:10001"},{"_id" : "db2","host" : "db2/bluejoe1:10002,bluejoe2:10002,bluejoe3:10002"},{"_id" : "db3","host" : "db3/bluejoe1:10003,bluejoe2:10003,bluejoe3:10003"}],"ok" : 1
}

能够看出,虽然注冊的时候仅仅是提供了副本集的主节点,但mongos已知晓了各辅助节点;

对某个库开启分片功能:

mongos> db.runCommand({"enablesharding":"test"})
{ "ok" : 1 }
mongos> db.runCommand({"shardcollection":"test.person","key":{_id:'hashed'}})
{ "collectionsharded" : "test.person", "ok" : 1 }

插入測试数据:

mongos> for(var i=0;i<10;i++){db.person.insert({name:"bluejoe"+i});}
WriteResult({ "nInserted" : 1 })

查看数据分片存储情况:

[root@hadoop0 ~]# mongo bluejoe3:10002
MongoDB shell version: 2.6.5
connecting to: bluejoe3:10002/test
shard1:PRIMARY> db.person.find()
{ "_id" : ObjectId("546ff1013a0d0ec68b42a914"), "name" : "bluejoe0" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a915"), "name" : "bluejoe1" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a91a"), "name" : "bluejoe6" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a91b"), "name" : "bluejoe7" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a91c"), "name" : "bluejoe8" }
shard1:PRIMARY> exit
bye
[root@hadoop0 ~]# mongo bluejoe2:10001
MongoDB shell version: 2.6.5
connecting to: bluejoe2:10001/test
shard2:PRIMARY> db.person.find()
{ "_id" : ObjectId("546ff1013a0d0ec68b42a918"), "name" : "bluejoe4" }
shard2:PRIMARY> exit
bye
[root@hadoop0 ~]# mongo bluejoe3:10001
MongoDB shell version: 2.6.5
connecting to: bluejoe3:10001/test
shard3:PRIMARY> db.person.find()
{ "_id" : ObjectId("546ff1013a0d0ec68b42a916"), "name" : "bluejoe2" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a917"), "name" : "bluejoe3" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a919"), "name" : "bluejoe5" }
{ "_id" : ObjectId("546ff1013a0d0ec68b42a91d"), "name" : "bluejoe9" }
shard3:PRIMARY> 

搭建mongodb集群(副本集+分片)相关推荐

  1. MongoDB集群——副本集

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

  2. mongodb集群-副本集(CSRS)

    一.概述 (1)MongoDB复制是将数据同步在多个服务器的过程. (2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. (3)复制还允许您从硬 ...

  3. Mongodb集群 - 副本集内部选举机制

    今天有同事问我,副本集两个节点怎么做高可用,我也很好奇两个节点用副本集的方式怎么做高可用?查了一些资料,发现至少要三个节点才能做,也算是给自己普及理论知识. 选举算法 mongodb副本集的选举机制采 ...

  4. mongo集群——副本集模式

    文章目录 mongo扩容方案/使用副本集 1.增加harddisk 2.新加一台服务器作为mongodb的从节点,设置主从模式 3.采用mongodb的副本集模式 4.mongo数据的备份与还原 5. ...

  5. ELK 集群 + Redis 集群 + Nginx ,分布式的实时日志(数据)搜集和分析的监控系统搭建,简单上手使用

    简述 ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 官 ...

  6. linux下mongdb绑定ip,Linux下MongoDB安装及副本集配置 | 聂扬帆博客

    最近开始接触了MongoDB的安装配置,易部署.易使用,存储数据非常方便是它的特点. 0x00  副本集原理 MongDB副本集故障转移功能得益于它的选举机制.选举机制采用了Bully算法,可以很方便 ...

  7. mysql mongodb 集群_MongoDB 集群

    MongoDB 集群中包含一个自动分片模块 (mongos). 自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器.自动建立一个水平扩展的数据库集群系统,将数据库分表存 ...

  8. kafka 集群_Kafka集群搭建

    Kafka集群搭建 准备工作 Kafka 依赖 ZooKeeper ,所以需要提前安装好 ZooKeeper ,启动单机的zk即可 .关于安装ZooKeeper的流程可以参考我之前写的: Fantas ...

  9. Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker

    Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...

  10. MongoDB 复制(副本集)学习

    MongoDB 复制(副本集)学习 replication set复制集, 复制集,多台服务器维护相同的数据副本,提高服务器的可用性. MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数 ...

最新文章

  1. 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
  2. Spring系列之beanFactory与ApplicationContext
  3. 无根树转有根树的一般方法
  4. 大数系列三——斐波那契数列——高效万进制,亿进制
  5. 读javascript高级程序设计13-JSON
  6. CentOS7搭建lamp环境
  7. 为了帮粉丝完成毕业设计,我发现了一款私活神器
  8. CVPR2021 DRConv:即插即用!旷视孙剑、张祥雨团队提出动态区域感知的卷积,涨点显著!...
  9. linux ruby作用域,浅谈ruby语言中的一些概念(lambda, proc, block)
  10. 大众仪表板上为什么30km,50km处要标红?
  11. R语言入门1:安装R和RStudio
  12. 楚留香ai识别人脸_【专利解密】商汤科技:AI加持人脸识别
  13. 不用找,你想要的人物Flash动画素材都在这里
  14. 创建企业级地理数据库
  15. win10系统设置插入鼠标禁用触控板的方法
  16. 嵌入Circle映射和逐维小孔成像反向学习的鲸鱼优化算法-附代码
  17. 二层交换机与三层交换机交换原理
  18. 【2021年度总结】不断学习的卡卡
  19. MKS GEN_L V2.1 Klipper固件使用说明书
  20. VMvare虚拟机删除快照时卡住的解决办法

热门文章

  1. Hadoop集群(第6期)_WordCount运行详解
  2. 概率统计:第八章:假设检验
  3. 程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]
  4. 信息系统项目管理师-风险管理知识点
  5. 20_集合_第20天(Map、可变参数、Collections)
  6. Linux下巧妙使用邮件服务器之postfix(认证+web)
  7. fiddler无法获取Android端https请求解决办法
  8. Mac OS X 修复基本命令失效的问题
  9. 关于Task类处理多线程简单示例
  10. html中样式控制的问题