前言
相信很多前端同学在开发 Web 应用的过程中都会使用 MongoDB 数据库,而随着 Docker 技术的不断发展,使用 Docker 部署 MongoDB 也成为了一种趋势。本文旨在提供一个完整的 MongoDB 副本集在 Docker 容器中的部署过程,并带领大家完成 MongoDB 副本集的实践。
准备工作
在开始实践前,我们需要先准备一下环境:
- 安装 Docker 工具箱
- 安装 Docker Compose 工具
MongoDB 副本集简介
MongoDB 副本集是一个拥有多个副本节点的 MongoDB 部署,其中有一个节点为主节点(Primary),其他节点则为从节点(Secondary)。所有写操作均在主节点上执行,而读操作则可以在主节点和从节点都执行。在主节点发生宕机或者不可用的情况下,系统会自动将从节点中选举出一个作为新的主节点。
MongoDB 副本集的优点
- 支持容错和高可用
- 支持读写集群,提升读写性能
- 支持数据备份和恢复
MongoDB 副本集的不足之处
- 无法保证完全的实时性
- 部分写操作需要大量资源
- MongoDB 副本集配置较为复杂
MongoDB 副本集在 Docker 中的部署
MongoDB 在 Docker 中的部署方式有很多种,本文采用了 Docker Compose 来管理容器。在本次实践中,我们将使用一个 3 节点的 MongoDB 副本集,包括一个 Primary 节点和两个 Secondary 节点。
Docker Compose 文件
下面是 MongoDB 副本集在 Docker 中的部署配置文件,名为 docker-compose.yml。
-------- --- --------- -------------- ------ ----- -------- - ------------------------------------------ - ----------------------- -------- ------ -------- --------------------- --------- ----- ------ - ----------- --------- - ------------- ------------------ ------ ----- -------- - ---------------------------------------------- - --------------------------- -------- ------ -------- --------------------- --------- ----- ------ - ----------- --------- - ------------- ------------------ ------ ----- -------- - ---------------------------------------------- - --------------------------- -------- ------ -------- --------------------- --------- ----- ------ - ----------- --------- - ------------- --------- --------------
上述配置文件一共定义了三个服务,即 mongo-primary、mongo-secondary-1 和 mongo-secondary-2,分别对应了三个 MongoDB 副本集节点。下面我们就逐一来解释一下三个服务的配置:
- mongo-primary:该服务是 MongoDB 副本集的主节点,使用的镜像为官方的 mongo 镜像。该服务挂载了一个配置文件和一个数据卷,其中配置文件 mongo.conf 配置了 MongoDB 副本集的相关参数,数据卷 data 则用于存储 MongoDB 数据库的数据。
- mongo-secondary-1 和 mongo-secondary-2:这两个服务是 MongoDB 副本集的从节点,使用的镜像同样为官方的 mongo 镜像。这两个服务和 mongo-primary 同样挂载了配置文件和数据卷,并且都在命令中指定了 --replSet "rs0" 参数,用于建立副本集。
配置文件
下面是上述所提到的 MongoDB 配置文件 mongo.conf 的内容:
---------- ------------ ---- ----- ---------------------- ---------- ---- -------- ------- ---------- -------- -------- ---- ------------------ ----- ---- ------------ ----------------- ---- ------- ------- ----- ----- ------------ ------------ -----
该配置文件的作用是为 MongoDB 副本集提供相关参数的配置信息。在配置文件中,我们指定了 MongoDB 数据库的 log 和 pid 文件存储路径,以及数据库 bindIp、port 等信息,并且在最后指定了副本集的名称。
构建 MongoDB 副本集
在服务配置文件和配置文件都已经准备好的情况下,我们就可以开始构建 MongoDB 副本集了。打开终端,进入到 docker-compose.yml 所在的文件夹下,运行以下命令:
-------------- -- --
该命令会启动我们之前在 Docker Compose 文件中定义的三个服务,并且以后台模式运行。当所有服务都启动成功后,我们可以在命令行中输入以下命令,进入 mongo-primary 服务的容器中查看 MongoDB 副本集的状态:
-------------- ---- ------------- ---- ----- -----------
如果所有节点都成功建立,输出结果如下:
- ----- - ------ ------ - ------------------------------------ --------- - -- ------ - -------------- ----------- - --- ---------------- - --- -------------- - --- ------------------------- - ----------------- ------------------- - -- -------------------- - -- --------- - - --------------------- - - ---- - --------------------- --- --- - ------------- -- ------------------------- - ------------------------------------ --------------------------- - - ---- - --------------------- --- --- - ------------- -- ------------------------------- - ------------------------------------ --------------- - - ---- - --------------------- --- --- - ------------- -- ------------------- - ------------------------------------ --------------- - - ---- - --------------------- --- --- - ------------- -- ------------------- - ----------------------------------- -- ------------------------------- - --------------------- --- -------------------------- - - -------------------- - ---------- ------------------ - ------------------------------------ ---------------- - -------------- ------------------------------- - - ---- - --------------------- --- --- - ------------- -- -------------------------- - - ---- - --------------------- --- --- - ------------- -- -------------------------- - ------------------------------------ --------------- - ------------------------------------ ---------------- - ---------- ------ - -------------- --------------------- - - ---- - --------------------- --- --- - ------------- -- ------------------------- - ------------------------------------ ---------------- - - ---- - --------------------- --- --- - ------------- -- -------------------- - ------------------------------------ ----------------------- - ------------------ ------------------ - ------------------------------------ -------------------------------- - ----------------------------------- -- --------- - - - ----- - -- ------ - ---------------------- -------- - -- ------- - -- ---------- - ---------- -------- - ---- -------------- - ------------------- -------- - - ---- - --------------------- --- --- - ------------- -- ------------ - ------------------------------------ ----------- - --- ---------------- - --- -------------- - --- ------------- - --- -------------- - --------------------- --- -------------- - ------------------------------------ --------------- - -- ------ - ----- ---------------------- - -- -- - ----- - -- ------ - -------------------------- -------- - -- ------- - -- ---------- - ------------ -------- - ---- -------------- - ------------------- -------- - - ---- - --------------------- --- --- - ------------- -- --------------- - - ---- - --------------------- --- --- - ------------- -- ------------ - ------------------------------------ ------------------- - ------------------------------------ --------------- - ------------------------------------ ------------------- - ------------------------------------ -------- - -------------- ----------- - ---------------------- ---------------- - ---------------------- -------------- - -- ------------- - --- --------------- - - -- - ----- - -- ------ - -------------------------- -------- - -- ------- - -- ---------- - ------------ -------- - ---- -------------- - ------------------- -------- - - ---- - --------------------- --- --- - ------------- -- --------------- - - ---- - --------------------- --- --- - ------------- -- ------------ - ------------------------------------ ------------------- - ------------------------------------ --------------- - ------------------------------------ ------------------- - ------------------------------------ -------- - -------------- ----------- - ---------------------- ---------------- - ---------------------- -------------- - -- ------------- - --- --------------- - - - -- ---- - -- -------------- - - ------------- - --------------------- --- ----------- - - ------ - ------------------------------------------ ------- - ------------- - -- --------------- - --------------------- -- -
在输出结果中,我们可以看到副本集的名称为 rs0,而且三个节点的状态均为 SECONDARY 或 PRIMARY,表示我们已经成功的部署了 MongoDB 副本集。
测试 MongoDB 副本集
在成功构建 MongoDB 副本集后,我们需要测试一下集群的读写性能。
MongoDB 副本集的读写操作测试
在 mongo-primary 节点所在的容器内,可以通过以下命令打开 MongoDB Shell:
-------------- ---- ------------- -----
我们可以在 MongoDB Shell 中先插入一些数据:
- --------------------- ------- ---- --- ------- -------- - --------------------- ------- ---- --- ------- -------- - --------------------- ------- ---- --- ------- ----------
接着,在容器内打开另一个终端,分别在 mongo-secondary-1 和 mongo-secondary-2 节点所在的容器中使用以下命令进入 MongoDB Shell:
-------------- ---- ----------------- ----- --------------------------- -------------- ---- ----------------- ----- ---------------------------
接下来,我们在三个容器的 MongoDB Shell 中分别执行下面的命令,验证读写操作是否生效。
在 mongo-primary 节点中:
- -------------- - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - -------- -
在 mongo-secondary-1 和 mongo-secondary-2 节点中:
- -------------- - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - -------- -
接下来,我们在 mongo-primary 节点中进行写操作,然后在另外两个节点中读取刚刚写入的数据,验证 MongoDB 副本集是否生效。
在 mongo-primary 节点中:
- --------------------- ------ ---- --- ------- --------
在 mongo-secondary-1 和 mongo-secondary-2 节点中:
- -------------- - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - ------ - - ----- - ------------------------------------- ------ - ------- ----- - --- -------- - -------- - - ----- - ------------------------------------- ------ - ------ ----- - --- -------- - ------ -
可以看到,在 mongo-primary 节点中写入的数据已经成功同步到了其他节点。
总结
本文详细介绍了如何通过 Docker Compose 部署 MongoDB 副本集,并提供了配置文件和部署过程的详细说明。MongoDB 副本集在 Web 应用开发中起着重要的作用,通过学习本文,我们可以更加深入地理解和应用 MongoDB 数据库和 Docker 技术。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6535c8be7d4982a6ebd5c52d