类似于solr分布式同步索引的方案备忘
特点:
1.关于脚本的执行策略:
1.1生成索引的主机运行generateIndex,是每个小时的第14分钟执行,可理解为每隔一个小时执行,执行时脚本会判断是否已经有脚本或索引类在运行。如果为真等到下一个小时再去尝试。
generateIndex的脚本本身的生命周期应该在deadline(目前是23*3600s)之上(23~24h之间),如果Indexer执行完的时间小于deadline,那么IncrementIndexer会一直执行建增量索引并同步到远程主机的indexpathrsync直到deadline为止。当deadline之后,sh会很快执行完。此时crontab在下一个小时的第14分钟时,尝试执行generateIndex.sh会成功。
注意,建全量索引的类Indexer在脚本中只会执行一次。而由于IncrementIndexer的原因,则Indexer对应的全量索引相当于24小时执行一次。IncrementIndexer类会执行0到多次。不管全量增量,只要执行完就会同步索引到远程。
1.2查询主机的cpIndex是通过定时任务不间断执行。但是脚本里也会判断是否已经有该脚本执行。如果有就退出。另外,脚本里面没有deadline的操作也没有任何循环操作,执行周期较短。
2.索引的同步:
2.1并不会将indexpath里面的内容rsync到一个已经存在的indexpathtmp,这样Querier类读文件内容时,还要担心里面的内容是否会安全同步完。而如果先将内容rsync到一个中间文件夹indexpathtmptmp,然后再rename成indexpathtmp,Querier就只关心热切换,不用担心索引的质量。
2.2不管是增量还是全量,都会同步整个索引目录indexpath到远程的indexpathrsync。
3.远程锁的主要操作:`ssh root@host touch | rm -rf | test -e lockfile`
4.RR的算法:求模取余