ElasticSearch 高可用性设置

ElasticSearch high-availability setup

我想对 ElasticSearch 节点有一些了解,以尝试设置适当的高可用性设置:

(免责声明:我是 ES 的新手,所以如果对我的概念有一些误解,如果你能强调它,我将不胜感激)

目前的设置是一个有三个节点的集群,它们之间自动委派主节点的职责,三个节点都是数据节点。客户端应用程序 (.NET) 被硬编码为将请求定向到一个特定节点,因此当该节点关闭时,整个集群无法从客户端应用程序访问。

主要是根据我从 the ES site 中掌握的信息,我可以将无数据节点设置为专用管理节点,以避免数据加载过程中的开销。我还可以设置处理搜索和合并开销的客户端节点,并保持数据节点数据专用。

对于高可用性,似乎首选的选择是在客户端使用包含集群中所有节点的连接池,因此如果第一个选项无法访问,它会将请求定向到其他节点。

基于所有这些,我正在考虑设置具有两个无数据、无 http 节点的集群作为管理节点,并让它们相互故障转移。此外,设置两个无数据、无主节点作为 "entry nodes" 工作,同时将当前 3 个节点保留为无主节点、无-html,并让它们仅专用于数据处理。然后,我将在客户端应用程序上合并两个入口节点。

因此最终设置将是 2 个主节点、2 个入口节点、3 个数据加载。

听起来合理吗?

非常感谢您的任何见解!

在不了解您的应用程序所需的性能形状的更多信息的情况下,很难说您提出的架构通过了基本气味测试。您想要详细说明有关分片复制、预期写入与读取 activity 比率以及类似的内容以提供更具体的反馈。

但是...您没有任何理由必须将您的客户端硬连接到特定的 ES 节点,或者除了将请求发送给主节点之外对请求执行任何操作。在 master 以外的任何地方发送请求是一个坏主意,而且无论如何都是毫无意义的:每个请求最终都会路由到 master,它:a) 指示一组 worker(有时是双重 data/workers,有时只是数据)查询分片然后 b) 将结果传回主站,然后主站将它们组装起来,并将 returns 整体响应有效负载发送给您的客户端。

将您的 two/however 多个主节点集中在一个负载均衡器下,并将您的客户端配置为将 activity 定向到负载均衡器。更简洁,性能可能更好,更不用说更容易扩展了。