MongoDB教程
+ -

MongoDB 复制(副本集)

2019-09-09 2 0

MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。

什么是复制?

  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

MongoDB复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

MongoDB复制结构图
以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

MongoDB副本集设置

在本教程中我们使用同一个MongoDB来做MongoDB主从的实验, 操作步骤如下:

1、关闭正在运行的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

以上实例会启动一个名为rs0的MongoDB实例,其端口号为27017。
启动后打开命令提示框并连接上mongoDB服务。
在Mongo客户端使用命令rs.initiate()来启动一个新的副本集。
我们可以使用rs.conf()来查看副本集的配置
查看副本集状态使用 rs.status() 命令

副本集添加成员

添加副本集的成员,我们需要使用多台服务器来启动mongo服务。进入Mongo客户端,并使用rs.add()方法来添加副本集的成员。

语法

rs.add() 命令基本语法格式如下:

>rs.add(HOST_NAME:PORT)

实例

假设你已经启动了一个名为mongod1.net,端口号为27017的Mongo服务。 在客户端命令窗口使用rs.add()
命令将其添加到副本集中,命令如下所示:

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

MongoDB中你只能通过主节点将Mongo服务添加到副本集中, 判断当前运行的Mongo服务是否为主节点可以使用命令db.isMaster() 。

MongoDB的副本集与我们常见的主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。

0 篇笔记 写笔记

XPath 节点操作函数
XPath在要与XPath表达式一起使用的节点上定义以下运算符。序号Operator描述 1/用 于选择特定节点下的节点。 2//用 于从根节点选择节点 3[…]用 于检查节点值 4|用 于两个节点集的并集 XPath在要与XPath表达式一起使用的节点上定义以下功能。序号Ope......
Perl 面向对象
Perl 中有两种不同地面向对象编程的实现:一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用。在这个匿名哈希表中,存储来所有的实例属性。二是基于数组的方式,在定义一个类的时候,我们将为每一个实例属性创建一个数组,而每一个对象实例的实质就是一个指向这些数组中某一行索引的引用。在......
Redis PERSIST Key
Redis PERSIST 命令用于从键(key)中删除到期时间。PERSIST - 返回值整数值1或01,如果从键(key)中删除了超时。0,如果键(key)不存在或没有关联的超时。PERSIST - 语法以下是Redis PERSIST 命令的基本语法。redis 127.0.0.1:6379&......
Python3 集合Set intersection_update()方法
intersection_update() 方法用于移除两个或更多集合中都不重叠的元素,即计算交集。intersection_update() 方法不同于 intersection() 方法,因为 intersection()方法是返回一个新的集合,而intersection_update() 方法......
设计模式 过滤器模式
过滤器模式(Filter Pattern)或标准模式(CriteriaPattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个 Person 对象、 C......
Perl 包和模块
Perl 中每个包有一个单独的符号表,定义语法为:package mypack;此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package语句为止。每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包......
Redis 客户端连接
Redis在已配置的侦听TCP端口和UnixSocket(如果已启用)上接受客户端的连接。最大客户数在Redis配置(redis.conf)中,有一个名为 maxclients 的属性,它描述了可以连接到Redis的最大客户端数量。以下是命令的基本语法。config get maxclients ......
MongoDB 自动增长
MongoDB 没有像 SQL 一样有自动增长的功能, MongoDB 的 _id 是系统自动生成的12字节唯一标识。但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。由于 MongoDB 没有实现这个功能,我们可以通过编程的方式来实现,以下我们将在 counters 集合中实现_i......
Python3 os.removedirs() 方法
os.removedirs() 方法用于递归删除目录。像rmdir(), 如果子文件夹成功删除,removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。语法removedirs() 方法语法格式如下:os.removedirs(path......
Ruby 类实例
下面将创建一个名为 Customer 的 Ruby 类,声明两个方法:display_details :该方法用于显示客户的详细信息。total_no_of_customers :该方法用于显示在系统中创建的客户总数量。#!/usr/bin/rubyclass Customer @@no_of_......
Python3 集合intersection() 方法
intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。语法intersection() 方法语法:set.intersection(set1, set2 ... etc)参数set1 — 必需,要查找相同元素的集合set2 — 可选,其他要查找相同元素的集合,可以多个,多个......
windows映像管理工具DISM
什么是DISMDISM(Deployment Image Servicing and Management)就是部署映像服务和管理 (DISM.exe) 用于安装、卸载、配置和更新脱机 Windows(R) 映像和脱机 Windows 预安装环境 (Windows PE) 映像中的功能和程序包。DI......
设计模式 外观模式
外观模式(FacadePattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。介绍意图:为子系统中的一组接......
JSONparse方法
JSON 通常用于与服务端交换数据。在接收服务器数据时一般是字符串。我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。语法JSON.parse(text[, reviver]) 参数说明:text: 必需, 一个有效的 JSON 字符串。reviver: 可选,一......
Redis SINTERSTORE destination key1 [key2]
Redis SINTERSTORE 命令在所有指定集合相交之后将元素存储在集合中,不存在的键被认为是空集,如果其中一个键为空集,则输出集也为空。SINTERSTORE - 返回值返回元素数量。SINTERSTORE - 语法以下是Redis SINTERSTORE 命令的基本语法。redis 127......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!