MongoDB 复制(副本集)学习笔记
什么是 MongoDB 复制?
MongoDB 复制是指将一个 MongoDB 实例的数据复制到其他 MongoDB 实例中,以提高数据的可靠性和可用性。在 MongoDB 复制中,有一个主节点和多个从节点。主节点接收所有写入操作并将它们复制到一组从节点中的每一个节点上。从节点只能读取数据,不能写入数据。
MongoDB 复制的优势
- 数据冗余:每个副本集至少有三个拷贝,可以防止因硬件故障或机房宕机导致的数据丢失。
- 自动故障转移:当主节点发生故障时,从节点会自动选举一个新的主节点,保持系统的可用性。
- 可扩展性:通过添加新的从节点,可以增加系统的读取性能和可扩展性。
如何设置 MongoDB 副本集?
- 启动 MongoDB 实例:
Copy Codemongod --dbpath /data/db --replSet rs0
- 连接到 MongoDB 实例:
Copy Codemongo
- 初始化副本集:
Copy Coders.initiate()
- 添加从节点:
Copy Coders.add("mongodb1.example.net")
- 查看副本集状态:
Copy Coders.status()
MongoDB 复制的实例
假设有一个名为 testdb
的数据库,我们要创建一个副本集来存储该数据库的数据。在本例中,我们创建了一个由三个节点组成的副本集,其中一个为主节点,其他两个为从节点。
我们首先启动三个 MongoDB 实例:
Copy Codemongod --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 Codemongo --host localhost:27017
rs.initiate()
添加从节点:
Copy Coders.add("localhost:27018")
rs.add("localhost:27019")
现在我们可以在主节点上插入一些数据并查看它是否已经被所有节点复制:
Copy Codeuse testdb
db.test.insert({name: "Alice"})
db.test.find()
查询结果应该显示在所有三个节点上:
Copy Code{ "_id" : ObjectId("60b15fe28f6be8799e939b68"), "name" : "Alice" }