mongodb数据迁移工具mongoshake的使用 | 客服服务营销数智化洞察_晓观点
       

mongodb数据迁移工具mongoshake的使用

获取mongoshake

在release中直接下载解压包: https://github.com/alibaba/MongoShake

linux服务器上的运行方式为: /path/to/mongoshake/collector.linux -conf collector.conf

collector.conf文件中的字段解释

# 源地址                           更改为此次同步的源地址
mongo_urls = mongodb://user:passwd@127.0.0.1:27018,127.0.0.1:27018

# 目的地址,                              新集群地址
tunnel.address = mongodb://user:passwd@127.0.0.1:27017

# 检查点写目的地址
checkpoint.storage.url = mongodb://user:passwd@127.0.0.1:27017
# 检查点存储表名,默认存在mongoshake库下
checkpoint.storage.collection = ckpt_default

# 转换命名空间,比如a.b同步后变成c.d,谨慎建议开启,比较耗性能
transform.namespace =

# 黑白名单过滤,目前不支持正则,白名单表示通过的namespace,黑名单表示过滤的namespace,
# 不能同时指定。分号分割不同namespace,每个namespace可以是db,也可以是db.collection
# 写了黑名单则黑名单库被排除在外,其他全同步,写了白名单则白名单下库或表被同步,其他不同步
filter.namespace.black =
filter.namespace.white =

# 同步时如果目的库存在,是否先删除目的库再进行同步,true表示先删除再同步,false表示不删除
# 多个集群同步到同一个集群中的库或表时不删除已有的则可以以追加模式同步【注意点 1】
full_sync.collection_exist_drop = false

# 如果_id存在在目的库,是否将insert语句修改为update语句。
full_sync.executor.insert_on_dup_update = true          【注意点 2】

# 如果_id不存在在目的库,是否将update语句修改为insert语句, 【注意点 2】
incr_sync.executor.upsert = true

# 如果_id存在在目的库,是否将insert语句修改为update语句,   【注意点 2】
incr_sync.executor.insert_on_dup_update = true

# 如果写入存在冲突,记录冲突的文档【可选:none,db,sdk】
# db模式将冲突记录到mongoshake-conflict库中
incr_sync.conflict_write_to = none

同步状态监控脚本

#!/bin/bash
# 检测是否有一下字样则视为报错需要打出日志
# 用法 bash check_mongoshake.sh /path/to/mongoshake.log
log_dir=$1
if [[ ! -f $1 ]]; then
        echo "文件不存在或参数有误!" '用法: bash check_mongoshake.sh /path/to/mongoshake.log'
        exit 1
fi
cp $log_dir $log_dir`date +%Y-%m-%d-%H%M%S`
echo > $log_dir
count=0
while [1==1]; do
    tail -f "$log_dir" | while read LINE ; do
        res=`echo $LINE | grep -oE '\[EROR\]|\[CRIT\]'`
        if [[ $res == '[EROR]' ]]; then
            count=$(($count + 1))
            echo "${log_dir} 有 [EROR] 发生!"
            #TODO:告警方式
        elif [[ $res == '[CRIT]' ]]; then
            count=$(($count + 1))
            echo "${log_dir} 有 [CRIT] 发生!"
            #TODO:告警方式
        fi
    
        if [ $count -gt 3 ]; then
            echo "${log_dir} 出现大量报错内容,监控已停止,请联系研发处理数据问题!"
            #TODO: 告警方式
        fi
        break
    done
    if [ $count -gt 3 ]; then
            echo "${log_dir} 出现大量报错内容,监控已停止,请联系研发处理数据问题!"
            #TODO: 告警方式
            exit 1
    fi
done

控制全量同步速度

# TPS参数则为全量同步限速QPS;{full_sync_port} 填写配置文件中的端口号
curl -X POST --data '{"TPS":1024}' 127.0.0.1:{full_sync_port}/sentinel/options 

注意点

由于默认是使用oplog进行同步,在数据量达到10亿级别时,oplog的回放速度只有约500左右,需要考虑使用其他方式进行增量同步,如使用临时表接收数据,然后再启动一个mongoexport/import的方式进行数据更新

免费试用 更多热门智能应用                        
(0)
研发专家-Halk研发专家-Halk
上一篇 2025年1月1日
下一篇 2025年1月4日

相关推荐