首页 > 其他分享 > k8s版MongoShake数据迁移工具

k8s版MongoShake数据迁移工具

时间:2023-03-22 13:31:39浏览次数:49  
标签:mongo v2.8 mongodb shake cluster MongoDB MongoShake 迁移 k8s

说明

我们原有的 MongoDB 副本集集群部署在 k8s 上,后因业务需求,在 k8s 集群外使用三台虚拟机组建了一套相同架构的 MongoDB 副本集集群,现想将在k8s集群上mongoDB数据迁移到新的MongoDB集群里。

集群信息:

mongodb-1:10.x.x.56 mongodb-2:10.x.x.57 mongodb-3:10.x.x.58 功能
mongos:23000 mongos:23000 mongos:23000 路由服务,负责客户端的连接,并把任务分给shards,然后收集结果
config server:24000 config server:24000 config server:24000 配置服务器,保存集群的元数据
shard1:主:25001 shard2:主:25002 shard3:主:25003 分片:接受读写
shard2:从:25002 shard3:从:25003 shard1:从:25001 副本集:备份数据
shard3:仲裁:25003 shard1:仲裁:25001 shard2:仲裁:25002

MongoShake

Mongo-Shake由阿里云Nosql团队开发维护。Mongo-Shake是一个基于MongoDB的oplog的通用服务平台。它从源mongo数据库中获取oplog,并在目标mongo数据库中重放或发送到不同隧道的其他端。如果目标端是mongo数据库,即直接replay oplog,它就像一个同步工具,用于将数据从源MongoDB复制到另一个MongoDB,以建立冗余复制或双活复制。除了这种直接方式,还有其他隧道类型,如rpc、file、tcp、kafka。用户编写的接收器必须定义自己的接口以分别连接到这些隧道。用户还可以定义自己的可插入隧道类型。如果连接kafka等第三方消息中间件,消费者可以在pub/sub模块中灵活的异步获取订阅者数据。

更多有关MongoShake大家可以看下github,这里不再过多叙述。

下载 MongoShake 包

我们使用最简单的方式,直接在这里下载到最新的发行的包,免去编译的环节。

修改配置文件

对于MongoDB到MongoDB的同步需求,用户只需要修改collector.conf的配置文件。通常对于副本集的同步只需要配置两个:源mongodb的地址mongo_urls、目的mongodb的地址tunnel.address(与mongodb的url风格一致,db节点以逗号分割,没有用户名密码则不需要配置前缀username:password@),其余默认配置就行。如果有其他的需求再仔细阅读以下各个配置项信息。

以下我大概介绍一下我这边需求该如何进行配置,打开vim collector.conf

# 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步。
# 原mongodb已不接收新写的数据
sync_mode = full
# 副本集:mongodb://username1:password1@primaryA,secondaryB,secondaryC
# 更改成自己的地址
mongo_urls = mongodb://root:test123@mongodb-cluster-0.mongodb-cluster.middle.svc.cluster.local:27017,mongodb-cluster-1.mongodb-cluster.middle.svc.cluster.local:27017,mongodb-cluster-2.mongodb-cluster.middle.svc.cluster.local:27017
# 更改成自己的地址
tunnel.address = mongodb://admin:[email protected]:23000,10.x.x.57:23000,10.x.x.58:23000

退出,保存!

# 压缩文件
tar zcvf mongo-shake-v2.8.2.tgz mongo-shake-v2.8.2

Dockerfile文件

FROM ubuntu:18.04
LABEL maintainer="[email protected]"
WORKDIR /app
RUN apt-get update \ 
    && apt-get install vim -y \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get -y autoremove \
    && apt-get clean 
ADD mongo-shake-v2.8.2.tgz .

制作镜像:

docker build -t mongo-shake:v2.8.2 .

k8s deployment

这里提供个mongo-migrate.yaml文件供大家参考。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-migrate
spec:
  selector:
    matchLabels:
      app: mongodb-migrate
  replicas: 1
  template:
    metadata:
      labels:
        app: mongodb-migrate
    spec:
      containers:
      - name: mongodb-migrate
        image: mongo-shake:v2.8.2
        command:
        - /app/mongo-shake-v2.8.2/collector.linux
        args:
        - '-conf=/app/mongo-shake-v2.8.2/collector.conf'
        - '-verbose=1'
        #- sleep
        #- "3600000"
        resources:
          limits:
            cpu: '4'
            memory: 6Gi
          requests:
            cpu: '2'
            memory: 4Gi

数据迁移

不会覆盖/清除目标mongodb已有数据,数据迁移前最好做好目标target mongodb数据备份。

执行yaml:

kubectl apply -f mongo-migrate.yaml

如果出现如下问题:

可能是目标mongodb内存资源不足,副本进程宕掉了,这里不进行深度分析,可以使用netstat -lnp|grep xxx查看服务进程。停止迁移服务。

注意事项

  • 数据迁移过程中会占用一部分 mongodb 主机资源,尽量在业务低峰迁移。

  • 做好数据备份。

  • 最好保证mongodb主机资源充足。

参考文档

k8s版MongoShake数据迁移工具.md

标签:mongo,v2.8,mongodb,shake,cluster,MongoDB,MongoShake,迁移,k8s
From: https://blog.51cto.com/wutengfei/6142432

相关文章