配置可以参考前面一篇 https://www.cnblogs.com/a-horse-mosaic/p/9284010.html

副本集是一组服务器,其中有一个主服务器(primary),用于处理客户端请求;还有多个备份服务器(secondary),用于保存主服务器的数据副本。如果主服务器崩溃了,备份服务器会自动将其中一个成员升级为新的主服务器。
使用复制功能时,如果有一台服务器宕机了,仍然可以从副本集的其他服务器上访问数据。如果服务器上的数据损坏或者不可访问,可以从副本集的某个成员中创建一份新的数据副本。
在本地建立包含三个成员的副本集:
(1)首先在本地机器建立三个文件夹,用于存放数据,路径分别是F:\mongo1\data\db ;F:\mongo2\data\db ;F:\mongo3\data\db:
(2)分别在三个单独的cmd中,启动服务器(每次都要启动这三个服务器):
启动服务器一:

启动服务器二:

启动服务器三:

三个服务器启动完毕之后,不要关闭。另开一个cmd窗口,连接到1111端口的服务器(连接其他端口也可以):

每次启动,主服务器可能会不一样,如果连接的是主服务器,前缀会变成如下所示:

创建一个配置文件,在配置文件中列出每一个成员,知道彼此的存在(第二次启动就不需要再配置):

注意:其中的”_id”值就是每一个服务器启动时副本集的名字(“test”),这个名称要保持一致。
将这个配置文件发送给其中一个副本集成员,然后该成员会负责将配置文件传播给其他成员,如果副本集中已经有一个有数据的成员,那就必须将配置对象发送给这个拥有数据的成员,如果拥有数据的成员不止一个,那么就无法初始化副本集:

现在可以查看状态信息:

如果是第二次启动,可以直接查看状态信息,不需要在设置配置文件。
查看状态信息,可以看到主服务器和备份服务器:

连接主服务器后,可以写入数据:

重新启动一个cmd,连接一个备份服务器,查看是否数据被复制:

备份节点可能会落后于主节点,可能没有最新写入数据,所以备份节点默认情况下会拒绝读取请求,这是为了保护应用程序,以免意外连接到备份节点,读取到过期数据:

从备份节点读取数据,需要设置标识:

从备份服务器查询结果:

在主节点插入数据后,如果有备份节点服务器没有启动,当在该备份启动后,也可以查询到写入的数据:

但是对于不是副本集中的备份节点(可能之前被删除了,它的前缀变成 test:other),是不能查询到写入的数据:

不能对备份节点执行写入操作,备份节点只能通过复制功能写入数据,不接受客户端的写入请求:

可以随时添加或删除成员,先按之前的方法创建一个备用服务器,再添加进去:

rs是一个全局变量,其中包含与复制相关的辅助函数。
删除成员:

也可以这样查看修改结果:

修改现有的成员:
为了修改副本集成员,可以创建新的配置文档,然后调用rs.reconfig()方法,如下将第二个主机端口改为3344:

自动故障转移:当主节点挂了,其中一个备份节点会自动选举为主节点:
客户端在单台服务器上可以执行的请求,都可以发送到主节点执行(读、写、执行命令、创建索引等)
副本集中”大多数”:选择主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点。”大多数”被定义为”副本中一半以上的成员”:

如果副本集中有些成员挂了或者不用,并不会影响”大多数”,因为大多数是基于副本集配置来计算的。
只有达到”大多数”的情况才能选举或者维持主节点,这是为了避免出现多个主节点。
推荐的配置方式:
1、将”大多数”成员放在同一个数据中心。总有一个数据中心满足”大多数”条件,可以判断出是数据中心之间的网络问题还是中心内部的问题。
2、如果成员总数总是偶数,成员平分到不同的数据中心中,任何一边都无法满足”大多数”条件。可以在第三个地方放置一个用于决定胜负的副本集成员。这样,任何一个数据中心都可以满足大多数。
选举机制
当一个备份节点无法与主节点连通时,它就会联系并请求其他的副本集成员将自己选举为主节点。其他节点会判断:a、自身是否能够与主节点连通;b、希望被选举为主节点的备份节点的数据是否是最新;c、是否有其他更高优先级的成员可以被选举为主节点。
如果被选举为主节点的成员能够得到大多数成员投票,那它就会成为主节点。
但是,即使”大多数”成员中只有一个否决了本次选举,那选举就会取消。一张否决票相当于10000张赞成票,可以看到得票数为较大的负数。
每个成员都只能要求自己被选举为主节点,不能推荐其他成员被选举为主节点,只能为申请成为主节点的候选者投票。
选举仲裁者
配置2个成员的副本集:一个主节点和一个备份节点。假如其中一个成员不可用,那网络任何一端都无法满足大多数的条件,这个副本集会退化为拥有两个备份节点(没有主节点)。
针对这种缺点,使用一种特殊类型的成员,成为”仲裁者”。它的唯一作用就是参与选举。仲裁者并不保存数据,也不会为客户端提供服务:它只是为了帮助具有两个成员的副本集能够满足大多数这个条件。
仲裁者不能保存数据(前缀是test:arbiter):

启动仲裁者与启动普通mongod的方式相同,副本集的名称保持一致,将仲裁者添加到副本集中:

添加的结果:

删除仲裁者,也是正常的操作:

使用另一种方法添加仲裁者:

成员一旦以仲裁者的身份添加到副本集中,它就永远只能是仲裁者,无法将仲裁者重新配置为非仲裁者,反之亦然。
最多只能使用一个仲裁者,如果节点数量是奇数,就不需要仲裁者。
在不知道应该将一个成员作为数据节点还是作为仲裁者时,应该将其作为数据节点。应该尽可能在副本集中使用奇数个数据成员,而不要使用仲裁者。
优先级
优先级用于表示一个成员渴望成为主节点的程度。优先级的取值范围可以是0-100。默认是1,将优先级设为0,表示成员永远不能够成为主节点。这样的成员被成为被动节点。

设置优先级并不会导致副本集中选不出主节点,也不会使数据不够新的成员成为主节点(一直到它的数据更新到最新)。
修改副本集配置时,新的配置必须要发送给在新的配置下可能成为主节点的成员。无法在一次reconfig操作中将当前主节点的优先级设置为0,也不能对所有成员优先级为0的副本集执行reconfig。
优先级的值只会影响副本集成员间相对优先级大小关系。
隐藏成员
客户端不会向隐藏成员发送请求,隐藏成员只有在其他复制源都不可用时,才会被作为复制源。只有优先级为0的成员才能被隐藏,不能将主节点隐藏:

注意:使用rs.status()和rs.config()能够看到隐藏成员,隐藏成员只对isMaster()不可见。客户端连接到副本集时,会调用isMaster()来查看可用成员。
延迟备份节点
有意设置延迟节点,延迟节点的数据会比主节点延迟指定的时间(单位是 秒),从先前的备份中恢复过来,避免数据遭到毁灭,可以使用 slaveDelay配置。
也是要求成员的优先级为0,应该将延迟备份节点隐藏掉。避免客户端请求。
创建索引
备份节点并不需要与主节点拥有相同的索引,甚至可以没有索引。可以配置 buildIndexs:false 。可以阻止备份节点创建索引。也是要求成员的优先级为0。
一旦成员设置为false,那就永远无法恢复为可以创建索引的正常成员。除非将这个成员从副本集中移除,再删除它的所有数据,任何再添加到副本集中,允许它同步进行数据更新。

附录:

由于windows上启动配置进程,需要开多个cmd窗口,所以用.bat批处理文件封装下,每次直接执行批处理就可以了。

mongo1_start.bat

mongo2_start.bat

mongo3_start.bat

mongo4_start.bat

connect_mongo1.bat

客户端测试

MongoDB在单机上搭建分片副本集群(windows),版本二的更多相关文章

  1. MongoDB在单机上搭建分片副本集群(windows)

    ------------------------------1.安装MongoDB...... ------------------------------2.准备好文件夹 --config:配置文件 ...

  2. 在 Ubuntu 上搭建 Hadoop 分布式集群 Eclipse 开发环境

    一直在忙Android FrameWork,终于闲了一点,利用空余时间研究了一下Hadoop,并且在自己和同事的电脑上搭建了分布式集群,现在更新一下blog,分享自己的成果. 一 .环境 1.操作系统 ...

  3. mongodb3.6集群搭建:分片+副本集

    mongodb是最常用的noSql数据库,在数据库排名中已经上升到了前五.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  4. 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)

    1.JDK安装 在我的部署单节点kafka的博客里有相关的方法.(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的 ...

  5. [原创]在Docker上部署mongodb分片副本集群。

    一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...

  6. MongoDB for OPS 03:分片 shard 集群

    写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...

  7. PC(win10)上搭建 kubernetes + docker 集群环境

    最近kubernetes很火,加上我又在寻找适合快速搭建测试环境的方法,kubernetes的理念很适合用于测试环境的搭建. 因此在学习的过程中写下此教程(记录)以供回顾. 0x00 环境准备 0x0 ...

  8. Nginx + Tomcat 在 Windows7 上搭建负载均衡集群

    一.安装Tomcat和Nginx 首先安装两个apache-tomcat-8.0.41,下载地址:http://tomcat.apache.org 并安装一个nginx-1.13.0,下载地址http ...

  9. Mysql Cluster 集群 windows版本

    VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(N ...

随机推荐

  1. Azure 8月众多新版本公布

    Azure 8月新发布:IoT 中心S3 版,Azure 热/冷存储层,DocumentDB,SQL Server Stretch Database, MySQL 5.7, Cloud Foundry ...

  2. solidity语言9

    输入参数 pragma solidity ^0.4.16; contract Simple { function taker(uint _a, uint _b) public pure { // do ...

  3. C# xml转换成ini格式

    最近一直在写一个关于自动转换文件格式的代码,一点小心得. 目标xml文件内容,我的命名是data2.xml <?xml version="1.0" encoding=&quo ...

  4. python 学习 (迟到的2017小结)

    2017过去了,从前端开发转测试,入行一年多,写了web的UI自动化测试框架,看了python基础教程,核心编程,算是入门python了吧.目前呢,想开发个接口的自动化测试平台.           ...

  5. Facebook 新开源了 2 个东西,一个语音识别系统(wav2letter++)和一个机器学习库(flashlight)

    Open sourcing wav2letter++, the fastest state-of-the-art speech system, and flashlight, an ML librar ...

  6. March 16 2017 Week 11 Thursday

    Adventure may hurt you, but monotony will kill you. 也许冒险会让你受伤,但一成不变会让你灭亡. The very theme of the univ ...

  7. 初识EMC

    EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...

  8. 安卓Socket开发注意事项

    如果要在安卓app里用到Socket通信,要满足: 1.在写代码的activity里import进Socket相关的包,这个很easy,如果你不知道要import什么包,也可以先不指定,可       ...

  9. c++互斥锁的实现

    class IMyLock { public: virtual ~IMyLock(){} ; ; }; class Mutex : public IMyLock { public: Mutex(); ...

  10. 用户级线程demo

    http://blog.csdn.net/dabing69221/article/details/17426953 前言: 前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案 ...