我希望对ElasticSearch节点有一些了解,以便尝试设置正确的高可用性设置:
(免责声明:我对ES很新,所以如果对我的概念有一些误解,我会非常感谢你能突出它吗)
当前设置是一个具有三个节点的集群,它们自动委托主节点之间的责任,并且这三个节点都是数据节点。客户端应用程序(.NET)被硬编码为将请求定向到一个特定节点,因此当该节点关闭时,整个群集无法从客户端应用程序访问。
大多数情况下,我可以从the ES site中掌握,我可以将无数据节点设置为专用管理节点,以避免数据加载时的过程开销。我还可以设置处理搜索和合并开销的客户端节点,并使数据节点保持数据专用。
对于高可用性,似乎首选选项是在客户端使用包含集群中所有节点的连接池,因此如果第一个选项无法访问,它会将请求定向到其他节点。
从这一切开始,我正在考虑设置具有TWO无数据,无http节点的集群作为管理节点,并让它们相互故障转移。此外,设置TWO无数据,无主节点作为“入口节点”,同时将当前3个节点保留为no-master,no-html,并将它们专用于数据处理。然后,我将在客户端应用程序上汇集两个入口节点。
因此,最终设置将是2个主节点,2个入口节点,3个数据加载。
听起来合理吗?
非常感谢您的见解!
答案 0 :(得分:2)
如果不了解应用程序所需的性能形状,很难说比您提出的架构通过基本气味测试更多。您希望详细说明有关分片复制,预期写入与读取活动比率等相关信息,以提供更具体的反馈。
然而......没有任何理由你应该将客户端硬连接到特定的ES节点,或者除了将其发送给主节点之外的任何其他请求。在主人之外的任何地方发送请求是一个坏主意并且无论如何都是毫无意义的:每个请求最终都会路由到主服务器:a)指示一组工作人员(有时是双数据/工作人员,有时只是数据)来查询分片然后b)将结果传递回主服务器,然后主服务器将它们组装起来并将总响应负载返回给客户端。
将两个/多个主服务器集中在负载均衡器下,并将客户端配置为将活动指向负载均衡器。更清洁,可能更好的表现,更不用说更容易扩展。