当前位置: 首页 > news >正文

从单机到集群:Elasticsearch集群搭建指南

Elasticsearch是一个分布式搜索和分析引擎,广泛应用于日志分析、全文检索、实时数据分析等场景。在生产环境中,通常需要搭建多节点的Elasticsearch集群以提高系统的可用性、性能和容错能力。本文将详细介绍如何搭建一个Elasticsearch集群。

1 环境准备

1.1 主机信息

  • 节点1: 192.168.10.33
  • 节点2: 192.168.10.34
  • 节点3: 192.168.10.35

1.2 安装Jdk

# 在每台主机上都安装
# 上传jdk安装包并解压
tar -zxvf jdk-11.0.25_linux-x64_bin.tar.gz -C /usr/local/

# 配置环境变量
echo " ">>/etc/profile
echo "export JAVA_HOME=/usr/local/jdk-11.0.25" >>/etc/profile
echo "export PATH=$JAVA_HOME/bin:$PATH" >>/etc/profile
source /etc/profile
# 验证
[root@node4 ~]# java --version
java 11.0.25 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
[root@node4 ~]# 

[root@node5 home]# java --version
java 11.0.25 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
[root@node5 home]# 

[root@node6 home]# java --version
java 11.0.25 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
[root@node6 home]# 

2.3 系统内核、资源参数优化

# 编辑/etc/sysctl.conf文件,添加如下内容
cp /etc/sysctl.conf /etc/sysctl.conf_bak
sysctl -p
cat >> /etc/sysctl.conf<<EOF
# 最大虚拟内存区域
vm.max_map_count=262144
# 优化网络性能
net.ipv4.tcp_retries2=5
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=32768
EOF
sysctl -p

# 编辑/etc/security/limits.conf,添加如下内容
cp /etc/security/limits.conf /etc/security/limits.conf_bak
cat >> /etc/security/limits.conf<<EOF
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
EOF

2 下载并安装 Elasticsearch

2.1 下载 Elasticsearch

下载地址:https://www.elastic.co/downloads/past-releases#elasticsearch

2.2 解压并安装

# 每台主机上上传安装包并解压安装包
cd /export/home
tar -zxvf elasticsearch-7.10.1-linux-x86_64.tar.gz

3 配置Elasticsearch集群

3.1 配置elasticsearch.yml

在每台主机上编辑Elasticsearch的配置文件:

 /export/home/elasticsearch-7.10.1/config/elasticsearch.yml

3.1.1 节点1配置(192.168.10.33)

# 备份原有配置文件并清空内容,添加如下内容
cp /export/home/elasticsearch-7.10.1/config/elasticsearch.yml /export/home/elasticsearch-7.10.1/config/elasticsearch.yml_bak
>/export/home/elasticsearch-7.10.1/config/elasticsearch.yml

cat > elasticsearch.yml << EOF
#======================== 集群基础配置 ========================
cluster.name: my_es_cluster
node.name: ${HOSTNAME}
node.roles: [ data, master ]
# ======================== 网络与发现 ========================
network.host: 192.168.10.33
http.port: 9200
transport.port: 9300
# 集群初始master节点列表
discovery.seed_hosts: ["192.168.10.33:9300", "192.168.10.34:9300", "192.168.10.35:9300"]
cluster.initial_master_nodes: ["node4", "node5", "node6"]
# ======================== 数据与路径 ========================
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# ======================== 内存与缓存 ========================
bootstrap.memory_lock: false
indices.breaker.fielddata.limit: 60%
indices.breaker.request.limit: 40%
# ======================== 监控与维护 ========================
cluster.routing.allocation.disk.watermark.low: 85%
cluster.routing.allocation.disk.watermark.high: 90%
cluster.routing.allocation.disk.watermark.flood_stage: 95%
EOF

3.1.2 节点2配置(192.168.10.34)

# 备份原有配置文件并清空内容,添加如下内容
cp /export/home/elasticsearch-7.10.1/config/elasticsearch.yml /export/home/elasticsearch-7.10.1/config/elasticsearch.yml_bak
>/export/home/elasticsearch-7.10.1/config/elasticsearch.yml

cat > elasticsearch.yml << EOF
#======================== 集群基础配置 ========================
cluster.name: my_es_cluster
node.name: ${HOSTNAME}
node.roles: [ data, master ]
# ======================== 网络与发现 ========================
network.host: 192.168.10.34
http.port: 9200
transport.port: 9300
# 集群初始master节点列表
discovery.seed_hosts: ["192.168.10.33:9300", "192.168.10.34:9300", "192.168.10.35:9300"]
cluster.initial_master_nodes: ["node4", "node5", "node6"]
# ======================== 数据与路径 ========================
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# ======================== 内存与缓存 ========================
bootstrap.memory_lock: false
indices.breaker.fielddata.limit: 60%
indices.breaker.request.limit: 40%
# ======================== 监控与维护 ========================
cluster.routing.allocation.disk.watermark.low: 85%
cluster.routing.allocation.disk.watermark.high: 90%
cluster.routing.allocation.disk.watermark.flood_stage: 95%
EOF

3.1.3 节点3配置(192.168.10.35)

# 备份原有配置文件并清空内容,添加如下内容
cp /export/home/elasticsearch-7.10.1/config/elasticsearch.yml /export/home/elasticsearch-7.10.1/config/elasticsearch.yml_bak
>/export/home/elasticsearch-7.10.1/config/elasticsearch.yml

cat > elasticsearch.yml << EOF
#======================== 集群基础配置 ========================
cluster.name: my_es_cluster
node.name: ${HOSTNAME}
node.roles: [ data, master ]
# ======================== 网络与发现 ========================
network.host: 192.168.10.35
http.port: 9200
transport.port: 9300
# 集群初始master节点列表
discovery.seed_hosts: ["192.168.10.33:9300", "192.168.10.34:9300", "192.168.10.35:9300"]
cluster.initial_master_nodes: ["node4", "node5", "node6"]
# ======================== 数据与路径 ========================
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# ======================== 内存与缓存 ========================
bootstrap.memory_lock: false
indices.breaker.fielddata.limit: 60%
indices.breaker.request.limit: 40%
# ======================== 监控与维护 ========================
cluster.routing.allocation.disk.watermark.low: 85%
cluster.routing.allocation.disk.watermark.high: 90%
cluster.routing.allocation.disk.watermark.flood_stage: 95%
EOF

3.2 JVM 配置

# 在三台主机上编辑jvm.options,备份原有配置文件并清空内容,添加如下内容
cp /export/home/elasticsearch-7.10.1/config/jvm.options /export/home/elasticsearch-7.10.1/config/jvm.options_bak
>/export/home/elasticsearch-7.10.1/config/jvm.options

cat > jvm.options << EOF
# JVM 堆内存(建议不超过物理内存的50%)
-Xms1g
-Xmx1g
# GC 优化(G1GC 适用于大内存)
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1ReservePercent=25
# 关闭JVM内存交换
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
EOF

3.3 创建数据和日志目录

# 在每台主机上创建Elasticsearch的数据和日志目录
mkdir -p /var/lib/elasticsearch
mkdir -p /var/log/elasticsearch
chown -R lianggj:lianggj /var/lib/elasticsearch
chown -R lianggj:lianggj /var/log/elasticsearch
chmod 755 /var/lib/elasticsearch

4 启动Elasticsearch集群

4.1 启动Elasticsearch

# 在每台主机上启动Elasticsearch 
/export/home/elasticsearch-7.10.1/bin/elasticsearch -d

4.2 验证集群状态

# 在任意一台主机上执行以下命令,查看集群状态
curl -X GET "192.168.10.33:9200/_cluster/health?pretty"
# 如果返回的status为green,说明集群运行正常
[lianggj@node4 config]$ curl -X GET "192.168.10.33:9200/_cluster/health?pretty"
{
  "cluster_name" : "my_es_cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[lianggj@node4 config]$ 

5 总结

通过以上步骤,我们成功在三台主机上搭建了一个Elasticsearch集群。这种分布式架构不仅提高了系统的可用性和性能,还为后续的扩展和优化提供了便利。

相关文章:

  • HTML5 初探:新特性与本地存储的魔法
  • IP-guard与Ping32哪个加密更强?两款加密软件的安全架构解析
  • 专访中兴通讯蒋军:AI数字人驱动企业培训,“内容生产”与“用户体验”双重提升
  • 第十节 MATLAB逻辑运算
  • 深入 SVG:矢量图形、滤镜与动态交互开发指南
  • 【微服务】SpringCloudGateway网关
  • 【开源宝藏】30天学会CSS - DAY8 第八课 跳动的爱心动画
  • 嵌入式八股文学习——基类构造与析构、成员初始化及继承特性详解
  • RAG核心概念
  • 蓝桥杯备考:差分数组+贪心Tallest Cow S
  • uv:Rust 驱动的 Python 包管理新时代
  • 里氏替换原则
  • SQL-查询漏洞
  • 通过国内源在Ubuntu20.0.4安装repo
  • 【时时三省】(C语言基础)用if语句实现选择结构
  • 多层感知机实现
  • Qt 线程类
  • 在普通用户下修改root用户密码
  • python中闭包与装饰器
  • DeepSeek助力Vue开发:打造丝滑的键盘快捷键
  • 网站代理维护/有什么推广的平台
  • 网站响应式首页模板/蚌埠网络推广
  • 淄博 网站推广/快手流量推广网站
  • 百度网站小程序怎么做/88个seo网站优化基础知识点
  • 成都网站建设设计/百度移动开放平台
  • 用jsp做的动态网站/广州seo怎么做