暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

保姆级Elasticsearch三节点集群部署指导

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多宝贵地意见,我们一起提升,守住自己的饭碗。

正文开始

 

一、环境准备

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.log
    搜索关键词started
    ,若出现[node-1] started
    表示启动成功。
  • • 检查HTTP端口(9200):
    curl http://localhost:9200
    输出JSON信息表示服务运行正常。
  • • 检查集群节点状态:
    curl http://localhost:9200/_cat/nodes?v
    预期输出类似:
    ip          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.conf
    修改以下内容:
    server.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端口)

  • • 原因2discovery.seed_hosts
    配置错误。
    • • 解决:检查所有节点的IP和端口是否正确,确保节点间能通过9300端口通信(可使用telnet IP 9300
      测试)。

3. 内存不足导致启动失败

  • • 原因:JVM内存默认配置过高(如默认-Xms1g -Xmx1g
    )。
  • • 解决:修改jvm.options
    文件(路径:/opt/module/es-cluster/config/jvm.options
    ),降低内存配置:
    -Xms512m  # 初始内存
    -Xmx512m  # 最大内存(需与初始内存一致)

七、生产环境注意事项

  1. 1. 数据持久化
    • • 配置path.data
      到独立磁盘(如/data/es/data
      ),避免与系统盘混用。
    • • 定期备份数据(使用Elasticsearch快照功能)。
  2. 2. 安全加固
    • • 启用SSL/TLS加密(HTTP和传输层)。
    • • 配置用户认证(如Elasticsearch内置安全模块)。
    • • 限制公网访问,仅允许可信IP访问9200端口。
  3. 3. 监控与告警
    • • 使用Elasticsearch自带的_cluster/health
      接口监控集群状态。
    • • 集成Prometheus+Grafana或Elasticsearch Monitoring进行性能监控。
  4. 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查看状态"

 



END
往期文章回顾

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。


文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论