仅协调节点(coordinating only nodes)充当智能负载均衡器。 仅协调节点的这种特殊角色通过减轻数据和主节点的协调责任,为广泛的集群提供了优势。 加入集群后,这些节点与任何其他节点类似,都会获取完整的集群状态,并利用此信息有效地将请求定向到适当的目的地。
将协调器节点添加到 Elasticsearch 集群可以是提高集群性能和效率的战略举措。 协调节点,也称为客户端节点,本质上是 Elasticsearch 节点,不保存任何数据或执行任何计算。 它们的主要作用是将来自客户端的搜索和索引请求路由到适当的数据节点,然后聚合响应。
协调节点
诸如搜索请求或批量索引请求之类的请求可能涉及不同数据节点上保存的数据。 例如,搜索请求分两个阶段执行,这两个阶段由接收客户端请求的节点(协调节点)协调。有关数据是如何索引的,请阅读文章 “Elasticsearch:索引数据是如何完成的”。有关数据是如何读取的,请阅读文章 “Elasticsearch:数据是如何被读取的?”。
在分散阶段,协调节点将请求转发到保存数据的数据节点。 每个数据节点在本地执行请求并将其结果返回给协调节点。 在收集阶段,协调节点将每个数据节点的结果缩减为单个全局结果集。
每个节点都是隐式的协调节点。 这意味着通过 node.roles 具有显式空角色列表的节点将仅充当协调节点,无法禁用。 因此,这样的节点需要有足够的内存和 CPU 才能处理收集阶段。
详细阅读:Node | Elasticsearch Guide [8.10] | Elastic
以下是您应该考虑向集群添加协调节点的一些场景
- 高查询负载:如果你的集群遇到高查询负载,添加协调节点可以帮助更均匀地分配负载。 协调节点可以处理分发查询和聚合结果的任务,从而释放数据节点以专注于执行查询。
- 复杂聚合:如果你的用例涉及复杂聚合,协调节点可能会很有用。 聚合可能会占用大量资源,将这项工作卸载到协调节点有助于提高性能。
- 大量索引或分片:如果你的集群具有大量索引或分片,则路由请求的任务可能会变得相当复杂。 添加协调节点可以帮助管理这种复杂性并提高请求路由的效率。
- 高客户端连接计数:如果有大量客户端连接到集群,添加协调节点可以帮助更有效地管理这些连接。 协调节点可以处理客户端连接,从而释放数据节点以专注于处理请求。
- 混合云或多区域部署:在混合云或多区域部署中,协调节点可用于根据数据位置和网络延迟等因素将请求路由到适当的数据节点。
在添加协调节点之前,必须考虑对集群资源的影响。 协调节点需要 CPU、内存和网络带宽,因此你必须确保集群有足够的资源来支持其他节点。
另外,请记住,添加协调节点并不是解决所有性能问题的灵丹妙药。 监控集群的性能并根据需要进行调整非常重要。
以下是一些问题和解答
问:Elasticsearch 中的协调节点是什么?
答:协调节点也称为客户端节点,是不保存任何数据或执行任何计算的节点。 它的主要作用是将来自客户端的搜索和索引请求路由到适当的数据节点,然后聚合响应。
问:我什么时候应该考虑向集群添加协调节点?
答:如果你的集群正在经历高查询负载,如果你的用例涉及复杂的聚合,如果你的集群有大量索引或分片,如果你有大量客户端连接到你的集群,你应该考虑添加协调器节点,或者如果你正在运行混合云或多区域部署。
问:协调器节点如何提高集群的性能?
答:协调节点可以通过卸载路由请求和聚合来自数据节点的响应的任务来提高性能。 这使得数据节点能够专注于执行查询,从而加快响应时间。
问:协调节点需要哪些资源?
答:协调器节点比数据节点需要更少的 DISK、CPU 和 RAM。
问:在添加多少个节点后,我应该考虑将协调节点添加到我的 Elasticsearch 集群中?
答:添加协调器节点的决定并不严格基于集群中的节点数量。 更多的是关于集群的工作负载和性能。 如果你的集群遇到高查询负载、复杂聚合、大量索引或分片或大量客户端连接计数,那么添加协调器节点可能会很有帮助。 但是,作为一般准则,当集群增长超过 10-20 个节点时,你可能会开始考虑添加协调器节点。 请记住,监控集群的性能并根据需要进行调整非常重要。