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

server/2025/3/31 5:38:19/
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.ymlcat > 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.ymlcat > 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.ymlcat > 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.optionscat > 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集群。这种分布式架构不仅提高了系统的可用性和性能,还为后续的扩展和优化提供了便利。


http://www.ppmy.cn/server/179736.html

相关文章

【linux指令】一文掌握 Linux 基础命令(Linux 命令速查)

文章目录 命令速查表系统硬件用户登陆文件进程安装包文件权限安装源(编译)压缩/打包搜索网络文件传输磁盘使用情况目录遍历文件描述符输出重定向 前后台&&#xff08;终端关闭&#xff0c;程序也关闭&#xff09;nohup&#xff08;终端关闭&#xff0c;程序继续运行&#x…

Android UI 组件系列(三):ImageView 使用技巧与图像加载

引言 在 Android 开发中&#xff0c;图像展示是常见的需求之一&#xff0c;无论是在应用的界面中展示本地图片&#xff0c;还是从网络加载动态内容&#xff0c;ImageView 都是最基础的 UI 组件之一。它不仅能够显示各种类型的图像资源&#xff0c;还可以灵活地调整图像的显示方…

A Brief History: from GPT-1 to GPT-3

This is my reading notes of 《Developing Apps with GPT-4 and ChatGPT》. In this section, we will introduce the evolution of the OpenAI GPT medels from GPT-1 to GPT-4. GPT-1 In mid-2018, OpenAI published a paper titled “Improving Language Understanding …

阶段一:Java基础语法

目标&#xff1a;掌握Java的基本语法&#xff0c;理解变量、数据类型、运算符、控制结构等。 1. Java开发环境搭建 安装JDK配置环境变量编写第一个Java程序 代码示例&#xff1a; // HelloWorld.java public class HelloWorld { // 定义类名为 HelloWorldpublic static vo…

解决docker重启后包丢失的报错日常

项目是使用fastapi结合iotdb部署在阿里云服务器&#xff0c;今天修改了一个iotdb配置文件的问题&#xff0c;就一直显示500报错出现了&#xff0c;直接down了iotdb但是发现不仅是iotdb而是整个fastapi和iotdb的服务全部down完了&#xff0c;重启服务。 解决措施第一步 &#xf…

第十六章:Specialization and Overloading_《C++ Templates》notes

Specialization and Overloading 一、模板特化与重载的核心概念二、代码实战与测试用例三、关键知识点总结四、进阶技巧五、实践建议多选题设计题代码测试说明 一、模板特化与重载的核心概念 函数模板重载 (Function Template Overloading) // 基础模板 template<typename…

重温Docker 构建

Dockerfile 单镜像生成 # 使用 Python 3.13-slim 作为基础镜像 FROM python:3.13-slim# 设置工作目录 WORKDIR /app# 复制要求的依赖文件到容器内 COPY requirements.txt /app/# 安装 Python 依赖 RUN pip install --no-cache-dir -r requirements.txt# 复制源代码到容器内 C…

【Linux文件IO】Linux中标准IO的API的描述和基本用法

Linux中标准IO的API的描述和基本用法 一、标准IO相关API1、文件的打开和关闭示例代码&#xff1a; 2、文件的读写示例代码&#xff1a;用标准IO&#xff08;fread、fwrite&#xff09;实现文件拷贝(任何文件均可拷贝) 3、文件偏移设置示例代码&#xff1a; 4、fgets fputs fget…