如何从破碎的碎片迁移数据

时间:2019-08-02 09:30:56

标签: mongodb docker-compose sharding

我的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

0 个答案:

没有答案