MongoDB教程-5

复制是跨多个服务器同步数据的过程。复制在不同的数据库服务器上提供数据的多个副本,从而提供冗余并提高数据可用性。复制可防止数据库丢失单个服务器。复制还允许您从硬件故障和服务中断中恢复。通过增加数据拷贝,您可以将其中一个用于灾难恢复、报告或备份。

为什么选择复制?


确保数据安全
高(24*7)数据可用性
灾难恢复
无需停机进行维护(如备份、索引重建、压缩)
读取缩放(要读取的额外副本)
副本集对应用程序透明


MongoDB中的复制工作原理


MongoDB通过使用副本集实现复制。副本集是承载相同数据集的一组mongod实例。在副本中,一个节点是接收所有写入操作的主节点。所有其他实例(如辅助实例)都从主实例应用操作,以便它们具有相同的数据集。副本集只能有一个主节点。
副本集是由两个或多个节点组成的组(通常至少需要3个节点)。
在副本集中,一个节点是主要节点,其余节点是次要节点。
所有数据都从主节点复制到辅助节点。
在自动故障切换或维护时,将为主节点建立选择,并选择新的主节点。
故障节点恢复后,它将再次加入副本集并作为辅助节点工作。

图中显示了MongoDB复制的典型示意图,其中客户端应用程序始终与主节点交互,然后主节点将数据复制到辅助节点。

副本集功能


N个节点的群集
任何一个节点都可以是主节点
所有写入操作都转到主
自动故障切换
自动恢复
初选共识选举


设置副本集


在本教程中,我们将把独立的MongoDB实例转换为副本集。要转换为副本集,请执行以下步骤−
关闭已运行的MongoDB服务器。
通过指定--replSet选项启动MongoDB服务器。以下是--replSet−的基本语法

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

例子:

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

它将在端口27017上启动一个名为rs0的mongod实例。
现在启动命令提示符并连接到这个mongod实例。
在Mongo客户端中,发出命令rs.initiate()以启动新的副本集。
若要检查副本集配置,请发出命令rs.conf()。若要检查复制集的状态,则发出命令rs.status()。


将成员添加到副本集


要将成员添加到副本集,请在多台计算机上启动mongod实例。现在启动mongo客户端并发出命令rs.add()。
语法
rs.add()命令的基本语法如下−

>rs.add(HOST_NAME:PORT)

实例
假设您的mongod实例名为mongod1.net,并且它在端口27017上运行。要将此实例添加到副本集,请在Mongo客户端中发出命令rs.add()。

>rs.add("mongod1.net:27017")
>

只有连接到主节点时,才能将mongod实例添加到副本集。要检查您是否连接到主服务器,请在mongo客户端中发出命令db.isMaster()。

共享是跨多台机器存储数据记录的过程,是MongoDB满足数据增长需求的方法。随着数据大小的增加,单个机器可能不足以存储数据,也不能提供可接受的读写吞吐量。切分解决了水平缩放的问题。通过分片,您可以添加更多的机器来支持数据增长以及读写操作的需求。


为什么要分片?


在复制中,所有写操作都将转到主节点
延迟敏感的查询仍将转到主机
单个副本集限制为12个节点
当活动数据集很大时,内存不够大
本地磁盘不够大
垂直缩放太昂贵


MongoDB中的分片


下图显示了MongoDB中使用分片集群的分片。

在下图中,有三个主要部件−
分片——分片用于存储数据。它们提供了高可用性和数据一致性。在生产环境中,每个分片都是一个单独的副本集。
配置服务器—配置服务器存储集群的元数据。该数据包含集群数据集到分片的映射。查询路由器使用此元数据将操作定向到特定分片。在生产环境中,分片集群正好有3个配置服务器。
查询路由器——查询路由器基本上是mongo实例,与客户端应用程序接口,并将操作引导到适当的分片。查询路由器处理操作并将其目标定位到分片,然后将结果返回给客户端。一个分片集群可以包含多个查询路由器来划分客户端请求负载。客户端向一个查询路由器发送请求。通常,分片集群有许多查询路由器。

转储MongoDB数据
要在MongoDB中创建数据库备份,应该使用mongodump命令。此命令将服务器的全部数据转储到转储目录中。有许多选项可用于限制数据量或创建远程服务器的备份。
语法
mongodump命令的基本语法如下−

>mongodump

实例
启动mongod服务器。假设您的mongod服务器运行在本地主机和端口27017上,打开命令提示符并转到mongodb实例的bin目录,然后键入命令mongodump
考虑mycol集合具有以下数据。

>mongodump

该命令将连接到运行在127.0.0.1和端口27017的服务器,并将服务器的所有数据备份到/bin/dump/目录。以下是命令−的输出

以下是可用于mongodump命令的可用选项列表。

语法描述例子
mongodump --host HOST_NAME --port PORT_NUMBER此命令将备份指定mongod实例的所有数据库。mongodump --host tutorialspoint.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY此命令将仅备份指定路径上的指定数据库。mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME此命令将仅备份指定数据库的指定集合。mongodump --collection mycol --db test

还原数据
为了恢复备份数据,使用MongoDB的mongorestore命令。此命令从备份目录中恢复所有数据。
语法
mongorestore命令的基本语法是−

>mongorestore

以下是命令−的输出

在准备MongoDB部署时,您应该尝试了解应用程序在生产中的表现。开发一种一致的、可重复的方法来管理您的部署环境是一个好主意,这样您就可以在投入生产后将任何意外情况降至最低。
最好的方法包括对设置进行原型设计、进行负载测试、监控关键指标,并使用这些信息来扩展设置。该方法的关键部分是主动监控整个系统—这将帮助您了解生产系统在部署之前的运行状况,并确定需要在哪里增加容量。例如,深入了解内存使用量的潜在峰值可能有助于在写锁起火之前将其扑灭。
为了监控您的部署,MongoDB提供了以下一些命令—

mongostat

该命令检查所有正在运行的mongod实例的状态和数据库操作的返回计数器。这些计数器包括插入、查询、更新、删除和游标。命令还显示您遇到页面错误的时间,并显示锁定百分比。这意味着内存不足、写容量不足或存在一些性能问题。
要运行该命令,请启动mongod实例。在另一个命令提示符中,转到mongodb安装的bin目录并键入mongostat。

D:\set up\mongodb\bin>mongostat

以下是命令−的输出

 

mongotop

该命令跟踪并报告MongoDB实例在集合基础上的读写活动。默认情况下,mongotop每秒返回信息,您可以相应地更改信息。您应该检查此读写活动是否符合您的应用程序意图,并且一次不会对数据库进行过多的写入,不会频繁地从磁盘读取数据,也不会超过您的工作集大小。
要运行该命令,请启动mongod实例。在另一个命令提示符中,转到mongodb安装的bin目录并键入mongotop。 

D:\set up\mongodb\bin>mongotop

 若要更改mongotop命令以减少返回信息的频率,请在mongoop命令后指定一个特定的数字。

D:\set up\mongodb\bin>mongotop 30

上面的示例将每30秒返回一次值。
除了MongoDB工具之外,10gen还提供了一个免费的托管监控服务MongoDB管理服务(MMS),该服务提供一个仪表板,并为您提供整个集群的指标视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20108.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32MP135】修复10.1寸屏显示异色问题,添加极性配置

文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/drivers/video/stm32/stm32_ltdc.c

JavaScrpt_13 Web API 正则表达式

JavaScrpt_13 Web API 正则表达式 一、 正则表达式1. 正则基本使用2. 元字符边界符量词范围字符类 3. 替换和修饰符4. change 事件5. 判断是否有类 一、 正则表达式 正则表达式(Regular Expression)是一种字符串匹配的模式(规则)…

123.HTML5+CSS3完结_使用Netlify收取表单

Netlify也可以做表单接受: 我们启动一下 修改下表单 ● 接着在我们的网站输入并提交表单 ● 之后会有一个提示,提示我们提交成功 然后就能在Netlify接受到用户的表单 ● 当然这个表单只能接受100个,但是作为实验也够用了 到此&a…

BERT论文解读及实现(一)

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 1 论文解读 1.1 模型概览 There are two steps in our framework: pre-training and fine-tuning. bert由预训练模型微调模型组成。 ① pre-training, the model is trained on unlabele…

观察者模式(下):如何实现一个异步非阻塞的EventBus框架?

上一节课中,我们学习了观察者模式的原理、实现、应用场景,重点介绍了不同应用场景下,几种不同的实现方式,包括:同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞是最经典的实现方式,主要是为了…

gulimall-性能监控-压力测试

性能监控与压力测试 前言一、性能监控1.1 jvm 内存模型1.2 jvisualvm 作用1.3 监控指标 二、压力测试2.1 概念2.2 性能指标2.3 JMeter 压测工具 前言 本文继续记录B站谷粒商城项目视频 P141-150 的内容,做到知识点的梳理和总结的作用。 一、性能监控 1.1 jvm 内存…

计算机网络实验(4)--配置网络路由

📍实验目的 了解路由器的特点、基本功能及配置方法;使用模拟软件Packet Tracer 5.3熟悉Cisco路由器的操作;配置静态路由和距离矢量路由协议RIP,实现给定网络的连通;从而加深对IP编址、路由转发机制、路由协议、路由表…

Talk预告 | 天津大学博士生赵煜:从平面图像中理解空间语义 - 视觉空间位置描述

本期为TechBeat人工智能社区第512期线上Talk! 北京时间7月12日(周三)20:00, 天津大学博士生—赵煜的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “从平面图像中理解空间语义-视觉空间位置描述”,届时将与大家…

超详解内存函数(memcpy,memmove,memcmp),及其模拟实现

目录 目录: 1:memcpy函数及其模拟实现 2:memmove函数及其模拟实现 3:memcmp函数及其模拟实现 1:memcpy函数及其模拟实现 作用:从source地址开始后中拷贝num个字节的内容到目的地字符串,遇到\0也…

JavaScript的简要介绍

什么是JavaScript? JavaScript 是一种高级的、面向对象的、多范式编程语言。 javascript在网站开发中的作用 这三种语言在一起可以构建好看的和动态网站或者网络应用从程序; HTML、CSS、JavaScript是构建网站的三种基本技术。它们各自负责以下方面&…

机器学习原理

此次主要是由分类来引出 由于宝可梦的图片比较简洁,而数码宝贝的图片就显得比较复杂,我们计算出他们的轮廓,求出白色数量的多少。 e的函数会计算线条的复杂程度。当得出的线条的复杂程度,小于h。我们认为其是宝可梦,反…

adb shell dumpsys SurfaceFlinger

adb shell dumpsys SurfaceFlinger adb shell dumpsys SurfaceFlinger分析Android 系统图层 此命令输出的内容不较多,可以将输出内容重定向到一个文件中 adb shell dumpsys SurfaceFlinger > ./Downloads/surface.txt如下的内容,过滤HWC layers 另外…