Mongodb本机部署副本集
目录
- 知识储备
- 1.为什么我们需要搭建副本集模式呢?
- 2.副本集成员构架
- 应用目标
- 实践步骤
- 一、部署副本集
- 1. 创建数据目录
- 2. 启动副本集
- 3. 关闭MongoDB服务
- 4.登录mongod实例
- 5. 创建副本集配置对象rsconf
- 6. 初始化副本集
- 7. 查看副本集成员状态
- 8. 判断是否为主节点
- 二、验证副本集数据的一致性
- 1. 主节点添加数据
- 2. 副节点查看数据
- 三、移除一台服务器
- 四、 添加一台服务器
- 五、 故障转移
- 六、 调整副本优先级
- 七、配置隐藏节点
- 八、配置延迟节点
- 九、配置副本集投票权
- 写在最后
知识储备
1.为什么我们需要搭建副本集模式呢?
MongoDB独立模式可以简单且快速的构建MongoDB数据库系统,然而独立模式存在弊端,即一旦MongoDB发生宕机,将会面临数据丢失的风险,这在生产环境中是不允许发生的,此时我们可以利用MongoDB提供的高可用机制,即复制。
MongoDB支持两种复制类型:传统的主/从复制和副本集,副本集可以理解为传统主/从复制的一种复杂形
式 , 支持自动故障恢复功能 , 拥有更高的可用性 。
2.副本集成员构架
客户端程序(Client Application)通过驱动器(Driver)连接副本集主节点(Primary)进行读写操作,当主节点数据副本发生变化,此时副本节点(Secondary)通过Replication(复制)同步主节点的数据副本,使副本集中副本节点与主节点存储相同数据副本。
副本集中的各节点还会通过传递心跳信息(Heartbeat)来检测各自的健康状态。当主节点故障时,拥有投票权的副本节点和仲裁节点(Arbiter)会触发一次新的选举操作,并从副本节点中选举出新的主节点,以确保副本集正常运行。
应用目标
学习回顾完上述基础知识框架以后,我们有了更明确的实践目标。知道我们接下来要实践的内容从哪里来,到哪里去,要完成具体哪个任务。此篇博文主要记录如何在本机完成MongoDB副本集的部署。
实践步骤
一、部署副本集
1. 创建数据目录
打开dos窗口 (win+R)
创建如下三个文件夹 : 为每个成员创建必要的数据目录
mkdir d:\srv\mongodb\rs0-0
mkdir d:\srv\mongodb\rs0-1
mkdir d:\srv\mongodb\rs0-2
执行完上述操作之后,会在d:\srv\mongodb\目录下创建rs0-0、rs0-1和\rs0-2三个文件夹。
相应文件夹路径下具体结果如图所示:
2. 启动副本集
First memeber: 新打开一个dos窗口执行如下命令(以管理员身份打开):
C:\WINDOWS\system32> mongod --replSet rs0 --port 27017 --dbpath d:\srv\mongodb\rs0-0
Second member: 再新打开一个dos窗口 执行如下命令(以管理员身份打开):
C:\WINDOWS\system32> mongod --replSet rs0 --port 27019 --dbpath d:\srv\mongodb\rs0-1
Third member: 再次新打开一个dos窗口 执行如下命令(以管理员身份打开):
C:\WINDOWS\system32>mongod --replSet rs0 --port 27020 --dbpath d:\srv\mongodb\rs0-2
这将以名为rs0的副本集的成员的身份启动每个实例,
每个实例运行在不同的端口上(27017,27019,27020),
并使用 --dbpath设置指定数据目录的路径
3. 关闭MongoDB服务
- 任务栏搜索服务和应用程序,找到相应位置
- 选择MongoDB服务,单击将服务手动关闭
4.登录mongod实例
通过mongo shell连接到mongod实例之一,通过指定其端口号来指示哪个实例
(采用cmd打开mongodb服务需要提前配置环境变量,没有相应概念的小伙伴找找其他资料; 也可以直接打开找到mongo.exe文件所在位置打开mongo shell)
这里采用第一种方式:直接使用cmd连接mongo客户端
C:\WINDOWS\system32>mongo --port 27020
运行结果如下:
5. 创建副本集配置对象rsconf
>rsconf = { _id: "rs0", members: [ { _id: 0, host: "127.0.0.1:27017" }, {_id: 1, host: "127.0.0.1:27019"}, { _id: 2, host: "127.0.0.1:27020" }]}
运行结果如下:
_id 为rs0
members共有三个副本集节点(注意仔细查看运行信息:标注了三个端口情况)
6. 初始化副本集
使用rs.initiate()初始化副本集,然后将rsconf文件传递给rs.initiate()
> rs.initiate(rsconf)
运行结果如下:
ok:1 表示初始化成功
7. 查看副本集成员状态
- 主节点查看成员状态:
rs0:PRIMARY> rs.status()
部分结果如下:
- 副节点查看成员状态:
rs0:SECONDARY> rs.status()
部分结果如下:
8. 判断是否为主节点
如何判断主节点和辅助节点 : db.isMaster()
rs0:PRIMARY> db.isMaster()
- hosts标注三个副本集结点的端口号
- primary指明主节点
- me指明当前端口所对应的节点
至此,本机环境的MongoDB副本集部署完成,接下来我们需要使用副本集完成数据一致性的检验以及其他配置。
二、验证副本集数据的一致性
1. 主节点添加数据
向主节点添加一条数据,查看辅助接点是否也有此条数据
(按照上述的配置,主节点的端口是27020,此端口是随机的可能存在差异)
- 使用admin数据库
rs0:PRIMARY> db
rs0:PRIMARY> use admin
- 给变量p赋值
rs0:PRIMARY> p={"ammeterId" : "110004217635", "rulerCode" : "04000102", "dataItem" : "193710", "terminalTime" : "2019-06-20 19:29:51", "storageTime" : "2019-06-21 10:30:12" }
- 插入变量p
rs0:PRIMARY> db.zt.insert(p)
- 查找对应记录
rs0:PRIMARY>db.zt.find().pretty()
2. 副节点查看数据
新开一个dos窗口,登录到辅助节点
查看辅助节点(27019)是否有主节点(27020)插入的数据
C:\WINDOWS\system32> mongo --port 27019
运行结果如下:
同理执行主节点上述操作:
rs0:SECONDARY> db
test
rs0:SECONDARY> use admin
switched to db admin
rs0:SECONDARY> db.zt.find()
{
“_id” : ObjectId(“6198e49b2614961bf6baa4aa”),
“ammeterId” : “110004217635”,
“rulerCode” : “04000102”,
“dataItem” : “193710”,
“terminalTime” : “2019-06-20 19:29:51”,
“storageTime” : “2019-06-21 10:30:12”
}
特别想强调一点,在查询数据的过程中会遇到一个错误:
报错信息及解决方法在结果图中给出:
db.getMongo().setSecondaryOk()
三、移除一台服务器
移除27019这个辅助节点,删除服务必须在admin数据库下,在执行下面操作之前,先执行 use admin操作。然后执行以下操作:
- 关闭副节点
- 此时在主节点上查看状态rs.status()是会看到一些辅助节点的错误信息的如下
- 连接到主节点mongoshell
执行以下命令来移除该成员 rs.remove(“127.0.0.1:27019”)
- 此时再在主节点查看副本集状态信息,则不会有辅助节点的错误信息 。表明删除辅助节点(移除一台服务器)成功
如图所示只存在两个端口,不存在27019端口相关信息。
四、 添加一台服务器
将一个新的活跃成员添加到副本集,就像处理其他成员一样
- 首先打开一个新的命令提示符并且创建数据目录, (新成员的端口为 27019)
C:\WINDOWS\system32>mongod --replSet rs0 --port 27019 --dbpath d:\srv\mongodb\rs0-1
2.连接到主节点(27020)的mongoshell控制台,将这个新成员添加到副本集 rs.add("127.0.0.1:27019")
3. 查看副本集状态信息 rs.status()
如图所示:新添加节点id为3 端口号为27019
五、 故障转移
移除当前主节点27020观察故障转移,首先执行use admin,然后执行以下操作。
- 连接到mongo实例通过mongo+27020
执行以下命令 db.shutdownServer()
- 此时,主节点27020的服务已经关闭,然后查询剩下的副节点的状态,从结果看27017变成了新的主节点。
- 重新添加27020节点,发现27020变成副节点。
具体操作原理和步骤参照如何添加新节点:
主节点添加新的副本集节点
查看节点信息:
id为4 端口号为27020 端口状态为secondary
六、 调整副本优先级
rs0:PRIMARY> con=rs.conf()
- 所有节点默认优先级为1
- 修改27019端口的优先级为2
rs0:PRIMARY>con.members[1].priority = 2
- 然后将优先级的操作应用到副本集,之后会发现27019变成了主节点
rs0:PRIMARY> rs.reconfig(con)
七、配置隐藏节点
- 将副本集配置信息赋值到变量con。
rs0:PRIMARY> con=rs.conf()
2. 设置服务器中副本节点(27020)的优先级为0
3. 设置服务器中副本节点为隐藏节点
4. 将调整副本集成员的操作应用到副本集
5. 验证隐藏节点信息(27020端口的hidden属性修改为true)
八、配置延迟节点
延迟节点是副本节点的另一种表现形式,它代表此节点的数据与主节点的数
据有一定的延迟同步,通过设定一个延迟的属性来确定。实现延迟副本节点的前
提是该节点为隐藏节点。
- 将副本集配置信息赋值到变量cfg
rs0:PRIMARY> cfg = rs.conf()
- 设置延迟时间为3600秒
rs0:PRIMARY> cfg.members[2].slaveDelay =3600
- 将调整副本集成员的操作应用到副本集
九、配置副本集投票权
副本集中允许有七个拥有投票权的成员,配置副本集成员拥有投票权需要修
改参数votes的值为1,如修改值为0则代表该成员不具备投票权,默认情况下在
副本集中创建的成员都具备投票权,即votes的值为1。
- 将副本集配置信息赋值到变量cfg
cfg = rs.conf()
- 设置端口27020中隐藏节点的投票权设置为0,即不可投票
cfg.members[2].votes = 0
- 将调整副本集成员的操作应用到副本集
rs.reconfig(cfg)
写在最后
- 本次实践反反复复折腾了好几个轮回,理清实践所需的知识框架和目的之后对实践的理解更深刻,也知道从哪里来,到哪里去,更明白我在完成什么样的一个小目标。
- 如何看配置成功或者失败的相关信息也是需要不断提升的地方,借此机会将每部分对应的结果图分析都做了一个简明扼要的提示,也有利于加深对项目的理解。
Mongodb本机部署副本集相关推荐
- MongoDB部署副本集
本页包含内容 概览 系统需求 部署一个基于Key文件实现访问控制的副本集 x.509 内部身份验证 概述 首发于sf.gg. 原文翻译自MongoDB官方文档.我一直认为,与其从网上随便扒一些教程,不 ...
- MongoDB高级——复制(副本集)
复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾 ...
- MongoDB(五)-- 副本集(replica Set)
一.副本集介绍 搭建副本集是为了实现mongodb高可用. Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据,仲裁节点不存储数据.客户 ...
- Mongodb sharding转换一个副本集为分片集群
2019独角兽企业重金招聘Python工程师标准>>> 1. 部署一个测试副本集 创建第一个副本集实例,名称为firstset: 1.1 创建副本集并且插入数据如下:/data/ex ...
- 搭建高可用的MongoDB集群:MongoDB的配置与副本集
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用的MongoDB集群(一):MongoDB的配置与副本集
传统的关系数据库具有不错的性能及稳定性,同时,久经历史考验,许多优秀的数据库沉淀了下来,比如MySQL.然而随着数据体积的爆发性增长,数据类型的增多,许多传统关系数据库扩展难的特点也爆发了出来,NoS ...
- mongodb一致性协议_mongodb副本集用一致性快照方法添加从节点步骤
环境描述 主节点 192.168.0.1:27002 两个从节点 192.168.0.2:27002 192.168.0.3:27002 目标:用一致性快照方式添加第三个从节点192.168.0.3 ...
- mongodb带认证的副本集搭建
Mongodb副本集带用户认证的 概述 本次实验是在一台虚拟机上做的,正式环境一定要分开实现,以免影响服务的正常使用和性能. 准备工作: 操作系统:centos7.2 Mongodb版本:3.4.1 ...
- MongoDB副本集(一主一备+仲裁)环境部署
https://www.cnblogs.com/kevingrace/p/7881496.html, https://blog.csdn.net/com_it/article/details/8470 ...
最新文章
- [转载] 别人的心得感悟
- APP检测软件更新逻辑
- rxjs的一个例子:什么是rxjs的OperatorFunction?
- spring jms 事务_Spring JMS:处理事务中的消息
- Spring JPA数据+Hibernate+ MySQL + Maven
- php中队列控制的方法,学习猿地-php 队列的实现方法
- [转]将微信和支付宝支付的个二维码合二为一
- (转)编码剖析Spring管理Bean的原理
- 中国石化:五年要建充换电站5000座
- 安全漏洞整改解决方案
- 对于 js 性能优化的启发,debounce 和 throttle。
- Javascript - Cookie
- MacBookpro安装mysql教程_mac安装mysql的两种方法
- vue.js入门以及和echarts整合之柱状图和中国地图
- whl的文件怎么用python打开_windows - 如何使用.whl文件安装Python包?
- keep跑步记录伪造_Keep、悦跑圈、咕咚、悦动圈,四个跑步App比对
- 38241415106——胡应兰(实验一)
- Hbase Locality
- algodoo是什么意思_ooc表示的是什么意思什么梗 网络用语OOC含义
- 荣耀4a鸿蒙,华为 Plan B 揭开面纱:鸿蒙要超越安卓?小米 OPPO 们买单吗?
热门文章
- 北航 2018计算机学院排课,关于2018—2019学年秋季学期排课的通知
- 12 DB操作 Hibernate Panache
- WOBENZYMN PS REVISED 100'S
- 一次性查寻出全国所有省份,城市,县区(解决多层for循环嵌套查询的问题)
- 【基础】python-docx包之----设置段落样式(缩进/对齐/间距)
- html拖拽手势,h5实现手势操作放大缩小拖动等
- 分布式事务之Seata个人吐血整理
- Win10配置pytorch深度学习环境
- 【#不求人】天空盒模型制作
- 遇到“more than one device/emulator”解决方法