Docker快速搭建MongoDB副本集

前置条件

副本集模式的优劣本文就不在介绍了,其他文章有更加详细的介绍,想了解的同学可以先行移步其他文章。

本文介绍在三台服务器上分别构建 MongoDB 并组合成副本集。

本文编写时间:2024 年 6 月 2 日

拉取 Docker 镜像

docker pull mongo

想指定版本的,直接去 docker hub 查询版本号就好了https://hub.docker.com/_/mongo

创建映射目录

mkdir /root/mongodb
mkdir /root/mongodb/db
mkdir /root/mongodb/logs
mkdir /root/mongodb/config

创建日志文件

touch /root/mongodb/logs/mongod.log

编写 MangoDB 配置文件

vim  /root/mongodb/config/mongod.conf

配置文件内容

processManagement:
   fork: false
net:
   bindIpAll: true
   port: 27017
systemLog:
   destination: file
   path: "/data/logs/mongod.log"
   logAppend: true
replication:
   oplogSizeMB: 256
   replSetName: rs
storage:
   dbPath: "/data/db/mongo"
security:
   keyFile: "/data/mongodb/keyfile"

配置文件中的内容大家可以参考配置文件选项 - MongoDB 手册 v 7 。 0

设置keyfile

仅主节点操作

openssl rand -base64 666 > /root/mongodb/keyfile
chmod 600 /root/mongodb/keyfile

将生成的文件keyfile,复制的副节点的相同位置,并且同样配置 chmod 600

(重点)配置权限

所有服务器均执行该操作!

chown 999:999 /root/mongodb/keyfile
chown 999:999 /root/mongodb/config/mongod.conf
chown 999:999 /root/mongodb/logs/mongod.log

很多文章没有chown 999:999 这一步,导致容器无法访问文件,报错 error open file bad file

启动 docker

主节点

docker run -itd --name=mongo-master -p 27001:27017 --restart=always \
-v /root/mongodb/db:/data/db/mongo \
-v /root/mongodb/logs:/data/logs \
-v /root/mongodb/config/mongod.conf:/etc/mongod.conf \
-v /root/mongodb/keyfile:/data/mongodb/keyfile \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=Password \
mongo \
--config /etc/mongod.conf \
--auth

副节点

docker run -itd --name=mongo-salve -p 27001:27017 --restart=always \
-v /root/mongodb/db:/data/db/mongo \
-v /root/mongodb/logs:/data/logs \
-v /root/mongodb/config/mongod.conf:/etc/mongod.conf \
-v /root/mongodb/keyfile:/data/mongodb/keyfile \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=Password \
mongo \
--config /etc/mongod.conf \
--auth

进入容器内部

主节点操作即可

替换成自己的 IP 地址

docker exec -it mongo-master mongosh



use admin

config = {_id:"rs", version:1, members:[{_id:0, host:"11.11.11.11:27001", priority:9}, {_id:1, host:"22.22.22.22:27001", priority:3}, {_id:2, host:"33.33.33.33:27001",priority:1}]}

db.auth("root","Password")

rs.initiate(config)

rs.status()

查看效果

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker上安装MongoDB副本,你可以按照以下步骤进行操作: 1. 首先,创建一个网络以便于容器之间的通信,可以使用以下命令创建网络: ``` docker network create mongo-cluster ``` 2. 然后,创建一个配置服务器的容器。使用以下命令创建容器: ``` docker run --name config-server -d \ --net=mongo-cluster \ --privileged=true \ -p 20011:20011 \ -v /docker/mongo-cluster/config-server:/data/db \ mongo:latest \ --configsvr --replSet rs_config_server --bind_ip_all ``` 3. 接下来,创建三个数据节点的容器。使用以下命令创建容器: ``` docker run --name data-node1 -d \ --net=mongo-cluster \ --privileged=true \ -p 20021:20021 \ -v /docker/mongo-cluster/data-node1:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all docker run --name data-node2 -d \ --net=mongo-cluster \ --privileged=true \ -p 20022:20022 \ -v /docker/mongo-cluster/data-node2:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all docker run --name data-node3 -d \ --net=mongo-cluster \ --privileged=true \ -p 20023:20023 \ -v /docker/mongo-cluster/data-node3:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all ``` 4. 运行以下命令以配置和启动副本: ``` docker exec -it config-server mongo --port 20011 rs.initiate( { _id: "rs_config_server", configsvr: true, members: [ { _id : 0, host : "config-server:20011" } ] } ) ``` ``` docker exec -it data-node1 mongo --port 20021 rs.initiate( { _id : "rs_data_node", members: [ { _id : 0, host : "data-node1:20021" } ] } ) ``` ``` docker exec -it data-node2 mongo --port 20022 rs.add("data-node1:20021") ``` ``` docker exec -it data-node3 mongo --port 20023 rs.add("data-node1:20021") ``` 5. 最后,创建一个mongos路由服务器的容器。使用以下命令创建容器: ``` docker run --name mongos -d \ --net=mongo-cluster \ --privileged=true \ -p 27017:27017 \ -v /docker/mongo-cluster/mongos:/data/db \ mongo:latest \ --configdb rs_config_server/config-server:20011 --bind_ip_all ``` 现在你已经成功安装了MongoDB副本。你可以使用以下命令连接到mongos服务器并进行操作: ``` docker exec -it mongos mongo --port 27017 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值