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 ...
随机推荐
- Azure 8月众多新版本公布
Azure 8月新发布:IoT 中心S3 版,Azure 热/冷存储层,DocumentDB,SQL Server Stretch Database, MySQL 5.7, Cloud Foundry ...
- solidity语言9
输入参数 pragma solidity ^0.4.16; contract Simple { function taker(uint _a, uint _b) public pure { // do ...
- C# xml转换成ini格式
最近一直在写一个关于自动转换文件格式的代码,一点小心得. 目标xml文件内容,我的命名是data2.xml <?xml version="1.0" encoding=&quo ...
- python 学习 (迟到的2017小结)
2017过去了,从前端开发转测试,入行一年多,写了web的UI自动化测试框架,看了python基础教程,核心编程,算是入门python了吧.目前呢,想开发个接口的自动化测试平台. ...
- Facebook 新开源了 2 个东西,一个语音识别系统(wav2letter++)和一个机器学习库(flashlight)
Open sourcing wav2letter++, the fastest state-of-the-art speech system, and flashlight, an ML librar ...
- March 16 2017 Week 11 Thursday
Adventure may hurt you, but monotony will kill you. 也许冒险会让你受伤,但一成不变会让你灭亡. The very theme of the univ ...
- 初识EMC
EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...
- 安卓Socket开发注意事项
如果要在安卓app里用到Socket通信,要满足: 1.在写代码的activity里import进Socket相关的包,这个很easy,如果你不知道要import什么包,也可以先不指定,可 ...
- c++互斥锁的实现
class IMyLock { public: virtual ~IMyLock(){} ; ; }; class Mutex : public IMyLock { public: Mutex(); ...
- 用户级线程demo
http://blog.csdn.net/dabing69221/article/details/17426953 前言: 前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案 ...