【问题标题】:ElasticSearch high-availability setupElasticSearch 高可用性设置
【发布时间】:2015-08-12 02:16:26
【问题描述】:

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

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

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

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

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

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

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

这听起来合理吗?

非常感谢您的任何见解!

【问题讨论】:

    标签: .net elasticsearch failover


    【解决方案1】:

    如果不了解您的应用所需的性能形态,很难说您提议的架构是否通过了基本的气味测试。您需要详细说明分片复制、预期的写入与读取活动比率以及类似情况,以提供更具体的反馈。

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

    将您的两个/任意数量的主节点集中在一个负载均衡器下,并配置您的客户端以将活动定向到负载均衡器。更简洁,性能可能更好,更不用说更容易扩展了。

    【讨论】:

    • 如果我设置 N-master 节点和 M-data 节点(使用 node.master: false),并设置一些“客户端节点”(使用 node.master: false & node.data: false,具有 http.enabled: true 而集群的其余部分具有 http.enabled: false),如果我将请求定向到这些“客户端节点”,它们是否仍会将请求重定向到主节点以处理数据收集和处理?据我所知,这些客户端节点似乎可以在不依赖主节点的情况下完成这项工作。我正计划设置一个连接池并使用这些客户端节点为其播种。
    • 是的,这将按您的意愿工作。客户端节点将在不涉及主节点的情况下处理查询分散/响应收集。我误读了您的负载均衡器意图,这意味着您也允许在数据节点上进行请求处理,这是您不希望的。客户端节点前面的 LB 完全符合您的要求。祝你的新集群好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多