为什么需要集群

  • 为了让数据安全
  • 高(24* 7)数据可用性
  • 灾难恢复
  • 无停机维护(如备份,索引重建,压实)
  • 读缩放(额外的副本读取)
  • 副本集对应用程序是透明

设置集群

准备工作

在MongoDB的集群是需要奇数个节点才能正常的运行,我们这里设置一个最小的节点的集群:1个主节点和2个从节点

  1. 分别建立三个文件夹来存放MongoDB的三个节点的文件

  2. 设置mongod.cfg文件

     systemLog:
    destination: file
    path: D:\Program Files\MongoDB\Server\3.0\0\log\mongod.log
    storage:
    dbPath: D:\Program Files\MongoDB\Server\3.0\0\blogDB
    #网络
    net:
    port: 27017
    # bindIp: 127.0.0.1,192.168.1.106 #默认是全部IP
    #授权
    security:
    authorization: disabled
    # keyFile: D:\Program Files\MongoDB\Server\3.0\rsKey #用于集群的验证,建议使用ssl,我为了简单,rsKey只是一个普通的文本
    #集群
    replication:
    replSetName: rs0 #集群名

三个节点的配置除了端口和路径需要改改,其他基本一致,我的三个节点的端口分别为:27017,27018,27019

启动集群

分别启动三个MongoDB实例,具体怎么启动,请参考我的MongoDB——基础入门

配置集群

C:\Users\Tengit>mongo
MongoDB shell version: 3.0.6
connecting to: test
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "tengit-2:27017",
"ok" : 1
}
rs0:PRIMARY> rs.add("tengit-2:27018")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("tengit-2:27019")
{ "ok" : 1 }
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2015-10-14T02:51:00.788Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "tengit-2:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 122,
"optime" : Timestamp(1444791053, 1),
"optimeDate" : ISODate("2015-10-14T02:50:53Z"),
"electionTime" : Timestamp(1444790978, 2),
"electionDate" : ISODate("2015-10-14T02:49:38Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "tengit-2:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 32,
"optime" : Timestamp(1444791053, 1),
"optimeDate" : ISODate("2015-10-14T02:50:53Z"),
"lastHeartbeat" : ISODate("2015-10-14T02:50:59.873Z"),
"lastHeartbeatRecv" : ISODate("2015-10-14T02:51:00.118Z"
),
"pingMs" : 0,
"syncingTo" : "tengit-2:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "tengit-2:27019",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 6,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2015-10-14T02:50:59.871Z"),
"lastHeartbeatRecv" : ISODate("2015-10-14T02:51:00.138Z"
),
"pingMs" : 0,
"configVersion" : 3
}
],
"ok" : 1
}
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2015-10-14T02:51:50.492Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "tengit-2:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 172,
"optime" : Timestamp(1444791053, 1),
"optimeDate" : ISODate("2015-10-14T02:50:53Z"),
"electionTime" : Timestamp(1444790978, 2),
"electionDate" : ISODate("2015-10-14T02:49:38Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "tengit-2:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 82,
"optime" : Timestamp(1444791053, 1),
"optimeDate" : ISODate("2015-10-14T02:50:53Z"),
"lastHeartbeat" : ISODate("2015-10-14T02:51:49.886Z"),
"lastHeartbeatRecv" : ISODate("2015-10-14T02:51:50.125Z"
),
"pingMs" : 0,
"syncingTo" : "tengit-2:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "tengit-2:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 56,
"optime" : Timestamp(1444791053, 1),
"optimeDate" : ISODate("2015-10-14T02:50:53Z"),
"lastHeartbeat" : ISODate("2015-10-14T02:51:49.886Z"),
"lastHeartbeatRecv" : ISODate("2015-10-14T02:51:50.150Z"
),
"pingMs" : 0,
"configVersion" : 3
}
],
"ok" : 1
}
rs0:PRIMARY>

附带一份C#访问MongoDB的测试程序,点击下载

MongoDB--集群的更多相关文章

  1. MongoDB集群卡死问题

    一年前搭了个MongoDB集群,跑得还算不错,但是有几次遇到过服务卡死的问题.处理起来已经得心应手了,拿来跟大家分享一下: 故障现象: 业务查询缓慢,而且会有连接异常: { "serverU ...

  2. mongodb集群安装及到现在遇到的一些问题

    集群搭建 只有3台服务器,开始搭建mongodb集群里主要参照的是http://www.lanceyan.com/tech/arch/mongodb_shard1.html,端口的设置也是mongos ...

  3. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  4. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  5. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  6. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  7. 搭建高可用mongodb集群(三)—— 深入副本集内部机制

    在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...

  8. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  9. 搭建高可用mongodb集群(一)——配置mongodb

    在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...

  10. MongoDB集群架构及搭建

    MongoDB分布式集群 MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高集群提高读写服务的能力和数据存储能力.主要通过副本集(replica)对数据进行备份,通过分片(shardi ...

随机推荐

  1. ditto复制增强

    1.下载 http://ditto-cp.sourceforge.net/ 2.用法   ctrl+` ctrl+数字 或者  ctrl +`  然后用鼠标选择 soeasy

  2. python学习笔记:"爬虫+有道词典"实现一个简单的英译汉程序

    1.有道的翻译 网页:www.youdao.com Fig1 Fig2 Fig3 Fig4 再次点击"自动翻译"->选中'Network'->选中'第一项',如下: F ...

  3. SpringBoot整合Email(电子邮件服务)

    (1).导入starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  4. 根据txt中的文件名将文件复制到目标文件夹中

    功能如标题,之所以这么做是有的时候文件数目较多,一个一个复制太复杂了,代码如下: # -*- coding:utf-8 -*- #2018_03_18 #实现功能:根据文件名字将对应的文件复制到目标地 ...

  5. 笔记软件 notion

    笔记软件 notion :     https://www.notion.so 注册:zengxinle@126.com     团队:Hopesun

  6. Python3学习笔记18-访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从Student类的定义来看,外部代码还是可以自由地修改一个实例的name ...

  7. centos7 部署 docker ce

    =============================================== 2019/4/9_第1次修改                       ccb_warlock === ...

  8. SonarQube代码质量管理工具的升级(sonarqube6.2 + sonar-scanner-2.8 + MySQL5.6+)

    SonarQube升级注意事项 0. 前提条件 如果之前是使用sonarqube5.2 + sonar-runner-2.4 +MySQL5.5版本或者类似的组合. 安装方法请参照SonarQube代 ...

  9. Android动画之逐帧动画(FrameAnimation)详解

    今天我们就来学习逐帧动画,废话少说直接上效果图如下: 帧动画的实现方式有两种: 一.在res/drawable文件夹下新建animation-list的XML实现帧动画 1.首先在res/drawab ...

  10. ios 侧边手势滑动返回 禁用/开启 功能

    // 禁用  返回手势       if ([self.navigationController respondsToSelector:@selector(interactivePopGestureR ...