【保姆级教程】: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命令启动客户端。

docker pull mongo:6.2

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

mkdir -p /home/data/mastermkdir -p /home/data/slave1mkdir -p /home/data/slave2

3.关于网络

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

这儿我自己创建了一个。

// 查看网络信息
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

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。

docker exec -it mongodb-master  mongosh

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

 6.设置主从节点

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

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

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

格式:

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,就可以访问到容器内部。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/145673.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

节奏达人疯狂猜歌双端流量主小程序开发

节奏达人疯狂猜歌双端流量主小程序开发 流量主小程序千千万,可以长期运营且留存高的,猜歌小程序必有一席之地。 好运营:依靠社交属性,可以快速短时间裂变。依靠短视频可以快速吸引玩家。 活跃度高,粘性高&#xff0…

Andriod学习笔记(二)

页面设计的零碎知识 通用属性设置文本大小设置视图宽高设置视图的对齐方式 页面布局LinearLayoutRelativeLayoutGridLayoutScollView 按钮触控ButtonImageViewImageButton 案例:简易计算机 通用属性 设置文本大小 纯数字的setTextSize方法,内部默认字体…

解决 Vue3 + Element Plus 树形表格全选多选以及子节点勾选的问题

原文链接: 解决 Vue3 Element Plus 树形表格全选多选以及子节点勾选的问题 前言 最近用到了 Element Plus 组件库的中的树形表格,但官网例子只能做到一层勾选,不能做到多层勾选,无法满足业务需求,所以研究了下&#…

uni-app 小宠物 - 会说话的小鸟

在 template 中 <view class"container"><view class"external-shape"><view class"face-box"><view class"eye-box eye-left"><view class"eyeball-box eyeball-left"><span class"…

腾讯云创建了jenkins容器,但无法访问

1、首先&#xff0c;查看本机能不能ping通你的腾讯云服务器 如果ping的通那就下一步 2、查看腾讯云服务器的防火墙关了没&#xff0c;没关关掉、 firewall-cmd --state not running 3、那就在云服务器的控制台开放端口

手写SVG图片

有时候QT中可能会需要一些简单的SVG图片,但是网上的质量参差不齐,想要满意的SVG图片,我们可以尝试直接手写的方法. 新建文本文档,将以下代码复制进去,修改后缀名为.svg,保存 <?xml version"1.0" encoding"utf-8"?> <svg xmlns"http://www…

C#冒泡排序算法

冒泡排序实现原理 冒泡排序是一种简单的排序算法&#xff0c;其原理如下&#xff1a; 从待排序的数组的第一个元素开始&#xff0c;依次比较相邻的两个元素。 如果前面的元素大于后面的元素&#xff08;升序排序&#xff09;&#xff0c;则交换这两个元素的位置&#xff0c;使…

关于AES加密输出密文不为128位的倍数的原因

今天尝试用AES-256-OFB加密一个flag结果输出的密文是43字节&#xff0c;不是128位&#xff08;16字节&#xff09;的倍数&#xff0c;代码如下&#xff1a; import os from Crypto.Cipher import AES databflag{a7ba7128-3917-4551-8260-b3499e9dd7b12} aes AES.new(os.urand…

如何进行高效的代码审查

代码审查是软件开发过程中至关重要的一环。它是指由开发团队中的其他成员对代码进行检查&#xff0c;以确保代码的质量和一致性。 代码审查可以帮助发现潜在的问题&#xff0c;例如内存泄漏、安全漏洞或性能问题。通过及早发现这些问题&#xff0c;可以避免它们在后期的软件开…

初识测开/测试

前言 在进入软件测试的正式讲解之前&#xff0c;我们需要对这个行业有一个整体的了解。 当我们从软件开发转向软件测试的时候&#xff0c;多数公司是欢迎的&#xff0c;而且难度也小。 反之&#xff0c;当我们从软件测试转向软件开发的时候&#xff0c;难度将会变得很大。 关于…

驱动作业10.23

现象 test.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include "head.h"in…

微信小程序一键获取位置

需求 有个表单需要一键获取对应位置 并显示出来效果如下&#xff1a; 点击一键获取获取对应位置 显示在 picker 默认选中 前端 代码如下: <view class"box_7 {{ showChange1? change-style: }}"><view class"box_11"><view class"…