ES的高可用

es最小高可用集群组成

  • At least three master-eligible nodes(至少三个符合主节点条件的节点)
  • At least two nodes of each role(每个角色至少有两个节点)
  • At least two copies of each shard (one primary and one or more replicas) (每个分片至少有两个副本(一个主副本和一个或多个副本))

为什么需要 3 master 节点?

因为当一个master节点挂掉之后,剩余的两个仍符合选举的"多数"从而完成选举

为什么每个角色至少需要 2 个节点?

因为一个该角色的节点挂掉之后,另一个可以替代

为什么每个分片至少需要两个副本?

因为主分片(primary shard) 和副本分片(replica shard) 不能分布在同一个节点,这样即使当一个节点失败导致分片数据丢失,还可以从另一个节点上的分片来恢复数据。保证数据安全。

不同节点数的集群,需要不同的不同配置以及健壮性对比:

|-----------------------------------|------------------|-------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
| 集群节点数 | 备注 | 角色分配 | 配置要求 | 健壮性 | client 连接串配置要求 |
| 1 个同配置节点 | 生产不推荐 | 该节点分配所有角色 | * index.number_of_replicas设置为0,这样集群才能green。 | 不能容忍节点失败,一旦失败只能从快照(snapshot)进行恢复。所以建议定时进行snapshot | |
| 2 个同配置节点 | 生产不推荐 | 2个节点都分配为除候选主节点外的其他角色。 | * index.number_of_replicas 只能设置为≤1,否则集群无法变成green; * 将其中的一个节点(node A)设置为候选master节点,另一个节点(node B)配置:node.master: false。这样node B挂了,也不影响集群的master选举。 | 只能容忍配置了node.master: false的节点挂掉,只不过这时集群为yellow,手动将index.number_of_replicas 设置为0,就变成单节点的es集群了,也能变成green | 不要只配置其中的1个节点,而应该使用类似负载均衡将请求分发到两个节点上。 |
| 2 高配置节点 +1 个低配置节点 | 资源紧张时可以这么用 | 1)2个高配置的节点:分配data,master等主要角色,不能配置voting_only角色; 2)1个低配置节点:分配voting_only角色(只用于选主时进行投票,不接受业务请求) | | 可以容忍配置了node.roles: master的任何一个节点的失败。 | 将客户端请求负载到2个高配置的节点(分配了node.role:master) |
| 3 个同配置节点 | 生产推荐 | 所有节点都分配所有角色 | | * 挂掉任何一个节点,集群不影响; * 挂掉2个节点,集群变yellow,如果将index.number_of_replicas 设置为0,集群变green | 将客户端请求负载到3个节点 |
| 多余 3 个节点 | 生产推荐(适应用大业务量的场景) | 1)建议节点专用,每个节点使用专用的角色。当然提高资源利用率,也可以考虑将节点分配几个角色(考虑负载即可) 2)候选主节点限制为3个能满足绝大多数的要求。因为太多主节点会有导致投票时间过长。 | | | |

相关推荐
上优20 分钟前
uniapp 选择 省市区 省市 以及 回显
大数据·elasticsearch·uni-app
jwolf22 小时前
Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
elasticsearch·搜索引擎·ai
你可以叫我仔哥呀3 小时前
ElasticSearch学习笔记三:基础操作(一)
笔记·学习·elasticsearch
hummhumm4 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
java1234_小锋7 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客7 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生7 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
Mephisto.java12 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe12 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码12 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎