关于 Docker Swarm 上 Elasticsearch 分片的问题

Question on Elasticsearch shards on Docker Swarm

我计划配置一个 3 节点 docker 集群,上面部署了弹性堆栈。配置并分配分片后,我有 2 个部分问题:

  1. 如果我们将容器存储配置为写入持久性存储(本地)- 如果 3 个节点中的一个容器死亡,分片会平衡吗?

  2. 如果我们启动一个新的容器作为新的第三个节点来代替那个死掉的节点,它会像旧的那样从磁盘读回,包括现有的数据和碎片磁盘?碎片会再次重新平衡吗?

提前致谢

背景

Elasticsearch 是一个分布式系统,主分片用于将其扩展到多个数据节点,副本分片提供更好的可用性和读取性能。并根据您的索引和集群设置,即您在一个索引中有多少分片和副本以及有多少数据节点可用,分配这些分片和副本。

回答您的问题

1.如果我们将容器存储配置为写入持久性存储(本地)——万一 3 个节点中的一个容器死亡,分片会平衡吗?

是的,如果设置允许这样做,但请记住,分片及其副本永远不会分配到同一数据节点上,因此在这些情况下,弹性搜索集群状态将为黄色(缺少副本分片)或RED(missing primary shard). ,请阅读 split-brain problem in Elasticsearch 以详细了解它。

2。如果我们启动一个新容器作为新的第 3 个节点来代替那个死掉的节点,它会像旧容器一样从磁盘读回,包括磁盘上的现有数据和碎片吗?碎片会再次重新平衡吗?

是的,当然,因为您没有将数据存储在 docker 容器中,Elasticsearch 将读取数据并使用 f-sync(这会非常快)重新分配碎片新的数据节点。