配置可以参考前面一篇 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. C#程序集

    我的理解: 程序集是一个物理上的概念,一个项目生成的exe或者dll都可以叫做一个程序集,internal修饰的内容可以在程序集内可见.

  2. 清理SharePoint 2010的SQL Server 2008 R2日志数据库的方法

    最近发现Sharepoint的数据库磁盘经常满,导致无法保存数据,经检查发现数据磁盘的所有日志文件远远大于数据文件,因此需要收缩日志文件,一开始利用图形化的收缩文件方式,只有收缩数据文件的大小,对于日 ...

  3. 新发布 | 微软开源之路最新进展:FreeBSD落地由世纪互联营运的Microsoft Azure

    微软和开源,是近几年业界孜孜不倦的讨论话题,微软也在开源之路越走越宽.最近与 FreeBSD 基金更紧密的合作踏出了微软在开源之路上的又一大步. 自2012年开始,微软在 FreeBSD 与其虚拟化平 ...

  4. supersocket 通过配置文件启动服务 总是 初始化失败的 解决办法

    <serverTypes> <add name="APPServerType" type="TMPServer.APP.APPServer, TMPSe ...

  5. Linux学习笔记之Linux第一课-基本介绍

    Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...

  6. Java Hotspot client模式和server模式的区别

    当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,服务起来之后,性能 ...

  7. IEEP-网络实施-项目交付流程

    1.项目交付流程 1.1 定义 项目交付流程规定了对项目实施的管理和作业控制要求,保证了工程项目实施按照规定的程序进行 1.2 重要性 1.2.1提高客户满意度 1.2.2 提高工程效率,节约成本 1 ...

  8. vue-cli run dev 和 run build 出现的问题(运行项目、打包项目)

    前些天做项目,过程中遇到了一个比较奇怪的问题:npm run dev 和 npm run build 的时候,出现了错误,导致项目无法启动.打包无法成功.报了一堆错误: 错误展示: 找了一下解决方案, ...

  9. Linux--Bind服务搭建

    Bind域名解析服务 服务功能:提供域名解析 构建主从域名服务器 1)环境部署 ip=192.168.1.50(主) ip=192.168.1.51(从) [root@localhost Packag ...

  10. vuejs 开发中踩到的坑

    用 v-for 循环式  每个item的值相等的情况下,会影响v-model的双向绑定: Modal 组件开发,主要用slot 标签来实现 <template> <transitio ...