MongoDB 复制(副本集)学习笔记

什么是 MongoDB 复制?

MongoDB 复制是指将一个 MongoDB 实例的数据复制到其他 MongoDB 实例中,以提高数据的可靠性和可用性。在 MongoDB 复制中,有一个主节点和多个从节点。主节点接收所有写入操作并将它们复制到一组从节点中的每一个节点上。从节点只能读取数据,不能写入数据。

MongoDB 复制的优势

  • 数据冗余:每个副本集至少有三个拷贝,可以防止因硬件故障或机房宕机导致的数据丢失。
  • 自动故障转移:当主节点发生故障时,从节点会自动选举一个新的主节点,保持系统的可用性。
  • 可扩展性:通过添加新的从节点,可以增加系统的读取性能和可扩展性。

如何设置 MongoDB 副本集?

  1. 启动 MongoDB 实例:
Copy Code
mongod --dbpath /data/db --replSet rs0
  1. 连接到 MongoDB 实例:
Copy Code
mongo
  1. 初始化副本集:
Copy Code
rs.initiate()
  1. 添加从节点:
Copy Code
rs.add("mongodb1.example.net")
  1. 查看副本集状态:
Copy Code
rs.status()

MongoDB 复制的实例

假设有一个名为 testdb 的数据库,我们要创建一个副本集来存储该数据库的数据。在本例中,我们创建了一个由三个节点组成的副本集,其中一个为主节点,其他两个为从节点。

我们首先启动三个 MongoDB 实例:

Copy Code
mongod --dbpath /data/db/rs0-0 --replSet rs0 mongod --dbpath /data/db/rs0-1 --replSet rs0 mongod --dbpath /data/db/rs0-2 --replSet rs0

然后连接到其中一个 MongoDB 实例并初始化副本集:

Copy Code
mongo --host localhost:27017 rs.initiate()

添加从节点:

Copy Code
rs.add("localhost:27018") rs.add("localhost:27019")

现在我们可以在主节点上插入一些数据并查看它是否已经被所有节点复制:

Copy Code
use testdb db.test.insert({name: "Alice"}) db.test.find()

查询结果应该显示在所有三个节点上:

Copy Code
{ "_id" : ObjectId("60b15fe28f6be8799e939b68"), "name" : "Alice" }