1. 首页 > ElasticSearch教程 > 正文

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. 准备服务器
# 节点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 节点角色配置

节点角色配置:

# 1. 查看节点角色
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 主节点选举配置

主节点选举配置:

# 1. 配置minimum_master_nodes
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 集群监控与管理

集群监控与管理:

# 1. 查看集群状态
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. 准备3个节点
# 节点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 节点角色配置实战

节点角色配置:

# 1. 查看节点角色
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 主节点选举实战

主节点选举:

# 1. 配置minimum_master_nodes
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 集群监控与管理实战

集群监控与管理:

# 1. 查看集群健康状态
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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息