我们正在管理两个不同的 Mongo 副本集,一个用于暂存,一个用于生产,在 Kubernetes 上运行。网络是通过 Kubernetes 的内部基础设施提供的,因此每个集群上的 Mongo 服务器都可以在以下位置使用:
- mongo-0.mongodb-service.default.svc.cluster.local:27017
- mongo-1.mongodb-service.default.svc.cluster.local:27017
- mongo-2.mongodb-service.default.svc.cluster.local:27017 ,...等
我们需要使用 mongoexport / mongoimport 将数据从 staging 集群复制到 prod。暂存集群上的客户端可以使用 SSH 桥接器访问生产集群上的专用网络,因此我们设置了一个桥接器:
ssh -L 27020:mongo-0.mongodb-service.default.svc.cluster.local:27017 [..]
然后在本地执行 mongoexport,并针对 localhost:27020 运行 mongoimport。
问题:Mongo 负载平衡主要(可写)master。因此,当 mongoexport 连接到 mongo-0 时,它被告知连接到 mongo-1。
所以,嘿,我们只是设置了3个端口转发,对吧?
ssh -L 27020:mongo-0.mongodb-service.default.svc.cluster.local:27017 -L 27021:mongo-1.mongodb-service.default.svc.cluster.local:27017 -L 27022:mongo-2 .mongodb-service.default.svc.cluster.local:27017 [...]
mongoimport --host rs0/localhost:27020,localhost:27021,localhost:27022 [..]
嗯,不。此时,远程集群上的 Mongo-0 告诉 mongoimport 连接到 Mongo-1,它在本地集群上这样做(并且身份验证失败,因为不同的用户名/密码)。
问题:当远程连接必须通过 SSH 桥接时,我们可以通过什么方式将数据从一个副本集传输到另一个副本集?
谢谢!