目标:实现mongoDB主备中心的数据同步,服务的无缝切换
本次使用阿里的mongoShake功能实现同步(mongoShake windows和liunx都可以使用,本次为windows),并附上开启自启脚本
阿里开源了mongoshake
git地址:https://github.com/alibaba/MongoShake/releases/tag/release-v2.4.10-20200814
go语言编写,可直接下载编译好的包 ,测试采用的是mongo-shake-v2.4.10.tar.gz
增量同步基本能做到秒级同步
1.解压压缩包
2.修改配置文件collector.conf
(注意已测试,在初次同步时需要修改同步当时为full,否则无法同步,全量同步后,再改同步方式为incr执行)
mongo_urls = mongodb://username:password@10.1.1.1:1001,10.2.2.2:2002,10.3.3.3:3003 #源端连接串信息,逗号分隔不同的mongod
sync_mode = all # 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步。
tunnel.address = mongodb://username:password@10.5.5.5:5005, 10.6.6.6:6006, 10.7.7.7:7007 #目的端连接串信息,逗号分隔不同的mongod
3执行命令collector.windows -conf=collector.conf
全量同步会很快执行完,增量同步则显示一直执行的状态
4.建议增量同步脚本改成开启自启方式
a.创建一个txt文件,写入增量同步的命令 如下,并改扩展名为bat
rem ******MongoDB backup start********
@echo off
d:
rem 此处改为本机mongoshake的地址
cd D:\ck\devlopsTools\mongo-shake-v2.4.10\mongo-shake-v2.4.10
collector.windows -conf=collector.conf
@echo on
b.新建脚本mongosync.vbs,内容如下,换成bat脚本的地址
createobject("wscript.shell").run"C:\Users\Lenovo\Desktop\mongosync.bat",0
4、创建run.vbs的快捷方式,移动到:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\【开始】菜单\程序\启动
即开机自启
测试: mongoDB 可以支持从集群往单节点同步,单节点同步其他,因为mongoshake是以oplog来同步的,单节点是没有oplog的,因此备中心最好也是个集群,在切换时中心,mongoshake将源mongoDB地址和目的mongoDB地址切换,即可同步
在172.21.15.13,172.21.15.14,172.21.15.16新搭建的副本集作为了备用中心,在本地和172.21.15.15上同时部署了mongoshake进行了测试(mongoshake)可以多部署
以下和mongoshake同步无关,是个人所写windows下mongoDB同步代码,需要可以随便看看
由于mongoDB官方对增量备份不是很支持,网上大多是liunx用的备份工具,故写此文章。
需求:主中心3节点,备中心一节点,主备中心不是同一个集群但是可以ping,现在要求备中心每5分钟增量主中心数据
定时任务+mongoDB工具
指定targetMongoTemplate的数据库
@Configuration
@EnableMongoRepositories
@EnableTransactionManagement
@ComponentScan
public class MongoDBConfig extends AbstractMongoConfiguration {
@Value("${spring.data.target.mongodb.uri}")
private String targetUri;
@Bean(name = "targetMongoTemplate")
public MongoTemplate getSecondaryMongoTemplate() {
SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI(targetUri));
return new MongoTemplate(simpleMongoDbFactory);
}
}