MongoDB 中文文档详解 MongoDB 复制集

阅读时长 6 min read

前言

MongoDB 是一种高性能、可扩展、文档型的 NoSQL 数据库。它是一个面向文档的数据库,而不是关系型数据库。MongoDB 的数据存储方式是以 BSON(Binary JSON)格式存储,支持复杂的数据结构,如嵌套文档和数组。

在 MongoDB 中,复制集(Replica Set)是一种常见的高可用性解决方案。复制集由多个 MongoDB 实例组成,其中一个实例被指定为主节点,其他实例称为从节点。主节点负责处理所有写入操作和查询请求,从节点则复制主节点的数据。如果主节点出现故障,从节点就会选举一个新的主节点。

本文将详细介绍 MongoDB 复制集的概念、配置和使用。

复制集的概念

复制集由多个 MongoDB 实例组成,其中一个实例被指定为主节点,其他实例称为从节点。主节点负责处理所有写入操作和查询请求,从节点则复制主节点的数据。如果主节点出现故障,从节点就会选举一个新的主节点。

复制集的优点包括:

  • 高可用性:如果主节点出现故障,从节点可以选举一个新的主节点,保证服务的可用性。
  • 数据冗余:复制集中的每个节点都有一份相同的数据副本,可以在数据丢失或损坏时提供备份。
  • 扩展性:可以将新节点添加到复制集中,以提高系统的吞吐量和容量。

配置复制集

配置 MongoDB 复制集需要执行以下步骤:

1. 启动 MongoDB 实例

首先,需要启动多个 MongoDB 实例。可以通过以下命令启动 MongoDB 实例:

其中,--port 指定实例的端口号,--dbpath 指定实例的数据存储路径,--replSet 指定实例所属的复制集的名称。

2. 初始化复制集

接下来,需要初始化复制集。可以通过以下命令连接到一个 MongoDB 实例,然后执行初始化命令:

执行初始化命令后,MongoDB 会自动将当前实例作为主节点,并创建一个名为 rs0 的复制集。

3. 添加从节点

接下来,需要将其他 MongoDB 实例添加到复制集中。可以通过以下命令连接到主节点,然后执行添加从节点的命令:

执行添加从节点的命令后,MongoDB 会自动将其他实例添加到复制集中。

4. 查看复制集状态

最后,可以通过以下命令查看复制集的状态:

执行 rs.status() 命令后,MongoDB 会输出当前复制集的状态信息,包括主节点、从节点、延迟节点等信息。

复制集的使用

使用 MongoDB 复制集时,需要注意以下几点:

1. 写入优先级

在 MongoDB 复制集中,主节点负责处理所有写入操作,而从节点只能复制主节点的数据。因此,如果主节点出现故障,复制集中的从节点不能写入数据。

为了避免这种情况,可以设置写入优先级。写入优先级指定了每个节点的写入权限,可以在主节点不可用时,防止从节点写入数据。

写入优先级有以下几种:

  • 1:最高优先级,该节点可以进行写入操作。
  • 0:该节点不能进行写入操作。
  • -1:该节点不能进行写入操作,也不会被选举为主节点。

可以通过以下命令设置节点的写入优先级:

执行 rs.reconfig() 命令后,MongoDB 会重新配置复制集,包括节点的优先级等信息。

2. 读写分离

在 MongoDB 复制集中,主节点负责处理所有写入操作,而从节点只能复制主节点的数据。因此,在读多写少的场景中,可以使用读写分离来提高系统的读取性能。

读写分离的原理是,将读请求发送到从节点,将写请求发送到主节点。可以通过以下命令设置读写分离:

执行 setReadPref() 命令后,MongoDB 会将读请求发送到从节点。

示例代码

以下是一个使用 MongoDB 复制集的示例代码:

-- -------------------- ---- -------
----- ----------- - -------------------------------

----- --- - ----------------------------------------------------------------------------
----- ------ - --- ---------------- - ---------------- ----- ------------------- ---- ---

----- -------- ----- -
  --- -
    ----- -----------------
    ---------------------- --------- -- ---------

    ----- -- - ------------------
    ----- ---------- - ---------------------------

    -- ------ - --------
    ----- ------ - ----- ---------------------- -- - ---
    --------------------- -------- ---- ---- -----------------------

    -- ---- --- ---------
    ----- ---- - ----- ------------------------------
    ------------------ -------------- ------------

  - ----- ----- -
    -----------------------
  -

  ----- ---------------
-

-------------------------

该代码使用了 MongoDB 官方提供的 Node.js 驱动程序。在连接 MongoDB 时,需要指定复制集的名称,例如 mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0。在执行写入操作时,将请求发送到主节点;在执行读取操作时,将请求发送到从节点。

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d41964a941bf71347c296f

Feed
back