MongoDB 实现读写分离主要依赖于副本集(Replica Set)。副本集是一组 MongoDB 服务器,其中一个服务器充当主节点(Primary),其他服务器充当从节点(Secondary)。主节点负责处理写操作,从节点可以处理读操作。以下是实现读写分离的步骤:
rs0
的副本集,包含三个节点:primary
、secondary1
和 secondary2
。# primary.conf
replication:
replSetName: rs0
# secondary1.conf
replication:
replSetName: rs0
# secondary2.conf
replication:
replSetName: rs0
mongod --config primary.conf
mongod --config secondary1.conf
mongod --config secondary2.conf
rs.initiate()
命令初始化副本集。mongo --host primary
在 mongo shell 中执行:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "primary:27017" },
{ _id: 1, host: "secondary1:27017" },
{ _id: 2, host: "secondary2:27017" }
]
})
from pymongo import MongoClient
client = MongoClient("mongodb://primary:27017,secondary1:27017,secondary2:27017/?replicaSet=rs0")
# 写操作
db = client.mydatabase
collection = db.mycollection
collection.insert_one({"name": "John", "age": 30})
# 读操作
read_preference = client.read_preference.ReadPreference.SECONDARY
db = client.mydatabase(read_preference=read_preference)
collection = db.mycollection
for document in collection.find():
print(document)
在这个例子中,写操作会发送到主节点,读操作会发送到从节点。你可以根据需要调整读偏好(Read Preference)以控制读操作在从节点之间的分布。
注意:在实际生产环境中,可能需要考虑更多的因素,例如网络延迟、从节点的负载等。你还可以使用第三方工具(如 ProxySQL、Vitess 等)来管理和优化读写分离。