ElasticSearch教程FG035-ElasticSearch集群主从架构实战
内容简介:本文档风哥主要介绍ElasticSearch集群主从架构的概念、实现方法以及最佳实践,包括集群架构设计、节点角色配置、主节点选举、集群监控与管理等内容。通过学习本文,您将掌握如何构建一个高可用的ElasticSearch集群主从架构。风哥教程参考ElasticSearch官方文档Cluster Architecture部分。
Part01-基础概念与理论知识
1.1 集群主从架构概述
ElasticSearch集群主从架构是指由多个节点组成的集群,其中有一个主节点(Master Node)负责集群的管理和协调,其他节点作为数据节点(Data Node)存储数据并处理请求。主从架构的优势包括:
- 高可用性:当主节点故障时,会自动选举新的主节点
- 负载均衡:数据节点可以分担查询和索引压力
- 数据冗余:通过副本机制确保数据安全
- 可扩展性:可以通过添加节点来扩展集群容量
1.2 节点角色
ElasticSearch中的节点角色包括:
- 主节点(Master Node):负责集群的管理和协调,如创建索引、分配分片等
- 数据节点(Data Node):存储数据,处理查询和索引请求
- 协调节点(Coordinating Node):处理客户端请求,协调查询执行
- ingest节点(Ingest Node):处理数据预处理
- 机器学习节点(Machine Learning Node):执行机器学习任务
1.3 主节点选举
主节点选举是指当集群中没有主节点时,节点之间通过投票选举新的主节点的过程。主节点选举的原则包括:
- 资格:只有具有主节点资格的节点才能参与选举
- 投票:节点之间通过投票选举主节点
- 多数原则:获得多数投票的节点成为主节点
- 稳定性:一旦主节点选举完成,除非主节点故障,否则不会重新选举
Part02-生产环境规划与建议
2.1 集群架构设计
集群架构设计建议:
- 节点数量:根据数据量和高可用性要求,建议至少3个节点
- 主节点配置:配置3-5个具有主节点资格的节点,确保高可用性
- 数据节点配置:根据数据量和查询需求配置足够的数据节点
- 分片策略:根据数据量和节点数设置合理的分片数和副本数
2.2 节点配置规划
节点配置规划建议:
- 主节点:配置较高的CPU和内存,确保集群管理的稳定性
- 数据节点:配置较大的内存和磁盘空间,确保数据存储和处理能力
- 协调节点:配置较高的网络带宽,确保请求处理效率
- ingest节点:配置较高的CPU,确保数据预处理能力
2.3 网络规划
网络规划建议:
- 网络隔离:将ElasticSearch集群部署在专用网络中
- 网络带宽:使用万兆网络,确保节点间通信速度
- 网络延迟:确保节点间网络延迟低,避免影响集群稳定性
- 网络冗余:使用多网卡、多网络路径,确保网络可靠性
Part03-生产环境项目实施方案
3.1 集群搭建
集群搭建:
# 节点1:192.168.1.10(主节点)
# 节点2:192.168.1.11(数据节点)
# 节点3:192.168.1.12(数据节点)
# 2. 安装ElasticSearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.10.0-linux-x86_64.tar.gz
mv elasticsearch-8.10.0 /es/app/
# 3. 配置ElasticSearch
# 节点1配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: master-node-1
node.roles: [master]
network.host: 192.168.1.10
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
cluster.initial_master_nodes: [“master-node-1”]
# 节点2配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: data-node-1
node.roles: [data, ingest]
network.host: 192.168.1.11
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
# 节点3配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: data-node-2
node.roles: [data, ingest]
network.host: 192.168.1.12
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
# 4. 启动ElasticSearch
systemctl start elasticsearch
# 5. 验证集群状态
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
3.2 节点角色配置
节点角色配置:
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
# 2. 修改节点角色
# 编辑elasticsearch.yml
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
# 修改节点角色
node.roles: [master, data, ingest]
# 重启节点
systemctl restart elasticsearch
# 3. 验证节点角色
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
3.3 主节点选举配置
主节点选举配置:
curl -X PUT “http://192.168.1.10:9200/_cluster/settings” -H “Content-Type: application/json” -d ‘{
“persistent”: {
“discovery.zen.minimum_master_nodes”: 2
}
}’
# 2. 查看集群状态
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
# 3. 测试主节点故障
# 停止主节点
systemctl stop elasticsearch
# 查看集群状态
curl -X GET “http://192.168.1.11:9200/_cluster/health?pretty”
# 重启主节点
systemctl start elasticsearch
# 查看集群状态
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
3.4 集群监控与管理
集群监控与管理:
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
# 2. 查看节点状态
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
# 3. 查看分片状态
curl -X GET “http://192.168.1.10:9200/_cat/shards?v”
# 4. 查看集群统计信息
curl -X GET “http://192.168.1.10:9200/_cluster/stats?pretty”
# 5. 查看主节点信息
curl -X GET “http://192.168.1.10:9200/_cat/master?v”
Part04-生产案例与实战讲解
4.1 集群搭建实战
集群搭建:
# 节点1:192.168.1.10
# 节点2:192.168.1.11
# 节点3:192.168.1.12
# 2. 安装ElasticSearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.10.0-linux-x86_64.tar.gz
mv elasticsearch-8.10.0 /es/app/
# 3. 配置ElasticSearch
# 节点1配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: node-1
node.roles: [master, data, ingest]
network.host: 192.168.1.10
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
cluster.initial_master_nodes: [“node-1”]
# 节点2配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: node-2
node.roles: [master, data, ingest]
network.host: 192.168.1.11
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
# 节点3配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
cluster.name: fgedu-cluster
node.name: node-3
node.roles: [master, data, ingest]
network.host: 192.168.1.12
http.port: 9200
transport.port: 9300
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”, “192.168.1.12”]
# 4. 启动所有节点
systemctl start elasticsearch
# 5. 验证集群状态
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
4.2 节点角色配置实战
节点角色配置:
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
# 2. 修改节点角色
# 编辑节点1配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
# 修改为专用主节点
node.roles: [master]
# 编辑节点2配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
# 修改为数据节点
node.roles: [data, ingest]
# 编辑节点3配置
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml
# 修改为数据节点
node.roles: [data, ingest]
# 3. 重启所有节点
systemctl restart elasticsearch
# 4. 验证节点角色
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
4.3 主节点选举实战
主节点选举:
curl -X PUT “http://192.168.1.10:9200/_cluster/settings” -H “Content-Type: application/json” -d ‘{
“persistent”: {
“discovery.zen.minimum_master_nodes”: 2
}
}’
# 2. 查看当前主节点
curl -X GET “http://192.168.1.10:9200/_cat/master?v”
# 3. 模拟主节点故障
# 停止主节点
systemctl stop elasticsearch
# 4. 查看集群状态
curl -X GET “http://192.168.1.11:9200/_cluster/health?pretty”
# 5. 查看新的主节点
curl -X GET “http://192.168.1.11:9200/_cat/master?v”
# 6. 重启原主节点
systemctl start elasticsearch
# 7. 查看集群状态
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
4.4 集群监控与管理实战
集群监控与管理:
curl -X GET “http://192.168.1.10:9200/_cluster/health?pretty”
# 2. 查看节点状态
curl -X GET “http://192.168.1.10:9200/_cat/nodes?v”
# 3. 查看分片状态
curl -X GET “http://192.168.1.10:9200/_cat/shards?v”
# 4. 查看集群统计信息
curl -X GET “http://192.168.1.10:9200/_cluster/stats?pretty”
# 5. 查看索引状态
curl -X GET “http://192.168.1.10:9200/_cat/indices?v”
# 6. 查看主节点信息
curl -X GET “http://192.168.1.10:9200/_cat/master?v”
Part05-风哥经验总结与分享
5.1 集群主从架构最佳实践
- 节点角色分离:将主节点和数据节点分离,提高集群稳定性
- 多主节点配置:配置3-5个具有主节点资格的节点,确保高可用性
- 合理配置minimum_master_nodes:设置为(主节点数/2)+1,防止脑裂
- 网络优化:确保节点间网络连接稳定,延迟低
- 监控告警:建立完善的监控体系,及时发现和解决问题
- 定期备份:定期创建快照,确保数据安全
5.2 常见问题与解决方案
- 集群脑裂:配置合理的minimum_master_nodes参数,优化网络连接
- 主节点选举失败:检查网络连接,确保有足够的主节点候选
- 节点无响应:检查节点状态,重启节点
- 分片分配失败:检查磁盘空间,确保节点有足够的资源
- 性能下降:优化查询语句,调整分片策略,增加节点资源
5.3 性能优化建议
- 硬件优化:为不同角色的节点配置合适的硬件资源
- 网络优化:使用万兆网络,确保节点间通信速度
- 分片策略优化:根据数据量和节点数设置合理的分片数和副本数
- 查询优化:优化查询语句,使用缓存,减少聚合操作
- 索引优化:合理设计索引结构,使用合适的字段类型
- 监控优化:建立完善的监控体系,及时发现性能问题
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
学习交流加群风哥QQ113257174
风哥提示:集群主从架构是ElasticSearch高可用性的重要保障,需要合理配置和管理
更多学习教程公众号风哥教程itpux_com
from ElasticSearch视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
