热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch集群构建指南:本地环境搭建与管理

本文详细介绍了如何在本地环境中搭建Elasticsearch集群,包括节点配置、主节点选举机制、以及如何通过单播和广播方式增加节点。同时,文章还探讨了集群的高可用性和扩展性,以及如何通过配置防止脑裂现象的发生。

概述


在Elasticsearch架构中,每个节点都是一个独立运行的Elasticsearch实例,而一个集群则由一个或多个这样的节点组成。这些节点共享相同的名字,协同工作以提供数据和负载的均衡处理能力。当有新的节点加入或旧节点离开时,集群能自动检测并调整数据分布。


为了构建一个既高可用又易于扩展的系统,通常采用横向扩展策略,即通过增加更多机器而非提升单一机器性能来实现系统的扩展。这种策略确保即使某个节点失效,整个系统仍能保持正常运行,体现了集群的高可用性。


集群中添加节点


广播形式(持续探测):这种方式的特点是不可控,适用于小型或测试环境。通过复制本地Elasticsearch目录并启动相应的bat文件即可轻松添加新节点。



1 http://127.0.0.1:9200/_cluster/health


检查集群状态,确认节点数为2且状态为绿色。


单播形式(推荐模式,高度可控):通过明确指定其他节点的IP地址和端口号来建立连接,更加适合生产环境。


主节点选举


在集群结构发生变化时,各节点会通过协商确定新的主节点。可以在配置文件中设置最低主节点数量以避免脑裂问题。



discovery.zen.minimum_master_nodes: 2


对于拥有奇数个节点的集群,建议设置此值为 (N/2)+1,其中N为节点总数,以确保大多数节点同意新的主节点选择。


防止脑裂


脑裂是指因网络故障导致部分节点与主节点失去联系的现象。为了避免这种情况,应正确设置节点总数和最小主节点数。



1 discovery.zen.minimum_master_nodes: 3  # 假设总节点数为5,则设置为3


这确保只有当多数节点达成一致时,才会形成新的集群,从而减少数据分裂的风险。


错误检测


主节点选定后,通过定期的ping操作来监控其他节点的状态。可以自定义ping的时间间隔、超时时间和重试次数。



1 discovery.zen.fd.ping_interval: 1  # 每秒发送一次ping请求
2 discovery.zen.fd.ping_timeout: 30 # 最大等待时间为30秒
3 discovery_zen.fd.ping_retries: 3 # 最多尝试3次


本地搭建单播集群


以下是配置三个节点的单播集群示例。


节点1配置



1 cluster.name: my_cluster  # 集群名称
2 node.name: node1 # 节点名称
3 network.host: 127.0.0.1 # IP地址
4 http.port: 9200 # HTTP监听端口
5 transport.tcp.port: 9300 # 集群通信端口
6 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9304"]


节点2配置



1 cluster.name: my_cluster
2 node.name: node2
3 network.host: 127.0.0.1
4 http.port: 9202
5 transport.tcp.port: 9302
6 node.master: true # 允许竞选为主节点
7 node.data: true # 具有数据存储功能
8 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9304"]


节点3配置



1 cluster.name: my_cluster
2 node.name: node3
3 network.host: 127.0.0.1
4 http.port: 9204
5 transport.tcp.port: 9304
6 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9304"]


启动所有节点后,可通过以下命令验证集群状态:



1 GET _cluster/health  # Kibana Dev Tools 中执行
2 http://127.0.0.1:9200/_cluster/health?pretty # 直接浏览器访问


集群状态应显示为绿色,表明所有节点均在线且健康。


深入理解集群


在单节点环境下,集群可能为空,即没有数据或索引。通过查询集群健康状态可以了解集群的基本信息,如集群名称、健康状况、节点数量等。


Elasticsearch使用分片来存储数据,分为主要分片和复制分片。主要分片用于数据的初次存储,而复制分片则是主要分片的备份,用于提高数据的安全性和读取效率。合理配置分片数量有助于优化集群性能。


例如,创建一个包含3个主要分片和1个复制分片的索引:



PUT blogs
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}


此时,集群状态可能会变为黄色,表示虽然所有主要分片已激活,但并非所有复制分片都已分配给节点。随着更多节点的加入,复制分片将被分配至不同的节点,提高数据的可靠性和可用性。


集群扩展与维护


随着集群规模的扩大,需要定期检查和优化集群状态,确保数据的均衡分布。此外,当主节点发生故障时,集群将自动选举新的主节点,保证服务的连续性。


通过特定的API调用,还可以实现节点的动态管理和维护,例如停止某个节点参与数据分配,以便于执行维护任务而不影响整体服务。


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • CentOS 7 下构建 Elasticsearch 7.6.2 集群详解
    本文详细介绍了如何在 CentOS 7 系统中搭建 Elasticsearch 7.6.2 的集群环境,包括必要的配置步骤和注意事项。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • SpringCloud电商平台开发指南:实战案例解析
    本文详细介绍了基于SpringCloud构建的电商平台项目,涵盖了从技术选型到项目部署的全流程,旨在帮助开发者快速掌握电商平台的开发技巧。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • Elasticsearch排序机制详解
    本文深入探讨了Elasticsearch中的排序功能,包括相关性排序、字段值排序、多级排序及字符串和多值字段的排序策略,旨在帮助读者更好地理解和优化搜索结果。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
author-avatar
潇潇-77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有