MongoDB 是一款开源的 NoSQL 数据库,它具有高可用性、可扩展性、灵活性等特点,因此在互联网领域广受欢迎。在生产环境中,多数情况下我们需要保证数据库的高可用性,MongoDB 复制集则是一种解决方案。本文将介绍 MongoDB 复制集的安装和配置,希望能为前端开发者提供帮助。
1. MongoDB 复制集概述
MongoDB 复制集是一组维护相同数据集的 mongod 进程,其中至少一个是 primary(主节点),其余为 secondary(从节点)。Primary 节点处理所有的写操作,并将写操作的结果复制到其余的 secondary 节点上。应用程序只需要连接到 primary 节点,然后就可以进行所有的读写操作,从而实现高可用性。
2. MongoDB 安装
这里介绍使用官方的 MongoDB 教程进行安装:
- 第一步,添加 MongoDB 的 GPG key:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
。 - 第二步,添加 MongoDB 到 apt 仓库,Ubuntu20.04 下为:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
。更多系统安装命令可以浏览官方文档。 - 第三步,安装 MongoDB:
sudo apt-get update && sudo apt-get install -y mongodb-org
。
3. MongoDB 复制集配置
3.1 初始化 MongoDB 节点
为了初始化 MongoDB 节点,我们需要先创建一个数据目录,然后启动 MongoDB。创建数据目录的命令:mkdir -p /data/db
。启动 MongoDB 命令:mongod
。注意,在启动之前,应该先将当前主机名写入到 hosts 文件中,否则会出现以下错误:
NETWORK [HostnameCanonicalizationWorker] HostnameCanonizationWorker: mongodb: unknown host
正确的写入方式:
127.0.0.1 localhost 127.0.1.1 <your-hostname>
3.2 添加节点到复制集
首先,我们需要将一个节点设置为主节点。启动 MongoDB 命令:mongod --replSet "rs0"
,其中 "rs0" 为复制集名称。然后,我们需要连接到该节点,并执行以下命令:
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "localhost:27017" } ] })
这里的 _id
为复制集名称,members
数组中的 { _id: 0, host: "localhost:27017" }
是一个表示节点的对象。设置 _id
为 0 表示当前节点为主节点。
现在我们需要将一个新的节点添加到复制集中。首先,我们需要创建一个数据目录,并启动 MongoDB。命令:mkdir -p /data/db2 && mongod --port 27018 --dbpath /data/db2
。然后,我们需要连接到主节点,并执行以下命令:
rs.add( { host: "localhost:27018", priority: 0, slaveDelay: NumberLong(30) } )
这里的 priority
表示节点优先级,值为 0 表示该节点不会成为主节点。slaveDelay
值为 NumberLong(30) 表示该节点接收到主节点的更新操作时,延迟 30 秒后才会应用该更新操作。
现在,我们可以查看复制集的状态,命令:rs.status()
。这时候将看到第一个节点为主节点,第二个节点为从节点。从节点的状态为 STARTUP2,表示正在同步主节点的数据。
3.3 查看复制集状态
复制集状态信息可以通过以下命令查看:
rs.status()
该命令会返回一个包含当前复制集状态的 JSON 对象。我们可以查看节点的状态、心跳间隔、同步状态等信息。例如:
-- -------------------- ---- ------- - ----- - ------ ------ - ------------------------------------ --------- - -- ------ - -------------- ------------------------- - ----------------- --------- - - - ----- - -- ------ - ------------------ -------- - -- ------- - -- ---------- - ---------- -------- - ----- -------- - - ---- - --------------------- --- --- - ------------- -- ------------ - -------------------------------- ----------- - --- ---------------- - --- -------------- - --- ------------- - --- -------------- - --------------------- --- -------------- - -------------------------------- --------------- - -- ------ - ----- ---------------------- - -- -- - ----- - -- ------ - ------------------ -------- - -- ------- - -- ---------- - ------------ -------- - ----- -------- - - ---- - --------------------- --- --- - ------------- -- --------------- - - ---- - --------------------- --- --- - ------------- -- ------------ - -------------------------------- ------------------- - -------------------------------- --------------- - ------------------------------------ ------------------- - ------------------------------------ -------- - -------------- ---------------------- - --- ----------- - ------------------ ---------------- - ------------------ -------------- - -- ------------- - --- --------------- - - - -- ---- - - -
4. MongoDB 复制集说明
通过以上步骤配置成功 MongoDb 复制集,下面是常用的 MongoDB 命令:
rs.help()
:列出可用命令。rs.status()
:查看当前复制集状态。rs.add(HOST:PORT)
:将某节点添加到当前复制集中。rs.remove(HOST:PORT)
:将某节点从当前复制集中移除。rs.reconfig(CONFIGDOC)
:重新配置当前复制集的副本集配置文档。rs.freeze(SECONDS)
:停止复制集中所有节点的同步行为。rs.stepDown(SECONDS)
:请求节点降为辅助节点。rs.syncFrom(HOST:PORT)
:指定某一节点作为指定节点的从节点。rs.slaveOk()
:允许读从节点的数据。
结论
本文介绍了 MongoDB 复制集的安装和配置过程,以及常用的 MongoDB 复制集命令。通过此文,前端开发者可以更好地应用 MongoDB 复制集,并在高并发场景下保障数据库的可用性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670639fad91dce0dc85a348d