MongoDB 副本集工作原理及搭建指南

· 约 4 分钟读完

什么是 MongoDB 副本集

MongoDB 副本集是 MongoDB 中高可用性(high availability, HA)的解决方案之一。副本集可以容忍单个节点的故障,即使一个主节点(primary)失效,系统也可以自动地在副本节点(secondary)中选举出一个新的主节点。副本集还可以提高系统的读取性能,因为每个节点都可以提供服务的能力。副本集中一般包含一个主节点(primary)和多个副本节点(secondary),我们可以根据实际需求决定副本集中的节点数和复制策略。

MongoDB 副本集工作原理

MongoDB 副本集中的节点共有两种状态,一种是可用状态,包括主节点和副本节点,可以提供服务;另一种是已故障状态,例如网络故障、节点宕机等,无法提供服务。副本集中有且仅有一个主节点,它负责处理所有的写操作,并将写操作的结果异步地复制到副本节点上。当主节点失效时,副本集会选择一个副本节点作为新的主节点,成为唯一的可写节点。副本集还会自动地监控各个节点的状态,如果发现某个节点失效,则进行选举产生新的主节点。

如何搭建 MongoDB 副本集

步骤一:准备工作

在开始之前,您需要先安装 MongoDB。如果您还没有安装 MongoDB,请参考 MongoDB 的官方文档进行安装。

步骤二:启动 MongoDB 服务器

在启动 MongoDB 服务器时,我们需要指定一个端口和数据目录。例如,下面的命令将启动一个端口为 27017 的 MongoDB 服务器,并将数据目录指定为 /data/db。

步骤三:初始化副本集

在初始化副本集之前,我们需要在 MongoDB 服务器上创建一个用户,以便副本集节点之间进行身份验证。例如,下面的命令创建了一个名为 admin 的管理员用户。

接着,我们可以通过以下命令来初始化一个名为 rs0 的副本集,其中包括了三个节点:

步骤四:添加副本节点

在副本集初始化后,我们可以根据实际需求添加或删除副本节点。例如,以下命令将向 rs0 副本集中添加一个名为 node4 的副本节点:

步骤五:查看副本集状态

在完成副本集初始化和节点添加后,我们可以通过以下命令查看副本集状态:

以上命令将输出副本集状态的详细信息,包括各个节点的状态、主节点信息等。

示例代码

在 Node.js 应用程序中连接 MongoDB 副本集,可以使用 mongoose 库。下面是一个简单的示例代码:

在上面的示例代码中,我们使用了 mongodb://localhost:27017,localhost:27018,localhost:27019/myapp?replicaSet=rs0 连接字符串来连接副本集。其中,27017、27018、27019 分别是副本集中三个节点的端口号;myapp 是数据库名;replicaSet=rs0 指定了使用名为 rs0 的副本集。在副本集中写入数据时,mongoose 库会自动将写操作发送到主节点,并等待其被复制到副本节点。读取数据时,mongoose 库会自动选择可用的节点进行查询。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d011e2e46428fe9ec9da64