获取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的方式进行数据更新
免费试用 更多热门智能应用