Closed brzone closed 6 years ago
你好,
我这里用start-optime增量同步的情况不多,而且这个值相对随机,最初的想法是使用命令行参数去配置它,配置文件和命令行参数可以同时使用,后者覆盖前者,用法如python sync.py -f CONF --start-optime TIME
,但写toml配置文件代码时,做了检查,实际上并没有正确设置,这两行代码给你造成错觉,其实删除掉更好,属于我的疏忽。
我已经修复了这个错误,可以正确读取toml的start-optime,你pull下最新代码。
谢谢,我试了下,现在已经支持在toml进行配置,加载--start-optime . 发现了其他俩个现象: 1 oplog中ts由unix时间戳和自增计数构成,toml中配置的只是unix时间戳,然后获取开始时间为 xxxxxxxxx|0 的oplog,不能精确到自增计数。 2 在toml中,src配置的是副本的ip,但是同样也是通过副本ip找到primary,通过primay进行同步数据,如果,为了减轻主本的压力,采用副本同步可能会更好一些。
oplog timestamp目前只精确到秒,我这边用到--start-optime的情况很少,鉴于oplog回放是幂等的,设置的时间比期望起始时间戳早一点,同样可以保证数据一致。 oplog是从primary读的,目的是降低延迟,读取oplog本身不会给primary带来很大压力,如果你的primary压力很大,可以修改下代码,从secondary读取oplog。
恩,好的。谢谢你这么细心的回复。
在您的代码中,有一步会去查询optime的oplog: 查不到数据,就直接返回,而我手工进行查询:
[root@database storage py-mongo-sync-master]# cat ./toml-withOutStartOptime.toml
--------
source configurations
--------
[src]
hostportstr of a member of replica set
hosts = "10.200.103.8:3717" authdb = "admin" username = "root" password = "password "
--------
destination configurations
--------
[dst]
type = "mongo" # could be "mongo" or "es"
[dst.mongo] hosts = "10.200.103.8:4717" authdb = "admin" username = "root" password = "password"
--------
sync options
--------
[sync] start_optime = 1533204691
sync database "test"
[[sync.dbs]] db = "xxxxxxxxxx"
colls = [ { coll = "orderabc" }, { coll = "userabc" } ]
--------
log config
--------
[log]
filepath = "/data/soft/py-mongo-sync-master/log/sync.log" # write to stdout if empty or not set