window系统上实现mongodb副本集的搭建
一、问题引出
假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了。此时我们就需要我们的mongodb实现高可用,当一个mongod实例出现问题后,其余的mongod实例可以继续提供服务,即自动故障转移。mongodb的复制集(replica set)就可以实现我们的这个需求。
二、什么是复制集
mongodb的复制集指的是一组拥有相同实例的mongod实例所组成的集群。其中有一台服务器充当主节点(Primary Node),主节点可以实现数据的写入和读取操作。其余的节点可以充当备份节点(Secondary Node),备份节点用于保存主节点的数据备份,如果主节点挂了,那么Secondary Node会被选举中Primary Node。在mongodb 中还存在一种仲裁节点(Arbiter Node),仲裁节点只是用于进行投票选举Primary Node,不进行数据的存储。
三、复制集小知识点
1、在复制集中,主节点(primary Node)是唯一的,但是它是不固定的,当主节点宕机后,会重新选举出新的主节点。
2、仲裁节点(Arbiter Node)无法进行存储数据,只是用于充当选举的
3、当复制集中的节点 <= 1/2 时集群只可以读,不可进行写入。
4、对于同一个复制集而言,其配置参数 replSet 的值必须是一样的。
5、数据目录必须要先存在,否则会报错。
6、在window 上使用 --config 指定启动mongod的配置文件路径,liunx上使用 -f
7、复制集的初始化必须要在admin集合上进行操作。
8、仲裁节点只可以存在一个。
9、从节点默认不可查询数据,需要 执行 rs.slaveOk(true) 命令后,才可以查询出数据。
10、如果复制集中有某一台机器的性能明显比别的机器好,那么我们希望该节点成为主节点的概率大一些,此时我们就需要设置 priority(0-1000) 属性的值大一些,该值是复制集的参数选项,见下方表格中复制集的初始化。(注意:如果a节点的priority值最大,此时它宕机了,主节点被b节点获取到了,过一段时间a节点恢复了,那么a节点就会再次获取到主节点,b节点变成从节点。)
11、隐藏节点: priority=0 && hidden=true 该节点拥有和主节点一样的数据,但是不可以被客户端程序发现,使用rs.isMaster()方法无法查询到此节点,rs.status() 可以看到此节点。
12、延时节点: priority=0 && hidden=true && slaveDelay=3600 表示和主节点的数据延时3600秒,即该节点的数据和主节点的数据会存在一个小时的延时。
13、如果要对复制集的某个节点进行维护,那么可以先将这个节点关闭,然后注释掉这个节点中的配置文件中的replSet属性,以单节点的方式启动,维护好后,关闭节点,恢复这个属性,然后再以复制集进行启动。
四、复制集节点数量
在mongodb的复制集中,如果要一个复制集是可用的,那么存活的节点数必须要 > 1/2 的总节点数,即当有一个4个节点的复制集和3个节点的复制集,当复制集不可用时,都是有2个节点挂掉,此时存活的节点会降级成从节点。所以我们复制集一般使用奇数个几点,假设我们没有那么多的机器,那么我们可以添加一个仲裁节点。
大多数原则:当集群中的存活的节点数量小于集群总数的 1/2时,集群不可用。
大多数原则举例:假设我们有2个机房,上海机房和北京机房,总共署了7个节点,其中上海机房有4个mongod节点,北京机房有3个mongod节点,主节点在上海机房。此时北京机房的网络发生问题无法连接到上海的机房,如果没有大多数原则,那么北京机房将发生master选举,此时就会存在mongodb集群中就会存在2个主节点。如果存在大多数原则,因为总节点是7个,北京机房只有3个节点,3个节点小于总节点的1/2,因此不会发生master选举。
五、创建一个复制集(此处创建一个主节点,2个备份节点的复制集)
机器(host) | mongodb端口(port) | 配置文件(etc) |
192.168.244.1 | 28001 | D:\Program Files\MongoDB\rs\rs-study\etc\28001.conf |
192.168.244.1 | 28002 | D:\Program Files\MongoDB\rs\rs-study\etc\28002.conf |
192.168.244.1 | 28003 | D:\Program Files\MongoDB\rs\rs-study\etc\28003.conf |
** 配置文件的内容
28001.conf |
#mongodb端口 port=28001 #绑定ip,只有这个ip才可以访问上mongodb # 日志文件的路径 # 数据文件的目录 #日志以追加的方式存在 # mongodb进程的pid的值将存入此文件 |
28002.conf |
port=28002 |
28003.conf | port=28003 bind_ip=192.168.244.1 logpath=D:\Program Files\MongoDB\rs\rs-study\log\28003.log dbpath=D:\Program Files\MongoDB\rs\rs-study\data\28003\ logappend=true pidfilepath=D:\Program Files\MongoDB\rs\rs-study\data\28003.pid oplogSize=1024 replSet=rs-study |
注意:
1、三个配置文件的 replSet 的值必须是一致的。 2、dbpath这个目录必须要先存在。
3、oplogSize的值但是是MB,这个值最好大一些,这个值决定了主节点上local数据库中oplog这个固定集合的大小,从节点从这个固定集合中实现数据的复制。
4、oplog的默认大小:(对于windows和unix系统,默认是系统磁盘可用的5%,不同的引擎存在不同的上下限)
** 启动mongodb
28001 | mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28001.conf" |
28002 | mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28002.conf" |
28003 | mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28003.conf" |
** 连上28001,执行复制集的初始化
连上: | mongo 192.168.244.1:28001 |
初始化: | use admin rs.initiate({ _id : "rs-study", members : [ {_id : 0,host : "192.168.244.1:28001","priority":10}, {_id : 1,host : "192.168.244.1:28002"}, {_id : 2,host : "192.168.244.1:28003"} ] }); |
注意:
1、在连上mongod时,必须要指定 192.168.244.1,因为这个参数是在mongodb的配置文件2800*.conf中的bind_ip指定的。
2、复制集的初始化必须要先使用 use admin,即必须要在admin集合上进行操作。
3、最外层 _id 的值为复制集中 replSet 的值,里面members中的 _id 的值不可重复。
4、priority(0-1000)属性的默认值为1,此值越大越有可能成为主节点。
** 初始化副本集
六、复制集的基本操作方法
方法 | 作用 |
描述 |
rs.initiate({}) | 初始化复制集 |
1、use admin 2、执行此方法 |
rs.reconfig() | 重新初始化复制集 |
1、进入到主节点 2、只有该节点可能成为主节点的节点上才可以进行此方法 3、执行此方法会有一瞬间会断开连接,如果此时主库有写操作会有问题 |
rs.isMaster() | 返回副本集的配置和状态子集 | |
rs.status() | 查看副本集的状态 | |
rs.config() | 查看副本集的配置 | |
rs.stepDown(秒1,秒2) | 将主节点变成从节点 | |
rs.add({}) | 添加复制集成员 |
1、rs.add("host:port") 2、rs.add({"host":"",....}) 3、rs.add("host:port",true) 添加仲裁节点 |
rs.addArb("host:port") | 添加仲裁成员 | |
rs.remove("host:port") | 删除复制集成员 |
1、建议先将需要删除的复制集成员关闭,然后再删除。 2、该命令会短暂的断开并强制重连 |
rs.slaveOk(true) | 允许复制集上的该成员读取数据 |
window系统上实现mongodb副本集的搭建的更多相关文章
- MongoDB副本集的搭建
副本集是mongodb提供的一种高可用解决方案.相对于原来的主从复制,副本集能自动感知primary节点的下线,并提升其中一个Secondary作为Primary. 整个过程对业务透明,同时也大大降低 ...
- linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)
搭建前准备 MongoDB版本:4.0 主要参考搭建MongoDB副本集网站:https://www.jianshu.com/p/f021f1f3c60b 安装之前最好先确定一下几点: 防火墙关闭 M ...
- [ MongoDB ] 副本集的搭建及测试
Replica Sets 复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图:
- mongodb副本集群搭建
一.环境介绍 1.机器信息 10.40.6.68 10.40.6.108 10.40.6.110 软件环境为centos 6.x 2.mongodb 下载链接地址 https://www.mongod ...
- MongoDB副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- MongoDB 副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- Docker下搭建mongodb副本集
背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...
- 在centos7上搭建mongodb副本集
1.安装副本集介绍 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的 ...
随机推荐
- linux网络编程(一)
============================================================== 第一天:基本概念.TCP.FTP: =================== ...
- JS020. Array map()函数查到需要的元素时跳出遍历循环,不再执行到数组边界
Array.prototype.map() map( ) 方法创建一个 新数组 *,其结果是该数组中的每个元素是调用一次提供的 函数后的返回值 *.[ MDN / RUNOOB ] * map 添加 ...
- 尚硅谷Java基础学习笔记
综述: Java学习图谱: 常见dos命令: 操作案例: Java语言的特点: 面向对象 两个基本概念:类.对象 三个基本特性:封装.继承.多态 健壮性.可继承性 write once,run any ...
- clickonce的密钥到期问题处理
最近clickonce的密钥到期了,在网上找了些文章用来修改密钥的到期时间,已成功生成新密钥,好不好使暂时未测. 在此小结一下,以备参考: 1.在原密钥所属电脑上cmd执行如下命令 renewcert ...
- java.lang.SecurityException: MODE_WORLD_READABLE错误解决
问题描述:运行Android项目有以下报错: 解决方法: 把 MODE_WORLD_READABLE 更换成 MODE_PRIVATE 即可,因为MODE_WORLD_READABLE 模式已经被废弃 ...
- ESP8266- AP模式的使用
打算通过该模式,利用手机APP完成配网 • AP,也就是无线接入点,是一个无线网络的创建者,是网络的中心节点.一般家庭或办公室使用的无线路由器就是一个AP. • STA站点,每一个连接到无线网络中的终 ...
- PHP的zip压缩工具扩展包学习
总算到了 PHP 的拿手好戏上场了,前面我们学习过 Bzip2 . LZF . Phar 和 rar 这些压缩相关扩展在 PHP 中的使用,不过它们要么是太冷门,要么就是很多功能不支持.而 Zip 则 ...
- Orchard Core Framework Samples
解决方案包含内容 多租户应用 一个ASP.NET Core MVC应用程序,它引用模块项目,并为两个启用了不同模块的租户提供支持. 此Web应用程序的主页提供了更多信息,并链接到两个租户和模块端点.租 ...
- Linux系列(24) - chmod
前言 在Unix和Linux的中,每个文件(文件夹也被看作是文件)都有三种权限:读.写.运行. 被授予权限的用户身份有三种:当前文件的拥有者,与拥有者属于同组者(同一个group),其他人 hello ...
- 【译】.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序
.NET Core 提供的发布应用程序选项 self-contained 是共享应用程序的好方法,因为应用程序的发布目录包含所有组件.运行时和框架.您只需要告诉使用者应用程序的入口 exe 文件,就可 ...