基本思路
业务开发面试Elasticsearch的时候基本问的是基础知识以及倒排索引。
Elasticsearch最基本的可用性保障就是分片,而且是主从分片,所以遇到Elasticsearch如何做到高可用这个问题的时候,首先要提到这一点。
Elasticsearch高可用的核心是分片,而且每个分片都有主从之分。如果主分片崩溃了,还可以使用从分片,从而保证最基本的可用性。
接着要补充Translog的作用
而且Elasticsearch在写入数据的时候,为了保证高性能,都是写到自己的Buffer里,后面再刷新到磁盘上。为了降低数据丢失的风险,Elasticsearch还额外写了一个Translog,类似MySQL的redo log,如果Elasticsearch崩溃的话,可以利用Translog来恢复数据。
接着尝试把话题引导到准备的高可用方案中
我维护的业务对可用性要求比较高,所以在Elasticsearch的基础上,还做了一些额外的优化,来保证Elasticsearch的高可用
Elasticsearch高可用方案
限流保护节点
限流是一个治标的策略,但是它能够保证Elasticsearch不会因为突发大流量而直接崩溃。
可以通过Elasticsearch的插件机制来实现自定义的限流策略,注意Elasticsearch集群本身提供了限流的功能,也可以通过控制线程池大小和队列大小来间接实现限流的功能。
如果打算利用插件来实现限流功能的时候,就一定能够要有特殊之处。比如可以考虑结合Elasticsearch的内存使用率和CPU使用率设计限流策略。
之前用Elasticsearch的插件机制,设计过一个限流插件。功能比较简单,根据Elasticsearch当前的内存使用率和CPU使用率来判断是否需要执行限流。不管是内存使用率还是CPU使用率,只要超过阈值一段时间,就触发限流。