【MongoDB】docker部署MongoDB单机多节点集群

目录

概述-MongoDB Replication(副本集,可参考官方英文)

​​​​​​冗余&&数据可用性

MongoDB副本集

 单机多节点docker部署流程

参考文献


 

概述-MongoDB Replication(副本集,可参考官方英文)

        跨主机多节点的集群docker部署可移步至该参考文献

        MongoDB中的副本集可以理解为同一组维护相同数据集的mongod进程。副本集作为所有生产部署的基础,它提供了冗余性、高可用性。下面主要介绍MongoDB中的副本以及副本集的组件及其架构。

  • ​​​​​​冗余&&数据可用性

      副本集相当于在多个数据库服务端(或者说多个节点)进行了数据备份,这种方式有效提高了单节点数据库服务段的容错能力。也就是说当某个节点发生异常后,仍然可以从其他节点获取数据。副本集允许客户端从不同的服务端读取数据,因此该部署方式提供了更强大的数据读取的能力。在不同节点上维护副本集可以提高数据局部性以及数据可用性。

  • MongoDB副本集

        一个副本集由多个mongod实例组成,这些mongod实例维护着相同的数据集。副本集的组成包括多个数据负载节点1个可选的仲裁节点。其中,多个数据负载节点中=1个主节点+多个从节点

       主从节点及其关系:如图1所示,主节点能够接受所有的读写操作;对于某个副本集来讲,通常只允许1个主节点存在。如图2所示,从节点相当于继承了主节点的操作,复制了主节点的数据集以保证各个节点的数据统一。

0eea6450fd2c4d6c81ecb461dd0b045f.png  f9b336fb56c44ba18f19cfe44ecc2695.png

 

图1                                                                            图2        

        如图3所示,当存在主、从节点时,可以添加仲裁节点。其作用面对异常情况(比如说主节点出现连接超时的情况时候,其他从节点就会被选举为主节点,这种情况可以粗浅对应下图4所示的状态)通过选举机制推选主节点。仲裁节点不存储数据集,并且其本身不会参与选举,也就是说不管总、从节点如何变化,仲裁节点都不会变化。

 

4636d311ff5d45d481ebe05d5bc1c84c.png5a081060469b4059b56aa9e89fe83361.png

 

 图3                                                                           图4        

         此外,客户端进行数据查询等操作时默认是请求主节点的,不过MongoDB副本集允许客户端优先从指定的从节点进行数据库的读取操作。

45945d8eda7445d89c3ac50dc171ba82.png

 

 单机多节点docker部署流程

 

  • 镜像拉取:
sudo docker pull mongo

99151f33638c4ff594e2e6bd3ee139d6.png

  •  创建MongoDB容器(主节点、从节点、仲裁节点)

配置MongoDB容器挂载文件

# 创建本地文件夹作为各docker容器的挂载目录
sudo mkdir -p /data/application/mongo1/db
sudo mkdir -p /data/application/mongo2/db
sudo mkdir -p /data/application/mongo3/db
sudo mkdir -p /data/application/mongo1/configdb
sudo mkdir -p /data/application/mongo2/configdb
sudo mkdir -p /data/application/mongo3/configdb

# 在对应文件夹内创建配置文件
sudo vim /data/application/mongo1/configdb/mongod.conf
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo2/configdb/
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo3/configdb/
# 粘贴下面的配置文件后保存
# net:
#   port: 27017
#   bindIp: 0.0.0.0
# systemLog:
#   logAppend: true
# security: 
#   keyFile: "/data/configdb/mongodbKeyfile.key"    # 注意该路径为稍后创建容器内的路径,非本地宿主机
#   clusterAuthMode: "keyFile"
#   #authorization: "enabled"                       
# replication: 
#   replSetName: "mongoRs" 

# 生成Key文件,这里需要切换至root
openssl rand -base64 756 > /data/application/mongo1/configdb/mongodbKeyfile.key

# 复制Key文件至各节点配置
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo2/configdb
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo3/configdb

# Key文件可读权限
sudo chmod 400 /data/application/mongo1/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo2/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo3/configdb/mongodbKeyfile.key

启动容器(3个节点):

# 实例化docker容器
sudo docker run -di --name=mongo_server1 -p 37017:27017 -v /data/application/mongo1/configdb:/data/configdb/ -v /data/application/mongo1/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
sudo docker run -di --name=mongo_server2 -p 47017:27017 -v /data/application/mongo2/configdb:/data/configdb/ -v /data/application/mongo2/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
sudo docker run -di --name=mongo_server3 -p 57017:27017 -v /data/application/mongo3/configdb:/data/configdb/ -v /data/application/mongo3/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf

查看当前容器运行状态:

57200fc447244f5fb0bb2f7752857c27.png

 

  • 配置主、从、仲裁节点

分别配置容器1、配置容器2、配置容器3为主节点、从节点、仲裁节点

# 进入容器
sudo docker exec -it mongo_server1 mongosh admin
# 配置节点
rs.initiate({_id:"mongoRs", members:[{_id:0, host:"你的IP:37017"}, {_id:1, host:"你的IP:47017"}, {_id:2, host:"你的IP:57017", arbiterOnly:true}]})

  cb9289edd3d34c49b5a0a8647d2c9d6b.png

创建用户用mongodb-compass连接验证下数据集的同步

327cc10c4dd34b3d848bdb5f6bd9ff2f.png

Ubuntu如何安装mongodb-compass的方法可以参考下面:

wget https://downloads.mongodb.com/compass/mongodb-compass_1.32.3_amd64.deb
sudo dpkg -i mongodb-compass_1.32.3_amd64.deb
mongodb-compass  # 执行compass

 从下图可以看出,在主节点创建记录,从节点同步产生记录!

bb6a23ff592a44509bb7de187a9a5459.png

 

上述已完成!!!

 

参考文献

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Felier.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值