在分布式系统中,主从读写分离是一种常见的架构模式,它可以有效地提高系统的并发处理能力和数据可靠性,MongoDB 作为一款流行的 NoSQL 数据库,也支持主从读写分离的实现,本文将介绍如何使用 MongoDB 实现主从读写分离的实例代码。
1、环境准备
我们需要准备两台服务器,一台作为主节点(master),另一台作为从节点(slave),确保两台服务器都已经安装了 MongoDB,并且版本相同。
2、配置主节点
在主节点上,我们需要修改 MongoDB 的配置文件(通常位于 /etc/mongod.conf),添加以下内容:
开启副本集 replication: 指定副本集名称 replSetName: "rs0"
重启主节点的 MongoDB 服务:
sudo service mongod restart
3、配置从节点
在从节点上,我们需要修改 MongoDB 的配置文件(通常位于 /etc/mongod.conf),添加以下内容:
开启副本集 replication: 指定副本集名称 replSetName: "rs0" 指定主节点的地址和端口 primary: "主节点IP:端口"
重启从节点的 MongoDB 服务:
sudo service mongod restart
4、创建数据库和集合
在主节点上,我们可以创建一个数据库和一个集合,用于演示读写分离的效果:
use testDB; db.createCollection("testCollection");
5、主从同步
当主节点和从节点都配置好后,MongoDB 会自动进行主从同步,我们可以通过以下命令查看同步状态:
rs.status()
6、读写分离实现
在应用程序中,我们可以通过设置连接字符串来实现读写分离,对于 Node.js 的 Mongoose 库,我们可以这样设置:
const mongoose = require("mongoose"); mongoose.connect("mongodb://从节点IP:端口/testDB", { useNewUrlParser: true, useUnifiedTopology: true });
这样,当我们执行读操作时,MongoDB 会将请求转发到从节点;而执行写操作时,仍然会发送到主节点,从而实现了读写分离的效果。
7、故障恢复与高可用性
当主节点出现故障时,MongoDB 会自动选举一个新的主节点,并将写操作迁移到新的主节点,从节点会继续提供读服务,保证系统的高可用性,我们可以通过以下命令查看当前的主节点状态:
rs.status()
8、注意事项
在实际应用中,建议使用多个从节点,以提高系统的读取能力,只需将每个从节点的 primary
字段设置为相同的主节点地址即可。
如果需要在从节点上执行写入操作,可以使用 --slaveOk
参数启动 MongoDB:mongod --slaveOk --port <端口>
,但请注意,这会导致数据的不一致风险,建议尽量避免在从节点上执行写入操作。
如果需要手动触发主从同步,可以在主节点上执行 rs.stepDown()
命令,这将导致主节点停止接受写操作,并等待所有正在执行的写操作完成后,将主节点的角色移交给指定的从节点,我们可以在新的主节点上执行 rs.stepUp()
命令,使其开始接受写操作。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/335925.html