mongo同构迁移(mongo-shake工具)

1 概述

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

官方链接:https://docs.mongodb.com/

类别:数据库

2 数据库编译安装

2.1 编译

本次编译请参考mongodb-3.6.18

2.2 安装

本次安装请参考mongodb-3.6.18

3 基础环境

3.1 环境信息      

Mongodb3.6.18(源端)

121.36.6.217(linux)

Mongodb3.6.18(目标端)

114.116.236.85(linux)

Mongo-shake(工具)

121.36.7.55(linux)

3.2 源端mongodb环境

3.2.1 创建用户

源端创建需要登录的用户,并授予管理员权限。

db.createUser({

   user: "root",

   pwd: "jiayan",

   "roles" : [

    {

      "role" : "read",

      "db" : "local"

    },

{

      "role" : "read",

      "db" : "admin"

    },

{

      "role" : "read",

      "db" : "config"

    }

  ]

})

3.2.2 打开oplog日志

1)配置文件添加如下2行:

oplogSize=50

replSet=jiayan

2)初始化副本集

use admin

rs.initiate({_id:'jiayan',members:[{_id:0,host:'127.0.0.1:27017'}]})

初始化副本集必须在admin数据库下初始化,否则初始化成功后,对数据的所有操作全部异常

1)查看oplog日志

db.printReplicationInfo()

3.3 目标端mongodb环境

3.3.1 创建用户

源端创建需要登录的用户,并授予管理员权限

db.createUser({

   user: "root",

   pwd: "jiayan",

   "roles" : [

    {

      "role" : "read",

      "db" : "local"

    },

{

      "role" : "read",

      "db" : "admin"

    },

{

      "role" : "read",

      "db" : "config"

    }

  ]

})

4 迁移工具

4.1 简介

MongoShake是一个以golang语言进行编写的通用的平台型服务,通过读取MongoDB集群的Oplog操作日志,对MongoDB的数据进行复制,后续通过操作日志实现特定需求。日志可以提供很多场景化的应用,为此,在设计时就考虑了把MongoShake做成通用的平台型服务。通过操作日志,提供日志数据订阅消费PUB/SUB功能,可通过SDK、Kafka、MetaQ等方式灵活对接以适应不同场景(如日志订阅、数据中心同步、Cache异步淘汰等)。集群数据同步是其中核心应用场景,通过抓取oplog后进行回放达到同步目的,实现灾备和多活的业务场景。

MongoShake的应用场景大致有这几种: 
  1.MongoDB集群间数据的异步复制,免去业务双写开销。 
  2.MongoDB集群间数据的镜像备份 
  3.日志离线分析 
  4.日志订阅 
  5.数据路由。根据业务需求,结合日志订阅和过滤机制,可以获取关注的数据,达到数据路由的功能。 
  6.Cache同步。日志分析的结果,知道哪些Cache可以被淘汰,哪些Cache可以进行预加载,反向推动Cache的更新 
  7.基于日志的集群监控

4.2 安装包

获取地址:

https://github.com/alibaba/MongoShake/releases/download/release-v2.4.7-20200630/mongo-shake-v2.4.7_2.tar.gz

5 迁移计划

5.1 迁移需求

从mongodb迁移到mongodb,在业务不停机的情况下完成全量数据+增量数据的迁移。

5.2 迁移策略

使用mongo-shake进行全量+增量的迁移

6 迁移过程

6.1 安装迁移工具

解压mongo-shake-v2.4.7_2.tar.gz

6.2 修改配置文件

修改collector.conf内容:

默认必须修改的以下参数,具体其他参数可以查看配置文件

master_quorum = true ##如果开启主备mongoshake拉取同一个源端,此参数需要开启。

sync_mode = all  mongo_urls = mongodb://121.36.6.217:27017 ##源MongoDB连接串信息,逗号分隔同一个副本集内的结点,分号分隔分片sharding实例,免密模式

tunnel.address = mongodb://114.116.236.85:27017  ##目标MongoDB连接串信息,此处配置通道的地址,格式与mongo_urls对齐

mongo_connect_mode=standalone ### standalone表示从任意单个结点拉取。

checkpoint.storage.url = mongodb://121.36.6.217:27017 ##checkpoint的具体写入的MongoDB地址,如果不配置,对于副本集将写入源库(db=mongoshake),对于分片集

checkpoint.storage.db = mongoshake # checkpoint存储的db的名字

6.3 确认数据

6.3.1 源端

6.3.2 目标端

6.4 全量同步

6.4.1 开启进程

执行

./collector.linux -verbose -conf=collector.conf

6.4.2 查看日志

部分日志 collector.log

 

6.4.3 查看目标端数据

6.5 增量同步

6.5.1 源端操作

6.5.2 查看日志

6.5.3 查看目标端数据

7 迁移问题

7.1 no oplog ns in mongo

7.1.1 背景

启动迁移工具进行迁移时,报:

There has no oplog collection in mongo db server

7.1.2 原因

源端mongodb没有打开oplog日志

7.1.3 解决方法

源端打开oplog日志,具体步骤请看3.2.2

7.2 no reachable servers

7.2.1 背景

启动迁移工具进行迁移时,报:

error[no reachable servers]. Please add primary node into 'mongo_urls' if 'context.storage.url' is empty

7.2.2 原因

配置文件里配置的该库,在实际源端数据库没有创建

7.2.3 解决方法

在源端创建该数据库

8 总结

Mongo-shake支持全量+增量的迁移,增量通过抓取oplog后进行回放达到同步目的,业务无需停机。

原文地址:https://www.cnblogs.com/jiayan666/p/14285139.html