我正试图设计一个过程,在零读取停机时间的情况下重新索引Elasticsearch索引,在该过程完成之前拒绝写入尝试。
给定一个原始索引和指向它的别名,当前流程如下:
- 创建临时索引
- 将原始索引设为只读
- 将数据从原始索引复制到临时索引
- 将临时索引设为只读
- 更新别名以指向临时索引
- 重新创建原始索引
- 将数据从暂存索引复制到原始索引
- 更新别名以指向原始索引
问题是,通过关闭索引或使用index.blocks.read_only=true
使其只读,我无法更新其别名。
将索引设为只读对于确保任何试图写入数据的人都会收到错误并自行处理重试非常重要。
更新别名对于确保任何试图读取数据的人都能顺利获得数据非常重要。
我怎样才能做到这一点?
因此,有一个详细的选项:
index.blocks.write
设置为true可禁用针对索引的数据写入操作。与read_only不同,此设置不影响元数据。例如,可以关闭具有写块的索引,但不能关闭具有只读块的索引。
出于某种原因,我认为它比限制性更强的read_only
选项要少得多,但它非常适合这里。