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

news/2024/4/27 20:17:43

Docker搭建MongoDB集群

副本集模式(Replica Set)

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

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

准备:离线环境安装docker

参考:

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

mongodb版本信息:MongoDB shell version v5.0.5MongoDB 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 ]thendocker network create mongo-networkecho "create mongo-network"fidocker 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. 退出: exit4. 验证集群配置: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 -adocker stop id1/id2/id3  三个都停止docker rm -f id1/id2/id3 docker network lsdocker network rm network_idrm -rf /opt/mongo/..(建立集群时配置的目录)

(7)备份原数据库文件

1.进入原mongo容器: docker exec -it mongodb bash2.备份原mongo库:mongodump --host 10.9.21.12 --port 27017 -u username -p password -o /data/backup --authenticationDatabase admin3.停掉原mongo容器(如果部署在同一台端口冲突可先停掉): docker stop mongodb4.拷贝备份文件(从容器内拷贝到本机):
【 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 admindb.auth("username", "password") //测试一下链接:
mongodb://user01:db_user01_password@10.9.21.12:27018,10.9.21.12:27019,10.9.21.12:27020

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

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

相关文章

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审

长安链智能合约标准协议 在智能合约编写过程中&#xff0c;不同的产品及开发人员对业务理解和编程习惯不同&#xff0c;即使同一业务所编写的合约在具体实现上也可能有很大差异&#xff0c;在运维或业务对接中面临较大的学习和理解成本&#xff0c;现有公链合约协议规范又不能完…

软件架构和基于架构的软件开发方法知识总结

一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达&#xff0c;使软件工程师能够&#xff1a; &#xff08;1&#xff09;分析设计在满足所规定的需求方面的有效性 &#xff08;2&#xff09;在设计变更相对容易的阶段&#xff0c;…

Go 1.22 - 更加强大的 Go 执行跟踪

原文&#xff1a;Michael Knyszek - 2024.03.14 runtime/trace 包含了一款强大的工具&#xff0c;用于理解和排查 Go 程序。这个功能可以生成一段时间内每个 goroutine 的执行追踪。然后&#xff0c;你可以使用 go tool trace 命令&#xff08;或者优秀的开源工具 gotraceui&a…

使用Redis做缓存的小案例

如果不了解Redis&#xff0c;可以查看本人博客&#xff1a;Redis入门 Redis基于内存&#xff0c;因此查询速度快&#xff0c;常常可以用来作为缓存使用&#xff0c;缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据&#xff0c;这样&#xff0c;我们在下一次查询…

基于python+vue智慧社区家政服务系统的设计与实现flask-django-nodejs

论文主要是对智慧社区家政服务系统进行了介绍&#xff0c;包括研究的现状&#xff0c;还有涉及的开发背景&#xff0c;然后还对系统的设计目标进行了论述&#xff0c;还有系统的需求&#xff0c;以及整个的设计方案&#xff0c;对系统的设计以及实现&#xff0c;也都论述的比较…

公司内部局域网怎么适用飞书?

随着数字化办公的普及&#xff0c;企业对于内部沟通和文件传输的需求日益增长。飞书作为一款集成了即时通讯、云文档、日程管理、视频会议等多种功能的智能协作平台&#xff0c;已经成为许多企业提高工作效率的首选工具。本文将详细介绍如何在公司内部局域网中应用飞书&#xf…