Mongodb 简明教程

MongoDB - Replication

复制是指在多个服务器之间同步数据的过程。复制提供冗余并且使用多个数据库服务器中的多份数据副本提高数据可用性。复制可以防止因单个服务器丢失而导致数据库丢失数据。复制还允许从硬件故障和服务中断中恢复。通过额外的数据副本,您可以分配一份副本到灾难恢复、报告或备份中。

Why Replication?

  1. 保证数据安全

  2. 高可用性(24*7)的数据

  3. Disaster recovery

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

  5. 读取扩展(可用于读取的额外副本)

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

How Replication Works in MongoDB

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

  1. 副本集是一组由两个或更多个节点(通常最低需要 3 个节点)组成。

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

  3. 所有数据都从主节点复制到辅助节点。

  4. 在自动故障转移或维护时,选举会建立用于主节点,并且会选出一个新的主节点。

  5. 故障节点恢复后,它会重新加入副本集,并作为辅助节点运行。

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

replication

Replica Set Features

  1. 由 N 个节点组成的一个集群

  2. 任何一个节点都可以为主节点

  3. 所有写入操作都转到主节点

  4. Automatic failover

  5. Automatic recovery

  6. Consensus election of primary

Set Up a Replica Set

在本教程中,我们将把独立的 MongoDB 实例转换为副本集。若要转换为副本集,请执行以下步骤:

  1. 关闭已运行的 MongoDB 服务器。

.

  1. 通过指定 --replSet 选项启动 MongoDB 服务器。以下是 --replSet 的基本语法:

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

Example

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
  1. 它将在端口 27017 上以 rs0 的名称启动一个 mongod 实例。

  2. 现在启动命令提示符并连接到此 mongod 实例。

  3. 在 Mongo 客户端中,发出命令 rs.initiate() 以启动新的副本集。

  4. 若要检查副本集配置,请发出命令 rs.conf() 。若要检查副本集状态,请发出命令 rs.status()

Add Members to Replica Set

若要向副本集添加成员,请在多台机器上启动 mongod 实例。现在启动一个 mongo 客户端并发出命令 rs.add()

Syntax

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

>rs.add(HOST_NAME:PORT)

Example

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

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

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