大数据-170 Elasticsearch 7.3.0 三节点集群实战:目录/参数/启动到联机

TL;DR

  • 场景:三台 Linux 机器部署 Elasticsearch 7.3.0,多节点联机与系统参数校正。
  • 结论:按目录权限→系统内核/limits→ES 配置→分发→启动顺序执行,能稳定形成集群。
  • 产出:可复用的命令清单、最小化配置模板、常见错误定位与修复清单。

版本矩阵

项目 已验证 说明
Elasticsearch 7.3.0 (linux-x86_64 tar.gz) 按文中下载与解压路径部署到 /opt/servers/elasticsearch-7.3.0。
节点数量:3(h121/h122/h123) 每节点 node.name 唯一;通过 rsync 分发配置后做节点名/host 差异化。
目录与权限 /opt/servers/es/{data,logs} 属主 es_server;ES 目录 chown -R es_server。
运行用户 使用 es_server 启动,禁止 root。
系统参数(内核/limits) vm.max_map_count=655360;nofile 65536、nproc 4096。需 sysctl -p 生效。
JVM 堆 -Xms2g / -Xmx2g(示例值,建议按物理内存≈50%评估)。

文件夹设置

三台机器都要执行,建立文件夹,这里是 日志、数据等内容。

shell 复制代码
mkdir -p /opt/servers/es
mkdir -p /opt/servers/es/data
mkdir -p /opt/servers/es/logs

chown -R es_server /opt/servers/es
chown -R es_server /opt/servers/es/data
chown -R es_server /opt/servers/es/logs

复制项目

我们目前有三台机器,上节我们完成了一台机器的配置。现在我们把三台机器都安装上ES的环境,你可以每台都下载,或者使用同步工具来同步。

shell 复制代码
rsync-script /opt/software/elasticsearch-7.3.0-linux-x86_64.tar.gz

h121主机

h121是主机,这里是之前下载的。

shell 复制代码
cd /opt/software
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
shell 复制代码
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
mv elasticsearch-7.3.0 ../servers/

处理完的结果如下图所示:

创建用户

三台机器都要设置对了,我的账号和密码是一样的,都是 es_server。

shell 复制代码
useradd es_server
passwd es_server

文件夹设置

三台机器都要执行,建立文件夹,这里是 日志、数据等内容。

shell 复制代码
mkdir -p /opt/servers/es
mkdir -p /opt/servers/es/data
mkdir -p /opt/servers/es/logs

chown -R es_server /opt/servers/es
chown -R es_server /opt/servers/es/data
chown -R es_server /opt/servers/es/logs

目录权限

shell 复制代码
chown -R es_server /opt/servers/elasticsearch-7.3.0

配置完的路径如下图所示:

sudo权限

三台机器使用root用户执行sudo然后为es用户添加权限:

shell 复制代码
vim /etc/sudoers

添加以下的内容:

shell 复制代码
es ALL=(ALL) ALL

添加的截图如下图所示:

配置说明

elasticsearch.yml 配置文件说明如下:

修改配置

三台机器都要执行,我们需要修改配置文件信息:

shell 复制代码
cd /opt/servers/elasticsearch-7.3.0/config
vim elasticsearch.yml

修改配置的内容有如下这些:

shell 复制代码
# 集群名字
cluster.name: wzkicu-es
# 集群中当前的节点
node.name: h121.wzk.icu
# 数据目录
path.data: /opt/servers/es/data
# 日志目录
path.logs: /opt/servers/es/logs
# 当前主机的ip地址
network.host: h121.wzk.icu
network.bind_host: h121.wzk.icu
# 这里如果网卡绑定的不对 可以写死你的公网IP
network.publish_host: 114.115.221.144

http.port: 9200
# 初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["h121.wzk.icu","h122.wzk.icu","h123.wzk.icu"]
# 写入候选主节点的设备地址
discovery.seed_hosts: ["h121.wzk.icu", "h122.wzk.icu","h123.wzk.icu"]

分发配置

为了保证三个文件的配置内容一致(手动修改name等除外),我们直接分发配置的整个文件夹过去:

shell 复制代码
rsync-script /opt/servers/elasticsearch-7.3.0/config

这样可以防止认证等信息错误导致的不必要的错误,对应的配置内容如下,注意在 h122 和 h123 节点上,node.name 等内容要根据实际情况修改:

(注意:network部分是比较容易出问题的,如果你出了问题,必须绑定的网卡不对,导致IP的问题等,那你需要向我这样配置,来指明绑定的地址等内容) (注意:如果你一切正常,那按之前的来就行,没有必要增加不必要的复杂度)

系统参数

记得和上节一样,修改 JVM 内存大小:

shell 复制代码
cd /opt/lagou/servers/es/elasticsearch/config
vim jvm.options

修改内存的参数:

shell 复制代码
-Xms2g
-Xmx2g

此外和上节一样,如果你没修改操作系统的限制,如果你启动报错的话,请回到上节,修改 limits 等参数配置。具体的内容如下: 修改 sysctl.conf:

shell 复制代码
vim /etc/sysctl.conf

末尾我们添加:

shell 复制代码
vm.max_map_count=655360

修改的结果如下图所示: 执行 sysctl -p,让配置生效:

shell 复制代码
sysctl -p

运行结果如下图所示: 继续修改:limits.conf,目的是修改Linux系统对文件描述符的限制级别:

shell 复制代码
vim /etc/security/limits.conf

我们需要在末尾添加如下的内容:

shell 复制代码
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

截图如下所示:

启动服务

这里是启动,要发现错误的话,可以到 logs 目录下查看,我们在三台机器上都执行:

shell 复制代码
su es_server
/opt/servers/elasticsearch-7.3.0/bin/elasticsearch -d

h121

h121 启动 ES服务,启动结果如下: 对应的网页内容:

h122

h123

访问集群

如果我们使用Elasticsearch Head工具查看,可以看到是集群的状态,对应的截图为:

错误速查

症状 根因 定位 修复
启动即报"max virtual memory areas vm.max_map_count too low" 未设置内核参数 dmesg/日志首屏 /etc/sysctl.confvm.max_map_count=655360sysctl -p
"max file descriptors [4096] for elasticsearch process is too low" limits 未生效 ulimit -n limits.conf 设置 nofile 65536nproc 4096,重新登录生效
ES 拒绝以 root 运行 以 root 启动 启动日志警告 切换为 su es_server;确保 ES 目录属主为 es_server
节点启动但不入集群 9300 未通/主机名解析失败/discovery.seed_hosts 不可达 netstat/telnet 9300/nslookup 放通内网 9300;修正 discovery.seed_hosts 为可解析可达地址;统一 /etc/hosts/DNS
publish_host 误指向外网或错误网卡 网络绑定错误 启动日志中的绑定地址 network.host/publish_host 指向实际内网地址或正确网卡;必要时用具体 IP
集群黄/红,分片未分配 节点角色/磁盘水位/路径权限问题 _cluster/health 与日志 检查磁盘阈值与 path.data 权限;确保 3 节点同时在线且可分片
"node name already in use" 多节点 node.name 重复 日志报错 为 h121/h122/h123 分配唯一 node.name
启动后 9200 可访但跨节点搜索失败 9300 互通性问题 跨节点查询异常日志 核查防火墙与安全组;确认 transport 层正常互通
rsync 后配置全同导致冲突 未按节点改 node.name/network.* 节点日志冲突提示 分发后逐节点校正差异项并重启
暴露在公网被扫/高风险 对外开放 9200/9300 且未鉴权 访问日志异常 IP 仅内网暴露;或启用 xpack.security、TLS、源 IP 访问控制

其他系列

🚀 AI篇持续更新中(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究 ,持续打造实用AI工具指南! AI研究-127 Qwen2.5-Omni 深解:Thinker-Talker 双核、TMRoPE 与流式语音

💻 Java篇持续更新中(长期更新)

Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍 MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务已完结,Dubbo已完结,MySQL已完结,MongoDB已完结,Neo4j已完结,FastDFS 正在更新,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

相关推荐
稚辉君.MCA_P8_Java1 小时前
DeepSeek Java 多线程打印的12种实现方法
java·linux·后端·架构·maven
G皮T1 小时前
【Elasticsearch】索引状态管理(ISM)实战(万字长文)
大数据·elasticsearch·搜索引擎·ilm·ism·索引状态管理·索引生命周期管理
w***48821 小时前
Springboot 3项目整合Knife4j接口文档(接口分组详细教程)
java·spring boot·后端
k***45991 小时前
SpringBoot【实用篇】- 测试
java·spring boot·后端
hellotutu1 小时前
vue2+springboot通过 FormData 手动封装图片数据上传
java·vue.js·spring boot·后端·ui
张人大 Renda Zhang1 小时前
Maven = Java 构建世界的“事实标准”:从 pom.xml 到云原生 CI/CD
xml·java·spring boot·后端·ci/cd·云原生·maven
i***l9201 小时前
使用 Spring Boot 实现图片上传
spring boot·后端·状态模式
i***17182 小时前
SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
spring boot·后端·maven
豪越大豪2 小时前
消防智能装备全生命周期管理 —— 告别 “台账 + 库存 + 维护” 多系统!
大数据