ES的容错机制以及如何实现高可用
假设现在有一个ES最小可用集群,每个节点的磁盘都是6TB,最大QPS为1000,如下图所示:
- P0,P1,P2是一份完整的数据,R0,R1,R2是一份完整的数据;
- P0,P1,P2 提供读写、R0,R1,R2提供只读
- 两台节点,3个primary和3个Replica,最大承载数据量是6TB
- 冗余副本数量是1,可容忍一台节点宕机,磁盘的利用率是50%
- 理论可承载的最大QPS:2000
1. 高可用-1
假如对上面的最小可用集群新增一台节点进来,ES会自动进行分片均衡,且冗余副本分片和主分片不能存在于同一台节点上面,如下图:
- 三台节点,分片数量不变,每个分片容量由2TB提升到了3T,索引的数据承载量增大到了9TB
- 冗余副本的数量不变,可容忍1台(1/3)的节点宕机
- 理论最大可承受的QPS:3000
2. 高可用-2
- 为Primary添加第二个Replica
- 三台节点,3个Primary每个Primary两个副本共6个Replica
- 为了最大程度宝成数据的可用性,ES让每个节点尽量分配完整的0/1/2三个不同的分片,保证数据完成性,这样,任何一台机器都能找到完整的数据,从而实现高可用。
- 最大数据量6TB
- 理论最大可承受QPS:3000
3. 如何选择ES高可用?
- )ES在分配单个索引的分片时会将每个分片尽可能分配到更多的节点上。但是,实际情况取决于集群拥有的分片和索引的数量以及它们的大小,所以这种情况只是理想状况。
- )ES不允许Primary和它的Replica放在同一个节点中(为了容错),并且同一个节点不接受完全相同的两个Replica,也就是说,因为同一个节点存放两个相同的副本既不能提升吞吐量,也不能提升查询速度,徒耗磁盘空间。
- )每台节点的shard数量越少,每个shard分配的CPU、内存和IO资源越多,单个shard的性能越好,当一台机器一个Shard时,单个Shard性能最好。
- )相同资源分配相同的前提下,单个shard的体积越大,查询性能越低,速度越慢。
- )稳定的Master节点对于群集健康非常重要!理论上讲,应该尽可能的减轻Master节点的压力,分片数量越多,Master节点维护管理shard的任务越重,并且节点可能就要