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

目录

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

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

MongoDB副本集

 单机多节点docker部署流程

参考文献


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

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

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

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

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

  • MongoDB副本集

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

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

【MongoDB】docker部署MongoDB单机多节点集群_第1张图片  【MongoDB】docker部署MongoDB单机多节点集群_第2张图片

图1                                                                            图2        

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

【MongoDB】docker部署MongoDB单机多节点集群_第3张图片【MongoDB】docker部署MongoDB单机多节点集群_第4张图片

 图3                                                                           图4        

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

【MongoDB】docker部署MongoDB单机多节点集群_第5张图片

 单机多节点docker部署流程

  • 镜像拉取:
sudo docker pull mongo

【MongoDB】docker部署MongoDB单机多节点集群_第6张图片

  •  创建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

查看当前容器运行状态:

  • 配置主、从、仲裁节点

分别配置容器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}]})

  【MongoDB】docker部署MongoDB单机多节点集群_第7张图片

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

【MongoDB】docker部署MongoDB单机多节点集群_第8张图片

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

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

【MongoDB】docker部署MongoDB单机多节点集群_第9张图片

上述已完成!!!

参考文献

  • 官方文档:What is MongoDB? — MongoDB Manual
  • http://blog.csdn.net/wobilini/article/details/124618488
  • 【MongoDB】docker部署mongdb多机集群(跨主机副本集)

你可能感兴趣的:(数据库,mongodb,docker,数据库)