(保姆级)离线安装mongoDB集群

Docker搭建MongoDB集群

副本集模式(Replica Set)

  • 是一种互为主从的关系, Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移。

  • 此集群拥有一个主节点和多个从节点,这一点与主从复制模式类似,且主从节点所负责的工作也类似,但是副本集与主从复制的区别在于:当集群中主节点发生故障时,副本集可以自动投票,选举出新的主节点,并引导其余的从节点连接新的主节点,而且这个过程对应用是透明的。

准备:离线环境安装docker

参考:

一 、Docker部署MongoDB集群(Replica Set模式-单台)

mongodb版本信息:

MongoDB shell version v5.0.5

MongoDB server version: 5.0.5

单台的集成了一下shell脚本,多台的是分开的,一步一步的。

(1)镜像下载

docker pull mongo:5.0.5

内网打包镜像成tar
docker save -o <导出的文件名.tar> <镜像名称:标签>

docker save -o mongo.tar mongo:5.0.5
将tar包放入/opt/docker/下
导入镜像:
docker load -i myimage.tar
查看:
docker images

(2)建立集群网络和集群

#!/bin/bash
for conf in 27018_mongo-master 27019_mongo-slave 27020_mongo-arbiter; do \
  echo "conf len= ${#conf}, port=${conf:0:5}, name=${conf:6:${#conf}}";
  if [ ${conf:0:5} == 27018 ]
  then
     docker network create mongo-network
     echo "create mongo-network"
  fi
  docker run -d --restart=always \
  -p ${conf:0:5}:27017 \
  --name ${conf:6:${#conf}} \
  -v /opt/mongo/${conf:6:${#conf}}/configdb/:/data/configdb \
  -v /opt/mongo/${conf:6:${#conf}}/db/:/data/db \
  -v /opt/mongo/${conf:6:${#conf}}/backup:/data/backup \
  --net=mongo-network \
  mongo:5.0.5 \
  mongod --dbpath /data/db --replSet mongoreplset
done

(3)配置集群

设置MongoDB的复制集(Replica Set)的配置信息

1. 进入master容器中的mongo:docker exec -it mongo-master mongo
2. 配置集群:IP为部署数据库的服务器IP,例如IP是10.9.21.12 (防火墙端口要放开)
config = {_id:"mongoreplset", version:1, members:[{_id:0, host:"10.9.21.12:27018", priority:5}, {_id:1, host:"10.9.21.12:27019", priority:2}, {_id:2, host:"10.9.21.12:27020", priority:3}]}

rs.initiate(config)

如果提示错误,且rs.config()后查看已经有配置,但未实现主从,则可尝试执行下面的代码,重新配置(force -> 非主节点强制请求重新分配主节点。)
[errmsg” : “New config is rejected :: caused by :: replSetReconfig should only be run on a writable PRIMARY. Current state REMOVED;”]

 rs.reconfig({_id:"mongoreplset", version:1, members:[{_id:0, host:"10.9.21.12:27018", priority:5}, {_id:1, host:"10.9.21.12:27019", priority:2}, {_id:2, host:"10.9.21.12:27020", priority:3}]},{force:true})

3. 退出: exit

4. 验证集群配置:
  docker exec -it mongo-master mongo
    会有如下提示:mongoreplset:PRIMARY> 
  docker exec -it mongo-slave mongo
    会有如下提示:mongoreplset:SECONDARY>
  docker exec -it mongo-arbiter mongo
    会有如下提示:mongoreplset:SECONDARY>

(4)创建数据库用户

1. 进入master容器中的mongo:docker exec -it mongo-master mongo
2. 创建用户:
use admin
db.createUser(
        {
            user: "root",
            pwd: "db_root_password",
            roles: ["root"]
        }
    )   
db.auth("root", "Synjones2021") //测试一下
db.createUser(
        {
            user: "user01",
            pwd: "db_user01_password",
            roles: ["readWriteAnyDatabase"]
        }
    )   
exit

(5)mongodb集群的连接地址

如下:
mongodb://user01:db_user01_password@10.9.21.12:27018,10.9.21.12:27019,10.9.21.12:27020

(6)删除集群

docker ps -a

docker stop id1/id2/id3  三个都停止

docker rm -f id1/id2/id3 

docker network ls

docker network rm network_id

rm -rf /opt/mongo/..(建立集群时配置的目录)

(7)备份原数据库文件

1.进入原mongo容器: docker exec -it mongodb bash

2.备份原mongo库:mongodump --host 10.9.21.12 --port 27017 -u username -p password -o /data/backup --authenticationDatabase admin

3.停掉原mongo容器(如果部署在同一台端口冲突可先停掉): docker stop mongodb

4.拷贝备份文件(从容器内拷贝到本机):
【 docker cp <container_id>:/data/db/. /path/to/local/directory 】
/data/db/.表示拷贝/data/db目录及其所有内容,包括子目录和文件
docker cp 70161373fcef:/data/backup/. /opt/mongo/mongo-master/backup(此路径为创建容器时设置的容器、本机共享账户)

5. 进入容器内可查看到已经将文件共享进来了
  ls -lh
6. 进入master容器中:docker exec -it mongo-master bash
7. 加载备份数据:
  mongorestore --host 10.9.21.12  --port 27018 /data/backup/
8. 退出:exit

二、Docker部署MongoDB集群(Replica Set模式-多台)

假设一共有两台机器:10.9.21.13(主)、10.9.21.11(从)

(0)镜像打包 导入

docker pull mongo:5.0.5

内网打包镜像成tar
docker save -o <导出的文件名.tar> <镜像名称:标签>

docker save -o mongo.tar mongo:5.0.5
将tar包放入/opt/docker/下,
导入镜像:
docker load -i myimage.tar
查看:
docker images

(1)建立数据库集群网络

假设一共有两台机器:10.9.21.13(主)、10.9.21.11(从),两台机器均要创建 mongo-network
docker network ls
docker network create mongo-network
——————————————————————————
docker network rm network_id //删除

(2)建立集群

假设一共有两台机器:10.9.21.13(主)、10.9.21.11(从)

启动容器,并配好参数(整理为shell脚本 执行脚本)

10.9.21.13(主)
#!/bin/bash
docker run -d --restart=always \
-p 27017:27017 \
--name mongo-master \
-v /opt/mongo/mongo_master/configdb/:/data/configdb \
-v /opt/mongo/mongo_master/db/:/data/db \
-v /opt/mongo/mongo_master/backup:/data/backup \
--net=mongo-network \
mongo:5.0.5 \
mongod --dbpath /data/db --replSet mongoreplset
10.9.21.11(从)
拷贝备份文件进入-v /opt/mongo/mongo-slave/backup(如果需要)
可参考:
  进入备份文件夹backup:zip -r ttt.zip *
  跨机器拷贝:scp /opt/x/backup/tt.zip @10.9.21.13:/opt/mongo/mongo_master/backup
  解压:unzip tt.zip

#!/bin/bash
docker run -d --restart=always \
-p 27018:27017 \
--name mongo-slave \
-v /opt/mongo/mongo-slave/configdb/:/data/configdb \
-v /opt/mongo/mongo-slave/db/:/data/db \
-v /opt/mongo/mongo-slave/backup:/data/backup \
--net=mongo-network \
mongo:5.0.5 \
mongod --dbpath /data/db --replSet mongoreplset


#!/bin/bash
docker run -d --restart=always \
-p 27019:27017 \
--name mongo-arbiter \
-v /opt/mongo/mongo-arbiter/configdb/:/data/configdb \
-v /opt/mongo/mongo-arbiter/db/:/data/db \
-v /opt/mongo/mongo-arbiter/backup:/data/backup \
--net=mongo-network \
mongo:5.0.5 \
mongod --dbpath /data/db --replSet mongoreplset

(3)配置集群

1. 进入master容器:docker exec -it mongo-master bash
2. 进入mongo:mongo
3. 配置集群:IP为部署数据库的服务器IP
config = {_id:"mongoreplset", version:1, members:[{_id:0, host:"10.9.21.13:27017", priority:5}, {_id:1, host:"10.9.21.11:27018", priority:2}, {_id:2, host:"10.9.21.11:27019", priority:3}]}
rs.initiate(config)
4. 退出mongo:exit
5. 加载旧库的备份数据(如果需要,将3.1备份的数据拷贝到主机相应的挂载目录):
  mongorestore --host <mongo主Ip> --port 27017 /data/backup/
6. 退出容器: exit
7. 验证集群:
  10.9.21.13(主) docker exec -it mongo-master mongo
       会有如下提示:mongoreplset:PRIMARY> 
   10.9.21.11(从) docker exec -it mongo-slave mongo
       会有如下提示:mongoreplset:SECONDARY>
   10.9.21.11(从) docker exec -it mongo-arbiter mongo
       会有如下提示:mongoreplset:SECONDARY>

(4)导入备份数据

1. 进入master容器中:docker exec -it mongo-master bash
2. 进入容器内能看到共享文件夹内的备份文件
  cd /data/backup	
  ls -lh
3. 加载备份数据:
  mongorestore --host   10.9.21.13 --port 27018 /data/backup/

(5)链接查看

use admin

db.auth("username", "password") //测试一下

链接:
mongodb://user01:db_user01_password@10.9.21.12:27018,10.9.21.12:27019,10.9.21.12:27020

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DFS-重复覆盖模型

糖果 1243. 糖果 - AcWing题库 首先是最暴力的做法&#xff0c;我们枚举所有的选法&#xff0c;当某种选法可以尝到所有口味的糖果时&#xff0c;比较当前购买的糖果数和当前的res&#xff0c;迭代出res的最小值。这样进行搜索的话&#xff0c;最极端的状态下树的深度是n&…

腾讯云服务器多少钱1个月?2024一个月收费阿济格IE吧

2024腾讯云服务器多少钱一个月&#xff1f;5元1个月起&#xff0c;腾讯云轻量服务器4核16G12M带宽32元1个月、96元3个月&#xff0c;8核32G22M配置115元一个月、345元3个月&#xff0c;腾讯云轻量应用服务器61元一年折合5元一个月、4核8G12M配置646元15个月、2核4G5M服务器165元…

easyrecovery15易恢复中文绿色版 数据恢复软件易恢复 Ontrack EasyRecovery汉化破解版下载 易恢复软件免费版

易恢复 Ontrack EasyRecovery 由世界著名数据恢复公司 Ontrack 出品的威力非常强大的硬盘数据恢复软件。EasyRecovery 15破解版具备强大的磁盘诊断、数据恢复、文件修复功能。Ontrack EasyRecovery 能够帮你恢复由于误操作删除的&#xff0c;或者说格式化选成丢失的数据以及重建…

ASP .Net Core ILogger日志服务

&#x1f433;简介 ILogger日志服务是.NET平台中的一个内置服务&#xff0c;主要用于应用程序的日志记录。它提供了灵活的日志记录机制&#xff0c;允许开发者在应用程序中轻松地添加日志功能。以下是其主要特点和组件&#xff1a; ILogger接口&#xff1a;这是ILogger日志服…

Nacos下载和安装

&#xff08;1&#xff09;下载地址和版本 下载地址&#xff1a;Releases alibaba/nacos GitHub 解压在没有中文及空格的文件夹 &#xff08;2&#xff09;启动nacos服务 在bin目录下,打开命令行,输入 启动命令&#xff1a;sh startup.sh -m standalone - Linux/Unix/Mac …

(总结)OpenOFDM接收端信号处理流程

Overview — OpenOFDM 1.0 documentation 本篇文章为学习OpenOFDM之后的产出PPT&#xff0c;仅供学习参考。

3.19总结

A计划 题解&#xff1a;这题其实就是一个很简单的三维搜索&#xff0c;有了一个传送门&#xff0c;并且要确定是否传过去的对应位置是墙&#xff0c;防止被装死&#xff0c;同事呢又要在对应的t时间内完成&#xff08;不一定要卡着t时间恰好完成&#xff09; #include<ios…

鸿蒙实战开发:【FaultLoggerd组件】讲解

简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native InnerKits 接口 Si…

内存泄漏检测、单向链表的操作

我要成为嵌入式高手之3月19日数据结构第二天&#xff01;&#xff01; ———————————————————————————— valgrind内存测试工具 让虚拟机上网、在虚拟机上下载软件&#xff0c;参考笔记&#xff1a; 我要成为嵌入式高手之2月3日Linux高编第一天&am…

IPD集成产品开发:塑造企业未来竞争力的关键

随着市场竞争的日益激烈&#xff0c;企业对产品开发的要求也越来越高。如何在快速变化的市场环境中&#xff0c;既保证产品的批量生产效率&#xff0c;又满足客户的个性化需求&#xff0c;成为了企业面临的重要挑战。IPD&#xff08;集成产品开发&#xff09;模式&#xff0c;作…

【单点知识】基于实例讲解PyTorch中的Transforms类

文章目录 0. 前言1. 基本用法1.1 转换为Tensor1.2 图像大小调整1.3 随机裁剪1.4 中心裁剪1.5 随机翻转1.6 随机旋转1.7 填充1.8 组合变换 2. 进阶用法2.1 归一化2.2 色彩空间转换2.3 颜色抖动2.4 随机仿射2.5 透视变换2.6 自定义变换 0. 前言 按照国际惯例&#xff0c;首先声明…

Linux 常用操作命令大全

目录 一、命令大集合 1.1 whereis 1.2 which 1.3 sudo 1.4 grep 1.5 free 1.6 top 动态显示进程的状态 1.7 ps 静态显示进程信息 1.8 df 1.9 iostat 看IO性能状态 1.10 yum安装插件命令 1.11 rpm 1.12 scp远程拷贝 1.13 uname 二、linux网络命令 2.1 centos7 防火…

数据库只追求性能是不够的!

那些成功的数据库公司没有一家是通过性能比竞争对手更快而成功的。 作者&#xff1a;JORDAN TIGANI&#xff0c;DuckDB 公司 MotherDuck 联合创始人&CEO 本文和封面来源&#xff1a;https://motherduck.com/&#xff0c;爱可生开源社区翻译。 本文约 4500 字&#xff0c;预…

autojsx使用

工具&#xff1a; 投屏软件&#xff1a;https://www.sigma-rt.com/tc/download/ autojsx&#xff1a;https://github.com/kkevsekk1/AutoX/releases 开发文档&#xff1a;http://doc.autoxjs.com/#/ 开发工具&#xff1a;https://code.visualstudio.com/ vscode插件&#xff1a…

《世界之外》玩家闹上315,乙游打响维权大战

315维权微博的评论区&#xff0c;竟然被举报网易的玩家占领了。 玩家举报网易乙游《世界之外》虚假宣传侵害消费者权益&#xff0c;在游戏中设置排行榜和专属商店将玩家分为三六九等&#xff0c;诱导玩家消费氪金&#xff0c;强烈要求网易打开退款通道。 目前大批玩家举报的举…

【Leetcode】1793. 好子数组的最大分数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 n u m s nums nums &#xff08;下标从 0 0 0 开始&#xff09;和一个整数 k k k 。 一个子数组 ( i , j ) (i, j) (i,j) 的 分数 定义为 m i n ( n u m s …

YOLOv5目标检测学习(6):源码解析之:训练部分train.py

文章目录 前言一、导入相关包与配置二、主函数main2.1 checks&#xff1a;检查rank值来判断是否打印参数、检查git仓库、检查包的安装2.2 判断是否恢复上一次模型训练提问&#xff1a;opt.data, opt.cfg, opt.hyp, opt.weights, opt.project各是什么&#xff1f; 2.3 DDP mode&…

HarmonyOS NEXT应用开发之swiper指示器导航点位于swiper下方

介绍 本示例介绍通过分割swiper区域&#xff0c;实现指示器导航点位于swiper下方的效果。 效果预览图 使用说明 加载完成后swiper指示器导航点&#xff0c;位于显示内容下方。 实现思路 将swiper区域分割为两块区域&#xff0c;上方为内容区域&#xff0c;下方为空白区域。…

Linux权限维持后门及应急响应

本次应急响应实验用kali和centos7来充当攻击机和靶机 kali&#xff1a;192.168.10.130 centos7&#xff1a;192.168.10.155 前提&#xff1a; 用kali连接到centos7上面ssh root192.168.10.155 一、SSH软链接 任意密码登录即可发现程度&#xff1a;|||||| ln -sf /usr/sbi…

Learn OpenGL 17 立方体贴图

立方体贴图 我们已经使用2D纹理很长时间了&#xff0c;但除此之外仍有更多的纹理类型等着我们探索。在本节中&#xff0c;我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型&#xff1a;立方体贴图(Cube Map)。 简单来说&#xff0c;立方体贴图就是一个包含了…