作者:潇潇-77 | 来源:互联网 | 2024-12-12 12:10
本文详细介绍了如何在本地环境中搭建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调用,还可以实现节点的动态管理和维护,例如停止某个节点参与数据分配,以便于执行维护任务而不影响整体服务。