【保姆级教程】: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,就可以访问到容器内部。
相关推荐
BestandW1shEs2 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师2 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球2 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...2 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00012 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502772 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度3 小时前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)3 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0663 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch