热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多提宝贵地意见,我们一起提升,守住自己的饭碗。
正文开始
一、环境准备
1. 硬件要求(单节点建议)
• CPU:至少2核(生产环境4核+) • 内存:至少4GB(生产环境建议16GB+,且为偶数,如8GB、16GB) • 磁盘:至少50GB SSD(数据盘,建议使用高速存储) • 系统:Linux(推荐CentOS 7+/Ubuntu 20.04+),不建议Windows生产环境
2. 软件版本
• Elasticsearch:7.6.1+(本文以7.8.0为例) • JDK:必须为Java 11+(Elasticsearch 8.x需Java 17+)
二、安装前准备
1. 下载安装包
• 官网下载:Elasticsearch下载页 • 示例命令(以7.8.0为例): wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz
2. 创建非root用户(重要!)
• Elasticsearch禁止以 root
用户启动,需创建专用用户:useradd es # 创建用户
passwd es # 设置密码(输入两次密码)
三、集群部署步骤(以3节点为例)
1. 解压与重命名
tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C opt/module # 解压到指定目录
mv /opt/module/elasticsearch-7.8.0 opt/module/es-cluster # 重命名为es-cluster
2. 配置文件详解(3节点需分别修改)
• 路径: /opt/module/es-cluster/config/elasticsearch.yml• 通用配置(所有节点相同): cluster.name: cluster-es # 集群名称,同一集群内必须一致
network.host: 0.0.0.0 # 绑定所有IP,允许外部访问
http.cors.enabled: true # 启用CORS跨域
http.cors.allow-origin: "*" # 允许所有来源访问
http.port: 9200 # HTTP服务端口(默认9200,可保持默认)
transport.tcp.port: 9300 # 节点间通信端口(默认9300,可保持默认)
http.max_content_length: 200mb # 最大请求体大小• 节点差异化配置(每个节点唯一): 关键参数说明:节点 node.name network.host(示例IP) cluster.initial_master_nodes discovery.seed_hosts(填写所有节点IP:9300) node-1 node-1 192.168.59.142 ["node-1"] ["192.168.59.142:9300", "192.168.59.145:9300", "192.168.59.146:9300"] node-2 node-2 192.168.59.145 ["node-1"] 同上 node-3 node-3 192.168.59.146 ["node-1"] 同上 • node.master: true
:允许该节点参与主节点选举(建议至少2个节点设置为true)。• node.data: true
:允许该节点存储数据(若为纯协调节点,可设为false)。• cluster.initial_master_nodes
:初始化集群时指定主节点候选列表(仅首次启动需配置,后续可删除)。• discovery.seed_hosts
:节点发现列表,用于自动发现集群内其他节点。
3. 系统权限与资源限制
• 设置文件权限: chown -R es:es /opt/module/es-cluster # 赋予es用户所有权• 修改系统限制(所有节点执行):
添加以下内容(提升文件句柄和进程数限制):vi /etc/security/limits.conf # 编辑系统限制文件es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096• 修改虚拟内存限制:
添加:vi /etc/sysctl.conf # 编辑系统内核参数
应用修改:vm.max_map_count=655360 # 提升内存映射区域限制sysctl -p
四、启动集群
1. 切换至es用户
su - es
2. 启动单节点(3个节点分别执行)
/opt/module/es-cluster/bin/elasticsearch -d # 后台启动
3. 检查启动状态
• 查看日志(默认路径: /opt/module/es-cluster/logs/elasticsearch.log
):
搜索关键词tail -f /opt/module/es-cluster/logs/elasticsearch.logstarted
,若出现[node-1] started
表示启动成功。• 检查HTTP端口(9200):
输出JSON信息表示服务运行正常。curl http://localhost:9200• 检查集群节点状态:
预期输出类似:curl http://localhost:9200/_cat/nodes?vip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.59.142 20 75 5 0.01 0.02 0.05 mdi * node-1
192.168.59.145 18 73 3 0.01 0.02 0.05 mdi - node-2
192.168.59.146 17 72 4 0.01 0.02 0.05 mdi - node-3• master
列的*
表示主节点,-
表示从节点。• node.role
:m
=主节点候选,d
=数据节点,i
=索引节点。
五、集群管理与可视化
1. 安装Cerebro(可视化工具)
• 下载安装包: wget https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.tar.gz
tar -zxvf cerebro-0.9.4.tar.gz -C /opt/module• 配置文件修改:
修改以下内容:vi /opt/module/cerebro/conf/application.confserver.http.port = 9001 # 端口号(默认9000,避免冲突可改为9001)
# 取消注释并修改数据路径(避免默认路径权限问题)
data.path: "/opt/module/cerebro/cerebro.db"• 启动Cerebro: /opt/module/cerebro/bin/cerebro & # 后台启动• 访问可视化界面:
浏览器打开http://服务器IP:9001
,在“Node address”中输入任一ES节点地址(如http://192.168.59.142:9200
),点击“Add cluster”即可查看集群状态。

六、常见问题与解决方案
1. 启动失败:不允许root用户启动
• 原因:未使用非root用户启动。 • 解决:确保以 es
用户执行启动命令(见上文“切换至es用户”步骤)。
2. 节点无法加入集群
• 原因1:防火墙未关闭或端口被屏蔽。 • 解决:关闭防火墙(临时): systemctl stop firewalld.service
systemctl disable firewalld.service # 永久关闭(生产环境需配置防火墙规则开放9200/9300端口)• 原因2: discovery.seed_hosts
配置错误。• 解决:检查所有节点的IP和端口是否正确,确保节点间能通过9300端口通信(可使用 telnet IP 9300
测试)。
3. 内存不足导致启动失败
• 原因:JVM内存默认配置过高(如默认 -Xms1g -Xmx1g
)。• 解决:修改 jvm.options
文件(路径:/opt/module/es-cluster/config/jvm.options
),降低内存配置:-Xms512m # 初始内存
-Xmx512m # 最大内存(需与初始内存一致)
七、生产环境注意事项
1. 数据持久化: • 配置 path.data
到独立磁盘(如/data/es/data
),避免与系统盘混用。• 定期备份数据(使用Elasticsearch快照功能)。 2. 安全加固: • 启用SSL/TLS加密(HTTP和传输层)。 • 配置用户认证(如Elasticsearch内置安全模块)。 • 限制公网访问,仅允许可信IP访问9200端口。 3. 监控与告警: • 使用Elasticsearch自带的 _cluster/health
接口监控集群状态。• 集成Prometheus+Grafana或Elasticsearch Monitoring进行性能监控。 4. 版本一致性: • 集群内所有节点必须使用相同的Elasticsearch版本,避免兼容性问题。
八、一键部署脚本(示例)
#!/bin/bash
# 注意:生产环境需根据实际情况修改IP、端口、版本等参数
echo "开始部署Elasticsearch集群..."
VERSION=7.8.0
USER=es
GROUP=es
ES_HOME=/opt/module/es-cluster
# 1. 创建用户
useradd -m $USER
echo "设置用户密码(需手动输入)"
passwd $USER
# 2. 解压安装包
tar -zxvf elasticsearch-${VERSION}-linux-x86_64.tar.gz -C /opt/module
mv /opt/module/elasticsearch-${VERSION} $ES_HOME
# 3. 配置文件
cat > $ES_HOME/config/elasticsearch.yml <<EOF
cluster.name: cluster-es
node.name: node-1 # 需根据节点修改为node-2、node-3
network.host: 192.168.59.142 # 需替换为当前节点IP
http.port: 9200
transport.tcp.port: 9300
cluster.initial_master_nodes: ["node-1"]
discovery.seed_hosts: ["192.168.59.142:9300", "192.168.59.145:9300", "192.168.59.146:9300"]
http.cors.enabled: true
http.cors.allow-origin: "*"
EOF
# 4. 设置权限
chown -R $USER:$GROUP $ES_HOME
# 5. 修改系统限制
cat >> /etc/security/limits.conf <<EOF
$USER soft nofile 65536
$USER hard nofile 65536
$USER soft nproc 4096
$USER hard nproc 4096
EOF
# 6. 启动服务
su - $USER -c "$ES_HOME/bin/elasticsearch -d"
echo "部署完成!访问http://$(hostname -I):9200查看状态"
文中的概念来源于互联网,如有侵权,请联系我删除。
欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。
文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




