第一次使用MongoDB+Docker-从dockercompose设置
我想尝试一个我在 GitHub 上找到的项目,所以我在 MacOS 上安装了 MongoDB,现在我试图了解如何通过目录中的 docker compose 文件正确设置它。这是泊坞窗文件:
version: '3'
services:
# replica set 1
mongors1n1:
container_name: mongors1n1
image: mongo
command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
ports:
- 27017:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data1:/data/db
mongors1n2:
container_name: mongors1n2
image: mongo
command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
ports:
- 27027:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data2:/data/db
mongors1n3:
container_name: mongors1n3
image: mongo
command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
ports:
- 27037:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data3:/data/db
# replica set 2
mongors2n1:
container_name: mongors2n1
image: mongo
command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
ports:
- 27047:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data4:/data/db
mongors2n2:
container_name: mongors2n2
image: mongo
command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
ports:
- 27057:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data5:/data/db
mongors2n3:
container_name: mongors2n3
image: mongo
command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
ports:
- 27067:27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/data6:/data/db
# mongo config server
mongocfg1:
container_name: mongocfg1
image: mongo
command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/config1:/data/db
mongocfg2:
container_name: mongocfg2
image: mongo
command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/config2:/data/db
mongocfg3:
container_name: mongocfg3
image: mongo
command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
expose:
- "27017"
volumes:
- ~/mongo_cluster/config3:/data/db
# mongos router
mongos1:
container_name: mongos1
image: mongo
depends_on:
- mongocfg1
- mongocfg2
command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
ports:
- 27019:27017
expose:
- "27017"
mongos2:
container_name: mongos2
image: mongo
depends_on:
- mongocfg1
- mongocfg2
command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
ports:
- 27020:27017
expose:
- "27017"
# TODO after running docker-compose
# conf = rs.config();
# conf.members[0].priority = 2;
# rs.reconfig(conf);
这是运行和创建分片等的脚本:
#!/bin/sh
docker-compose up
# configure our config servers replica set
docker exec -it mongocfg1 bash -c "echo 'rs.initiate({_id: "mongors1conf",configsvr: true, members: [{ _id : 0, host : "mongocfg1" },{ _id : 1, host : "mongocfg2" }, { _id : 2, host : "mongocfg3" }]})' | mongo"
# building replica shard
docker exec -it mongors1n1 bash -c "echo 'rs.initiate({_id : "mongors1", members: [{ _id : 0, host : "mongors1n1" },{ _id : 1, host : "mongors1n2" },{ _id : 2, host : "mongors1n3" }]})' | mongo"
docker exec -it mongors2n1 bash -c "echo 'rs.initiate({_id : "mongors2", members: [{ _id : 0, host : "mongors2n1" },{ _id : 1, host : "mongors2n2" },{ _id : 2, host : "mongors2n3" }]})' | mongo"
# we add shard to the routers
docker exec -it mongos1 bash -c "echo 'sh.addShard("mongors1/mongors1n1")' | mongo "
docker exec -it mongos1 bash -c "echo 'sh.addShard("mongors2/mongors2n1")' | mongo "
如果我尝试直接运行脚本,则会收到错误消息:
mongos1 | {"t":{"$date":"2021-07-25T09:03:56.101+00:00"},"s":"I", "c":"-", "id":4333222, "ctx":"ReplicaSetMonitor-TaskExecutor","msg":"RSM 收到错误响应","attr":{"host":"mongocfg3:27017","error":"HostUnreachable: 连接到 mongocfg3:27017 时出错( 172.18.0.2:27017) :: 由 :: Connection denied","replicaSet":"mongors1conf","response":"{}"}} 引起
mongos1 | {"t":{"$date":"2021-07-25T09:03:56.101+00:00"},"s":"I", "c":"NETWORK", "id":4712102, "ctx":"ReplicaSetMonitor-TaskExecutor","msg":"主机在副本集中失败","attr":{"replicaSet":"mongors1conf","host":"mongocfg3:27017","error":{ "code":6,"codeName":"HostUnreachable","errmsg":"错误连接到 mongocfg3:27017 (172.18.0.2:27017) :: 由 :: 连接被拒绝"},"action":{"dropConnections ":true,"requestImmediateCheck":false,"outcome":{"host":"mongocfg3:27017","success":false,"errorMessage":"HostUnreachable:
以及其他错误,例如:
mongos1 | {"t":{"$date":"2021-07-25T09:05:39.743+00:00"},"s":"I", "c":"-", "id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"刷新密钥缓存失败","attr":{"error":"FailedToSatisfyReadPreference: 找不到与读取首选项匹配的主机 { mode:"nearest " } 为 set mongors1conf","nextWakeupMillis":1800}}
docker 不应该在没有用户的情况下配置所有文件吗?还是我需要像数据库等一样手动创建一些东西?
编辑:这是我运行脚本时出现的第一个错误:日志