Q & A
- reindex重建索引过程中,旧索引是否需要只读?如果不是只读的话,那还是会有写入事件进来,永远不能迁移干净数据!
一般情况下,旧索引不可能变为只读,不然业务将会暂停。解决这个问题,也就是在重建索引的情况下如何保证数据的一致性问题,通常来说有这么几种方案:
重建索引的时候无视数据写入(reindex是当前时点的快照),等alias切换完毕后,再从旧索引中捞取热数据,也就是新写入的数据;
索引别名同时绑定新旧索引,写入操作只允许在新索引上面执行,只设置一个索引可写;然后再执行reindex操作
以上方法都需要通过数据的版本号来控制输出
再比如可以在redinx开始时把写入删除操作放在消息队列里,等待alias切换之后执行,或者在reindex完成之后,通过binlog同步数据
