MongoDB在单机上搭建分片副本集群(windows),版本二
配置可以参考前面一篇 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),版本二的更多相关文章
- MongoDB在单机上搭建分片副本集群(windows)
------------------------------1.安装MongoDB...... ------------------------------2.准备好文件夹 --config:配置文件 ...
- 在 Ubuntu 上搭建 Hadoop 分布式集群 Eclipse 开发环境
一直在忙Android FrameWork,终于闲了一点,利用空余时间研究了一下Hadoop,并且在自己和同事的电脑上搭建了分布式集群,现在更新一下blog,分享自己的成果. 一 .环境 1.操作系统 ...
- mongodb3.6集群搭建:分片+副本集
mongodb是最常用的noSql数据库,在数据库排名中已经上升到了前五.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)
1.JDK安装 在我的部署单节点kafka的博客里有相关的方法.(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的 ...
- [原创]在Docker上部署mongodb分片副本集群。
一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...
- MongoDB for OPS 03:分片 shard 集群
写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...
- PC(win10)上搭建 kubernetes + docker 集群环境
最近kubernetes很火,加上我又在寻找适合快速搭建测试环境的方法,kubernetes的理念很适合用于测试环境的搭建. 因此在学习的过程中写下此教程(记录)以供回顾. 0x00 环境准备 0x0 ...
- Nginx + Tomcat 在 Windows7 上搭建负载均衡集群
一.安装Tomcat和Nginx 首先安装两个apache-tomcat-8.0.41,下载地址:http://tomcat.apache.org 并安装一个nginx-1.13.0,下载地址http ...
- Mysql Cluster 集群 windows版本
VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(N ...
随机推荐
- SpringBoot-mvn插件
在maven projects中有一组springboot的插件 六个选择: 0.build-info:Generate a build-info.properties file based the ...
- Jenkins新建节点,启动方式没有“通过Java Web启动代理”选项怎么办?
在Jenkins中,打开“系统管理”→“管理节点”→“新建节点”页面时,“启动方式”选项没有“通过Java Web启动代理”,怎么办? 打开“系统管理”,进入“全局安全配置”页面. 1. “JNLP代 ...
- OLAP和数据挖掘的区别
总结来说: 数据仓库提供了一个分析的数据源 数据挖掘能分析出未知的信息,提出假设 OLAP能通过分析,验证假设 从技术角度看,商务智能的过程是企业的决策人员以企业中的数据仓库为基础,经由数据挖掘工具. ...
- python 02/100例
题目 输入某年某月某日,判断这一天是这一年的第几天? 分析 例如:2018年6月19日 天数 = 19天 + 一月天数 + 2月天数 + ... + 6月天数 注意 闰年的2月是29天,如果年份是闰年 ...
- May 28th 2017 Week 22nd Sunday
Behind every beautiful thing, there's some kind of pain. 美丽背后,必有某种努力. No pains, no gains. Maybe we n ...
- react-webpack-express
这是一个整合react express 实现前后台交互,并且采用webpack进行打包和解析文件.其实react官方有一个脚手架create react app,也可以看那个,但是这个脚手架webpa ...
- 细说new与malloc的10点区别(转载)
原地址https://www.cnblogs.com/QG-whz/p/5140930.html#_label1_0 new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储 ...
- 【洛谷5283】[十二省联考2019] 异或粽子(可持久化Trie树+堆)
点此看题面 大致题意: 求前\(k\)大的区间异或和之和. 可持久化\(Trie\)树 之前做过一些可持久化\(Trie\)树题,结果说到底还是主席树. 终于,碰到一道真·可持久化\(Trie\)树的 ...
- App版本号定义与说明基础知识
版本控制比较普遍的三种命名格式 GNU 风格的版本号命名格式 主版本号 . 次版本号 [. 修正版本号 [. 编译版本号 ]] 示例 : 1.2.1, 2.0, 5.0.0 build-13124 W ...
- 【luoguP1996】【luogu-original】约瑟夫问题
先来看题目: P1996 约瑟夫问题 题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人 ...