我的MongoDB集群中有5个分片,在docker上运行。我编写了一个脚本来迁移数据(大约7000万)。该脚本已经运行了2天,但是自昨天以来该脚本一直发回错误消息(该脚本没有停止,因为我在其中添加了“ try ... except ...”,因此只要出现错误,它都将稍停一下,然后重试)
错误消息:
错误: 写入结果从172.20.0.X:X ::不可用::错误引起 连接到172.20.X.X:X ::由::连接被拒绝
休息10秒钟
现在继续
在过去几天中发生了几次,但是每次碎片重新启动时,一切都很好。但是这一次似乎无法解决问题本身。所以我所做的是
docker-compose down docker-compose up -d
因此,其他分片config_server设法重新引导,但是出现错误(172.20.X.X,名称为“ shard_server21”)的分片没有重新引导。在外壳程序中,当我运行docker-compose时,一切看起来都很正常,没有任何错误消息。
然后我尝试专门停止该分片:
docker stop shard_server21
它仍然没有返回任何错误,但是也没有停止。
我在网上找到了一些信息,我猜想该碎片已被粉碎,通常需要将其删除并重建。但是,如果我的脚本已经在群集中插入了2000万个数据,那么我将需要删除所有这些数据并从头开始运行脚本。
所以我试图从集群中简单地删除该分片,因为还有其他4个分片很好,以后我可以添加一个新的分片。我遵循了MongoDB Manuel上的说明:https://docs.mongodb.com/manual/reference/command/removeShard/#dbcmd.removeShard,并且这样做了:
db.adminCommand({removeShard:“ shard0001”})
这返回了:
{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(91),
"dbs" : NumberLong(2)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"test",
"consolidation"
],
"ok" : 1,
"operationTime" : Timestamp(1564734879, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1564734879, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
我猜它告诉我需要movePrimary或删除数据库“ test”和“ consolidation”,因为shard0001(aka shard_server21)是主要的分片。
因此,我尝试将数据库的主分片(更改为shard0000):
db.adminCommand({movePrimary:“ test”,至:“ shard0000”})
但是它返回:
{
"ok" : 0,
"errmsg" : "Error connecting to 172.20.0.12:27018 :: caused by :: Connection refused",
"code" : 6,
"codeName" : "HostUnreachable",
"operationTime" : Timestamp(1564735859, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1564735859, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
我试图删除数据库,它返回相同的错误。所以现在我不确定要迁移这些数据并继续执行脚本应该做什么,还是之前做错了什么?我在这个领域还很新。
谢谢,这是我的docker-compose.yml
version: '2'
services:
shard_server21:
container_name: shard_server21
image: mongo
networks:
mongo:
ipv4_address: 172.20.0.X
ports:
- 27018:27018
volumes:
- /opt/mongo/shard_server11/data/db:/data/db
- /opt/mongo/shard_server11/data/configdb:/data/configdb
- /opt/mongo/shard_server11/data/backup:/data/backup
command: --shardsvr --bind_ip_all
restart: always
depends_on:
- rs_config_server1
- rs_config_server2
- rs_config_server3
- rs_config_server4
- rs_config_server5
rs_config_server2:
container_name: rs_config_server1
networks:
mongo:
ipv4_address: 172.20.0.X
image: mongo
volumes:
- /opt/mongo/config_server1/data/db:/data/db
- /opt/mongo/config_server1/data/configdb:/data/configdb
command: --configsvr --replSet "rs_config_server" --bind_ip_all
restart: always
mongos:
container_name: mongos
networks:
mongo:
ipv4_address: 172.20.0.X
image: mongo
ports:
- 27017:27017
volumes:
- /opt/mongo/mongos/data/db:/data/db
- /opt/mongo/mongos/data/configdb:/data/configdb
entrypoint: mongos
command: --configdb
rs_config_server/172.20.0.X:27019,172.20.0.X:27019,172.20.0.X:27019,
172.20.0.>X:27019,172.20.0.X:27019 --bind_ip_all
depends_on:
- shard_server11
- shard_server21
- shard_server31
- shard_server41
- shard_server51
networks:
mongo:
driver: bridge
ipam:
config:
- subnet: 172.20.0.X/X