基于模板+时间+rollover api 滚动创建索引,举例:设计阶段定义:blog 索引的模板格式为: blog index
时间戳的形式,每天递增数据。
这样做的好处:不至于数据量激增导致单个索引数据量非常大,接近于上线 2 的 32次幂-1,索引存
储达到了 TB+甚至更大。
一旦单个索引很大,存储等各种风险也随之而来,所以要提前考虑+及早避免。
存储层面
冷热数据分离存储,热数据(比如最近 3 天或者一周的数据),其余为冷数据。
对于冷数据不会再写入新数据,可以考虑定期 force merge 加 shrink 压缩操作,节省存储空间和检索
效率。
部署层面
一旦之前没有规划,这里就属于应急策略。结合 ES 自身的支持动态扩展的特点,动态新增机器的
方式可以缓解集群压力,注意:如果之前主节点等规划合理,不需要重启集群也能完成动态新增
的。
elasticsearch 是如何实现 master 选举的
面试官:想了解 ES 集群的底层原理,不再只关注业务层面了。
解答:
前置前提:
1、只有候选主节点(master:true)的节点才能成为主节点。
2、最小主节点数( min master nodes)的目的是防止脑裂。
这个我看了各种网上分析的版本和源码分析的书籍,云里雾里。核对了一下代码,核心入口为
findMaster,选择主节点成功返回对应 Master,否则返回 null。
选举流程大致描述如下:
第一步:确认候选主节点数达标,elasticsearch. yml 设置的值
discovery. zen. minimum_master_nodes;
第二步:比较:先判定是否具备 master 资格,具备候选主节点资格的优先返回;若两节点都为候
选主节点,则 id 小的值会主节点。
注意这里的 id 为 string 类型。
题外话:获取节点 id 的方法。
1GET/_cat/ nodes?v&h= ip, port,heapPercent,heapMax, id, name 2ip