开发学院

您的位置:首页>教程>正文

教程正文

MongoDB 复制

MongoDB 复制

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

为什么复制?

  • 为了确保数据的安全

  • 高( 24 * 7 )数据可用性

  • 灾难恢复

  • 无需停机进行维护(如备份、索引重建、压缩)

  • 读取比例(要读取的额外副本)

  • 副本集对应用程序是透明的

MongoDB中复制的工作原理

  MongoDB通过使用副本集来实现复制。副本集是承载相同数据集的一组mongod实例。在复制副本中,一个节点是接收所有写入操作的主节点。所有其他实例(例如辅助实例)都从主实例应用操作,以便它们具有相同的数据集。副本集只能有一个主节点。

  •   副本集是由两个或多个节点组成的组(通常需要至少3个节点)。

  •   在副本集中,一个节点为主节点,其余节点为辅助节点。

  •   所有数据从主节点复制到辅助节点。

  •   在自动故障切换或维护时,将为主节点建立选择,并选择新的主节点。

  •   恢复故障节点后,它将再次加入复制副本集并作为辅助节点工作。

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

replication.png

副本集功能

  •   由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(HOST_NAME:PORT)

例子

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

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

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