【保姆级教程】:docker搭建MongoDB三节点副本集

容器可以理解为一个进程,镜像是把环境,组件等都配置好,运行成容器的,容器里面运行服务,也可以说是一个进程。镜像是模板,镜像是实例。

一个镜像可以创建多个实例。也就是多个容器,容器之间相互独立。

背景

创建副本集,1主2从,主负责增删改,当然查也可以,从负责只读。

远程的linux系统,在远程的linux系统上使用docker搭建mongoDB的三节点副本集。

注意:mongoDB版本:mongo6.0之前的版本,执行的时候使用mongo这个命令启动客户端,mongo的6.0版本之后使用mongosh命令启动客户端。

1.拉取mongodb镜像,注意版本。

重要的事情说三遍!

重要的事情说三遍!

重要的事情说三遍!

注意:mongoDB版本:mongo6.0之前的版本,执行的时候使用mongo这个命令启动客户端,mongo的6.0版本之后使用mongosh命令启动客户端。

Go 复制代码
docker pull mongo:6.2

2.创建3个文件夹存储的是容器信息

Go 复制代码
mkdir -p /home/data/master

mkdir -p /home/data/slave1

mkdir -p /home/data/slave2

3.关于网络

如果有特殊要求就创建一个属于自己的网络。如果没有特殊要求就用默认的。

这儿我自己创建了一个。

Go 复制代码
// 查看网络信息
docker network ls 

// 创建一个驱动是网桥,网络名是ste_net的网络
docker network create --driver bridge mynet

4.创建容器

下面是通过启动三个容器,三个容器通过宿主机的端口10001 10002 10003 映射27017,也就是通过这三个端口都可以访问到27017的端口。当然这三个端口都是暴露在外面的。

--itd:既交互式访问,又让服务后端执行

--restart always:假如服务断了,可以尝试启动

-v:主机路径:docker路径;挂载卷,这个可以同步数据,同步宿主机和容器的数据。持久化数据。

--name :给新容器取名

--replSet :设置副本集名称,这里的名称是rs

Go 复制代码
sudo docker run -itd --restart always --name mongodb-master
-p 10001:27017 
-v /home/master/data:/data/db 
-v /home/master/conf:/data/conf 
-v /home/master/log:/data/log  mongo:6.2 --replSet "rs"

sudo docker run -itd --restart always --name mongodb-slave1
-p 10002:27017 
-v /home/slave1/data:/data/db 
-v /home/slave1/conf:/data/conf 
-v /home/slave1/log:/data/log  mongo:6.2 --replSet "rs"

sudo docker run -itd --restart always --name mongodb-slave2 
-p 10003:27017 
-v /home/slave2/data:/data/db 
-v /home/slave2/conf:/data/conf 
-v /home/slave2/log:/data/log  mongo:6.2 --replSet "rs"

最后使用docker ps 查看容器是否创建成功!

**5.**进入容器

想把哪个容器当做主节点,就进入哪个容器。

注意:我的mongo的版本是6以上的,如果你是6以下的,请使用mongo,6以上使用Mongosh。

Go 复制代码
docker exec -it mongodb-master  mongosh

如果出现下面一堆东西,说明通过客户端创建成功了!

6.设置主从节点

上面我们已经完成了宿主机和容器之间的映射,下面设置主从节点。

进入容器后,通过rs.initiate()命令对主从节点进行初始化。

下面是进入容器后的状态test>

格式:

Go 复制代码
rs.initiate(
... {
...     _id:"集群名称", // 这儿也就是创建容器的时候后面的 副本集名称
...     version:1,
...     members:[
...        {_id:0,host:"宿主机IP:10001"},
...        {_id:1,host:"宿主机IP:10002"},
...        {_id:2,host:"宿主机IP:10003"}
...     ]
... }
)

看到"ok":1为成功,0为失败,如果你为0,看看上面有无操作出错。

下面已经变成了主节点

最后,通过rs.status()查看状态:

小结:

  1. 注意mongoDB的版本,6.0之前用mongo客户端命令,6.0之后使用mongosh客户端命令
  2. 注意第2步设置初始化的时候,是你的宿主机ip:port,port是你的宿主机暴露的端口,因为之前创建虚机的时候会有一个映射,端口映射到容器的27017,所以外部通过这个10001 10002 10003以及ip,就可以访问到容器内部。
相关推荐
梦想平凡1 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh1 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai2 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed3 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria3 小时前
Redis 高可用架构对比
数据库·redis
唐青枫4 小时前
MongoDB 从零到能用:文档、CRUD、聚合与 Node.js 实战
mongodb
IpdataCloud4 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很4 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
IvorySQL5 小时前
当PostgreSQL“听懂”MySQL——协议兼容层的设计与实战
数据库·人工智能·postgresql
这个DBA有点耶5 小时前
银行核心系统数据库迁移怎么选?6 步法+5 个避坑指南
数据库·安全·架构