Es三节点+vip集群搭建部署方案

线上环境Es三节点集群搭建部署方案

1. 目标

Es 集群架构图

!

2. 搭建步骤

确定 Es 安装目录

机器名 内网IP Es 版本 重点目录
es-node01 192.18.233.240 7.15.1 安装目录: /home/work/elasticsearch/ 数据目录: /mnt/es/esdata 快照仓库: /mnt/es/snapshot 日志目录: /mnt/logs/eslogs
es-node02 192.18.233.229
es-node03 192.18.233.230

下载地址

下载安装

Bash 复制代码
# 下载,解压即可
cd /home/work/elasticsearch
wget https://mirrors.huaweicloud.com/elasticsearch/7.15.1/elasticsearch-7.15.1-linux-x86_64.tar.gz
# 解压
tar -zxvf elasticsearch-7.15.1-linux-x86_64.tar.gz
  • 解压后的文件目录结构

初始化Es用户

Bash 复制代码
#创建账号esadmin
useradd esadmin

#初始化密码
passwd esadmin
es1#user

#对esadmin授权目录
chown -R esadmin /home/work/elasticsearch/
chown -R esadmin /mnt/es/esdata
chown -R esadmin /mnt/logs/eslogs
chown -R esadmin /mnt/es/snapshot

chmod 777 /home/work/

修改Es配置文件(必要的重点设置项)

  • 官方参考:
  • 示例如下: 以 node01(192.18.233.240) 为例,其他节点中可以直接复用这个配置,只修改
    • node.name 值即可。

    • elasticsearch.yml

      YAML 复制代码
      # 备份默认的配置文件
      mv elasticsearch.yml elasticsearch.yml-bak
      # 编辑一个新文件
      vi elasticsearch.yml
      
      # 集群名
      cluster.name: es-cluster-prod
      # 节点名称
      node.name: es-node01
      
      ## 下面的配置项其他节点都统一内容##
      
      # HTTP端口
      http.port: 9200
      # Transport TCP端口
      transport.tcp.port: 9300
      
      # 数据存储路径
      path.data: /mnt/es/esdata
      # 设置快照仓库目录
      path.repo: ["/mnt/es/snapshot"]
      # 日志存储路径(将影响默认的执行日志,gc日志,致命错误日志的输出目录)
      path.logs: /mnt/logs/eslogs
      
      # 监听地址
      network.host: 0.0.0.0
      # 设置提供群集中其他节点的列表,这些节点具有选主资格
      discovery.seed_hosts: ["172.18.233.240:9300", "172.18.233.229:9300", "172.18.233.230:9300"]
      # 初始主节点列表
      cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"]
      
      # 每隔多长时间ping一个node
      discovery.zen.fd.ping_interval: 30s
      # 每次ping的超时时间
      discovery.zen.fd.ping_timeout: 120s
      # 一个node被ping多少次失败就认为是故障了
      discovery.zen.fd.ping_retries: 6
      
      # 集群脑裂问题参数配置
      # elasticsearch则可以配置返回消息的节点数量, 一般情况下会配置(n/2 + 1)个节点
      # 注意:discovery.zen.minimum_master_nodes 已经在Elasticsearch 7.x中被废弃
      # 请使用 cluster.initial_master_nodes 参数来指定初始主节点列表
      
      # 节点角色设置(默认就是启用的)
      node.ingest: true
      
      # HTTP跨域设置
      http.cors.enabled: true
      http.cors.allow-origin: "*"
    • vi jvm.options

      • 官方建议: 默认情况下,Elasticsearch 根据节点的角色和总内存自动设置 JVM 堆大小。我们建议大多数生产环境使用默认大小。
      Bash 复制代码
      cp jvm.options jvm.options-bak
      
      vim jvm.options
      # 限制最大堆3GB
      -Xms3g
      -Xmx3g
      
      # 默认的HeapDumpPath是输出到安装目录的,因此可以修改。
      -XX:HeapDumpPath=/mnt/logs/eslogs/heapdump
      
      # 致命错误日志
      #-XX:ErrorFile=logs/hs_err_pid%p.log
      -XX:ErrorFile=/mnt/logs/eslogs/hs_err_pid%p.log
      
      # JDK 8 GC 日志
      #8:-Xloggc:logs/gc.log
      8:-Xloggc:/mnt/logs/eslogs/gc.log
      
      # JDK 9 GC 日志
      # 将 file=logs/gc.log 改成 file=/mnt/logs/eslogs/gc.log
      #9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
      9-:-Xlog:gc*,gc+age=trace,safepoint:file=/mnt/logs/eslogs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

修改系统设置

  1. 在 /etc/sysctl.conf 中添加
COBOL 复制代码
# 临时设置临时增加 vm.max_map_count 参数的值:
sysctl -w vm.max_map_count=262144

# 永久设置
vim /etc/sysctl.conf 
vm.max_map_count=655360

# 保存后执行这个生效
sysctl -p
  1. 修改 /etc/security/limits.conf
Bash 复制代码
vim /etc/security/limits.conf

esadmin  soft nofile 65536
esadmin  hard nofile 131072
esadmin  soft nproc 4096
esadmin  hard nproc 4096

# 保存退出后,重新登录 esadmin 用户检查效果
 ulimit -a 

启动

Bash 复制代码
# 进入安装目录
cd /home/work/elasticsearch/elasticsearch-7.15.1/bin

#切换账号
su esadmin

#后台启动命令
./elasticsearch -d

# 启动成功后,验证
curl 
  • 如果用 esadmin 用户启动时报错 AccessDeniedException: /home/work/elasticsearch/elasticsearch-7.15.1/config/elasticsearch.keystore 。 这个是因为 elasticsearch.keystore 文件默认是启动后才创建的,因此重新设置下文件权限即可
    *

    Bash 复制代码
    sudo chmod -R 755 /home/work/elasticsearch/elasticsearch-7.15.1/config/
  • 如果启动时报错提示 could not find java in bundled JDK at xxxx

    • 解决方案1: elasticsearch 7系列版本以上都是自带的jdk,可以在es的bin目录下找到 elasticsearch-env.bat 这个文件,配置es的jdk。官方推荐使用es自带的jdk。
      *

      warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME

      Bash 复制代码
      sudo vi /etc/profile
      export ES_JAVA_HOME=/home/work/elasticsearch/elasticsearch-7.15.1/jdk
      source /etc/profile
    • 解决方案2: 使用系统安装的JDK

    Bash 复制代码
    首先,确认已经安装了 Java。可以通过运行以下命令来检查 Java 是否已经安装:
    java -version
    如果 Java 尚未安装,请使用以下命令安装 OpenJDK:
    sudo yum install java-1.8.0-openjdk-devel
    
    打开终端,并使用以下命令编辑 /etc/profile 文件:
    sudo vi /etc/profile
    
    在文件的末尾添加以下行,设置 JAVA_HOME 环境变量:
    
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
    export PATH=$PATH:$JAVA_HOME/bin
    
    # 保存并关闭文件。然后,运行以下命令使更改生效:
    source /etc/profile
    最后,可以通过运行以下命令来验证 JAVA_HOME 是否已正确设置:
    echo $JAVA_HOME
  • 三个节点都启动后,检查搭建结果
    *

    Bash 复制代码
    [root@iZwz9iqrw0w0p7ry2a8597Z ~]#
    [root@iZwz9iqrw0w0p7ry2a8597Z ~]# curl -XGET 'localhost:9200/_cat/health?v&pretty'
    epoch      timestamp cluster         status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1701780738 12:52:18  es-cluster-prod green           3         3      2   1    0    0        0             0                  -                100.0%
    
    [root@iZwz9iqrw0w0p7ry2a8597Z ~]# curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
    ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
    172.18.233.229            6          87   5    0.07    0.27     0.21 cdfhilmrstw -      es-node02
    172.18.233.230            7          86   4    0.05    0.21     0.19 cdfhilmrstw -      es-node03
    172.18.233.240           23          60   4    0.03    0.19     0.17 cdfhilmrstw *      es-node01

阿里云内网SLB配置

  1. 创建一个内网SLB

  2. 配置SLB,指向我们部署的三个ES服务节点

  3. 微服务直接使用内网SLB的域名来代理ES的访问

附录

日常运维注意

  1. 关于数据目录的管理

    1. 不要修改数据目录中的任何内容或运行可能会干扰其内容的进程。如果 Elasticsearch 以外的其他内容修改了数据目录的内容,则 Elasticsearch 可能会失败,报告损坏或其他数据不一致,或者可能在默默丢失部分数据后正常工作。不要尝试对数据目录进行文件系统备份;不支持还原此类备份的方法。相反,请使用快照和还原来安全地进行备份。不要在数据目录上运行病毒扫描程序。病毒扫描程序可能会阻止 Elasticsearch 正常工作,并可能会修改数据目录的内容。数据目录不包含可执行文件,因此病毒扫描只会发现误报。

  2. 多数据路径在 7.13 中已被弃用,并将在未来版本中删除。

    1. 如果需要额外的磁盘空间,建议你添加新节点,而不是其他数据路径。
相关推荐
宅小海2 小时前
scala String
大数据·开发语言·scala
小白的白是白痴的白2 小时前
11.17 Scala练习:梦想清单管理
大数据
java1234_小锋2 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
Java 第一深情7 小时前
零基础入门Flink,掌握基本使用方法
大数据·flink·实时计算
MXsoft6187 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
PersistJiao7 小时前
Spark 分布式计算中网络传输和序列化的关系(二)
大数据·网络·spark·序列化·分布式计算
九河云8 小时前
如何对AWS进行节省
大数据·云计算·aws
FreeIPCC8 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
梦幻通灵8 小时前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客8 小时前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索