MongoDB docker集群配置小结

 更新时间:2023年09月27日 11:27:57   作者:末班车同学  
本文主要介绍了MongoDB docker集群配置小结,主要包括如何配置MongoDB的三个节点,以及如何使用Docker Compose快速搭建集群,具有一定的参考价值,感兴趣的可以了解一下

拉取镜像

docker pull mongo:4.0.28

三台主机:主节点、备节点、仲裁节点

各个主机下,创建配置目录:

mkdir -p /root/mongodb/config
cd /root/mongodb/config

在每台主机的config目录下,添加 mongod.conf 配置文件:

# mongod.conf
​
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
​
# Where and how to store data.
#storage:
#  dbPath: /data/db
#  engine:
#  wiredTiger:
​
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/log/mongo.log
​
# network interfaces
#net:
#  port: 27017
#  bindIp: 127.0.0.1
​
​
# how the process runs
#processManagement:
#  timeZoneInfo: /usr/share/zoneinfo
​
#security:
#  keyFile: /data/db/mongo.key
#  authorization: enabled
​
#operationProfiling:
​
# 配副本集名
replication:
  replSetName: "rs0"
​
#sharding:
​
## Enterprise-Only Options:
​
#auditLog:
​
#snmp:

写三个节点的启动脚本。三个节点的配置文件要保持一致,如果也是在一台机器上部3个虚拟节点,后面2个节点记得替换一下节点目录、替换一下端口映射

创建 run_mongo_cluster_node1.sh 脚本:

docker run --name mongo1 \
        -h mongo1 \
        -v /root/mongodb/db:/data/db \
        -v /root/mongodb/log:/data/log \
        -v /root/mongodb/config:/etc/mongo \
        -p 0.0.0.0:27017:27017 \
        --restart=always \
        -d  mongo:4.0.28 \
        --config /etc/mongo/mongod.conf

创建 vim run_mongo_cluster_node2.sh 脚本:

docker run --name mongo2 \
        -h mongo2 \
        -v /root/mongodb/db:/data/db \
        -v /root/mongodb/log:/data/log \
        -v /root/mongodb/config:/etc/mongo \
        -p 0.0.0.0:27017:27017 \
        --restart=always \
        -d  mongo:4.0.28 \
        --config /etc/mongo/mongod.conf

创建 vim run_mongo_cluster_node3.sh 脚本:

docker run --name mongo3 \
        -h mongo3 \
        -v /root/mongodb/db:/data/db \
        -v /root/mongodb/log:/data/log \
        -v /root/mongodb/config:/etc/mongo \
        -p 0.0.0.0:27017:27017 \
        --restart=always \
        -d  mongo:4.0.28 \
        --config /etc/mongo/mongod.conf

启动三个节点容器

sh run_mongo_cluster_node1.sh
sh run_mongo_cluster_node2.sh
sh run_mongo_cluster_node3.sh

启动后查看日志可发现,日志提示副本集模式还没有配置集群,状态不可用

配置集群

随便进入一个节点,这里进入节点1

docker exec -it mongo_node1 mongo

把这个配置粘贴上,回车之后显示OK就可以了。

rs.initiate({
_id: "rs0",
members: [
  {_id: 0, host: "172.29.69.8:27017"},
  {_id: 1, host: "172.29.69.9:27017"},
  {_id: 2, host: "172.29.69.10:27017", arbiterOnly: true}
] })

_id: "rs0"副本集名要和配置文件中的一致。arbiterOnly: true这个是仲裁节点,建议把最后一个节点作为仲裁节点,因为第一个节点作为仲裁会报个错。通常第一个节点是主节点。
这个时候已经可以使用mongo集群了,但是没有认证,不安全。

开启认证

切到admin库

use admin

创建用户,用户名root,密码12345678,权限root,所属库admin

db.createUser({user:"root",pwd:"12345678",roles:[{role:'root',db:'admin'}]})

生成 mongo.key 签名文件

cd /root/mongodb/config
openssl rand -base64 756 > mongo.key

修改文件权限:

sudo chmod 777 mongo.key

复制 mongo.key文件到镜像中。3台机器都需要操作

sudo docker cp /root/mongodb/config/mongo.key mongo1:/tmp/mongo.key
sudo docker cp /root/mongodb/config/mongo.key mongo2:/tmp/mongo.key
sudo docker cp /root/mongodb/config/mongo.key mongo3:/tmp/mongo.key

进入 mongo1 镜像:

 docker exec -it -u mongodb mongo1 /bin/bash

修改认证所属的用户和权限:

mv /tmp/mongo.key /data/db/
chown mongodb:mongodb /data/db/mongo.key
chmod 400 /data/db/mongo.key

退出窗口,关闭镜像

docker stop mongo1
docker stop mongo2
docker stop mongo3

修改 mongod.conf 配置文件,打开 security 注释:

# mongod.conf
​
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
​
# Where and how to store data.
#storage:
#  dbPath: /data/db
#  engine:
#  wiredTiger:
​
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/log/mongo.log
​
# network interfaces
#net:
#  port: 27017
#  bindIp: 127.0.0.1
​
​
# how the process runs
#processManagement:
#  timeZoneInfo: /usr/share/zoneinfo
​
security:
  keyFile: /data/db/mongo.key
  authorization: enabled
​
#operationProfiling:
​
# 配副本集名
replication:
  replSetName: "rs0"
​
#sharding:
​
## Enterprise-Only Options:
​
#auditLog:
​
#snmp:

所有机器的配置文件都需要打开注释

开启所有镜像:

docker start mongo1
docker start mongo2
docker start mongo3

到此,认证开启完毕,集群可以使用了

mongodb操作

修改 root 账号密码:

use admin
db.updateUser(
   "root",
   {
     pwd : "1234567890",
     roles : [ { role: "root", db: "admin" } ]
   }
)

认证账号:

use admin
db.auth("root","1234567890")

命令行登录mongodb:

mongo -u root -p 1234567890

显示所有数据库:

show databases

显示数据库中所有文档:

show collections

插入数据:

db.foods.insert({"name":"西红柿"})

查看数据:

use test
db.foods.find()

删除现有用户:

db.dropUser("root")

删除集合:

db.foods.drop()

到此这篇关于MongoDB docker集群配置小结的文章就介绍到这了,更多相关MongoDB docker集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器自启动的实现方法

    Docker容器自启动的实现方法

    这篇文章主要介绍了Docker容器自启动的实现方法,详细的介绍了Docker的 Restart policy命令,非常具有实用价值,需要的朋友可以参考下
    2018-09-09
  • Docker部署Apollo的实现步骤

    Docker部署Apollo的实现步骤

    众所周知分布式配置中心在目前也可以说是企业中项目的标配了,本文主要介绍了Docker 部署Apollo的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 解决Mac下 docker 无法 ping 通宿主机的问题

    解决Mac下 docker 无法 ping 通宿主机的问题

    这篇文章主要介绍了解决Mac下 docker 无法 ping 通宿主机的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker阿里云RocketMQ 4.5.1部署流程详解

    Docker阿里云RocketMQ 4.5.1部署流程详解

    RocketMQ是阿里开源的一款分布式消息中间件,具有日志监控、消息推送、金融报文、电信信令、削峰填谷等功能.接下来通过本文给大家介绍Docker阿里云RocketMQ 4.5.1部署流程,感兴趣的朋友一起看看吧
    2021-05-05
  • docker 如何修改容器的端口

    docker 如何修改容器的端口

    正在运行的容器端口冲突了,但是还需要这个容器,怎么办?只能修改端口了,今天通过本文给大家介绍docker 如何修改容器的端口,感兴趣的朋友一起看看吧
    2024-01-01
  • docker中使用opwrt详解

    docker中使用opwrt详解

    本文主要介绍了在Docker中配置OpenWRT的详细步骤,首先需要配置Docker网络,包括开启网卡混杂模式和创建Docker的虚拟网络;然后需要准备OpenWRT镜像,包括获取相应镜像和解压导入Docker网络;接着生成并开启配置好的容器,修改容器内的网络设置
    2024-10-10
  • 在Docker中的ubuntu中安装Python3和Pip的问题

    在Docker中的ubuntu中安装Python3和Pip的问题

    这篇文章主要介绍了在Docker中的ubuntu中安装Python3和Pip的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 嵌入式移植docker报错问题(汇总)

    嵌入式移植docker报错问题(汇总)

    这篇文章主要介绍了嵌入式移植docker报错问题(汇总),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 解决Docker错误“docker build“ requires exactly 1 argument(s)问题

    解决Docker错误“docker build“ requires exactly 1 argument(s)

    这篇文章主要介绍了解决Docker错误“docker build“ requires exactly 1 argument(s)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Mac下部署springBoot项目到Docker中(demo)

    Mac下部署springBoot项目到Docker中(demo)

    本文通过一个简单的demo给大家分享Mac下部署springBoot项目到Docker的方法,感兴趣的朋友一起看看吧
    2018-01-01

最新评论