• 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后进行回放达到同步目的,业务无需停机。

  • 相关阅读:
    yii2中的url美化
    一级域名301重定向到www二级域名
    使用meta来控制浏览器的渲染方式
    同一页面不同编码的提交处理
    Yii2.0 UrlManager
    sqlsever连接两个不同服务器上的数据库进行查询
    php 实现传入参数的传出
    xcode如何修改项目名称
    ios如何实现应用之间的跳转
    ios程序如何实现系统自带的分享
  • 原文地址:https://www.cnblogs.com/jiayan666/p/14285139.html
Copyright © 2020-2023  润新知