当前位置: 首页 > news >正文

分布式专题——44 ElasticSearch安装

1 ElasticSearch安装和简单配置

1.1 Windows安装

  • 安装文档:[Installing Elasticsearch | Elasticsearch Guide 8.14] | Elastic;

  • 下载ElasticSearch并解压

    • 下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-windows-x86_64.zip;

    • ElasticSearch目录结构如下:

      目录描述
      bin脚本文件,包括启动elasticsearch,安装插件,运行统计数据等
      config配置文件目录,如elasticsearch配置、角色配置、jvm配置等
      jdk7.x以后特有,自带的java 环境
      data默认的数据存放目录,包含节点、分片、索引、文档的所有数据,生产环境需要修改
      libelasticsearch依赖的Java类库
      logs默认的日志文件存储路径,生产环境需要修改。
      modules包含所有的Elasticsearch模块,如Cluster、Discovery、Indices等
      plugins已安装插件目录
  • 配置JDK环境

    • ES比较耗内存,建议虚拟机4G或以上内存,JVM1g以上的内存分配;

    • 运行Elasticsearch,需安装并配置JDK。各个版本对Java的依赖可查看:Support Matrix | Elastic;

      • 7.0开始,内置了Java环境。ES的JDK环境变量生效的优先级配置顺序:ES_JAVA_HOME > ES_HOME

      • ES_JAVA_HOME:用于指定Elasticsearch使用的Java运行时环境的路径,启动时会检查该环境变量并使用其中的Java路径;

      • ES_HOME:指定Elasticsearch的安装路径,用于定位配置文件、插件和其他相关资源,方便在命令行中访问目录结构和文件;

      • 可参考ES的环境文件elasticsearch-env.bat

        在这里插入图片描述

    • Windows下,需设置ES_JAVA_HOMEES_HOME的环境变量;

      在这里插入图片描述

  • 配置ElasticSearch

    • 编辑config/elasticsearch.yml文件,关闭security安全认证(ES 8默认开启Security,初学者为快速上手可关闭)

      在这里插入图片描述

  • 启动ElasticSearch服务

    • 解决启动日志乱码问题:

      # 打开config/jvm.options文件,末尾添加:
      -Dfile.encoding=GBK
      
    • 进入bin目录,点击elasticsearch.bat文件启动ES服务

      • 注意:9300端口为Elasticsearch集群间组件的通信端口,9200端口为浏览器访问的HTTP协议RESTful端口;

        在这里插入图片描述

      • 打开浏览器(推荐谷歌浏览器),输入地址http://localhost:9200,若显示以下结果则启动成功

        在这里插入图片描述

1.2 Linux安装

  • 环境准备

    • 准备Linux安装环境:以CentOS7系统为例,IP为192.168.65.47,操作用户为shisan

    • 注意:ES不允许使用root账号启动服务,若当前账号是root,需创建专有账户,命令如下:

      #为Elasticsearch创建用户
      adduser shisan
      passwd shisan
      
  • 通过shisan用户登录,下载ElasticSearch并解压

    • 执行以下命令下载并解压:

      #centos7 通过shisan用户进入
      wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-linux-x86_64.tar.gz
      tar -xzf elasticsearch-8.14.3-linux-x86_64.tar.gz
      cd elasticsearch-8.14.3/
      
    • 注意:若在root用户下解压了ES安装包,需将所有者和组改为shisan用户,命令:

      # 在root用户下操作
      chown -R shisan:shisan elasticsearch-8.14.3
      
  • 配置JDK环境(可选):进入shisan用户主目录(如/home/shisan),设置用户级别的环境变量

    vim .bash_profile
    #设置ES_JAVA_HOME和ES_HOME的路径
    export ES_JAVA_HOME=/home/shisan/elasticsearch-8.14.3/jdk/
    export ES_HOME=/home/shisan/elasticsearch-8.14.3
    #执行以下命令使配置生效
    source .bash_profile
    
  • 配置ElasticSearch

    • 修改config/elasticsearch.yml配置文件,命令vim elasticsearch.yml,添加以下配置:

      # 配置节点对外提供服务的地址以及集群内通信的ip地址,开启远程访问支持
      network.host: 0.0.0.0
      # 指定节点为单节点,绕过引导检查(开发模式)
      discovery.type: single-node
      # 初学者建议关闭security安全认证
      xpack.security.enabled: false
      
    • 开发模式:默认配置(未配置集群发现设置),通过discovery.type=single-node指定单节点,可绕过引导检查,适合学习目的;

    • 生产模式:修改集群相关配置会触发,服务启动前会进行引导检查(如JVM大小、内存锁、虚拟内存、最大线程数、集群发现配置等),若配置不合理ES会拒绝启动,避免后期性能问题;

  • ElasticSearch常用配置参数

    参考文档:[Important Elasticsearch configuration | Elasticsearch Guide 8.14] | Elastic;

    • cluster.name:当前节点所属集群名称,多节点组成同一集群时需配置相同名称,默认elasticsearch,生产环境建议修改,避免不同环境重用导致节点加入错误集群;
    • node.name:当前节点名称,默认部署机器的主机名,一台机器起多个ES节点时需明确指定不同名称;
    • path.data:数据存储目录,默认$ES_HOME/data,生产环境建议部署到安全目录,防止ES升级误删数据;
    • path.logs:日志存储目录,默认$ES_HOME/logs,生产环境建议部署到安全目录;
    • bootstrap.memory_lock:ES启动时是否进行内存锁定检查,默认true。生产环境建议大内存,否则内存不足易导致内存交换到磁盘影响性能;非生产环境内存小的话可改为false
    • network.host:节点对外提供服务和集群内通信的IP地址,默认回环地址127.0.0.1[::1],默认仅能本机访问;
    • http.port:ES节点对外提供服务的HTTP端口,默认9200
    • transport.port:节点通信端口号,默认9300
    • discovery.seed_hosts:参与集群节点发现的主机列表,可是IP地址或可解析域名;
    • cluster.initial_master_nodes:ES集群初始化时参与master选举的节点名称列表,必须与node.name一致。集群首次构建完成后需移除该配置项;
  • 配置JVM参数(可选)

    • 修改config/jvm.options配置文件调整JVM堆内存大小,命令vim jvm.options,示例配置:

      -Xms4g
      -Xmx4g
      
    • 配置建议:

      • Xms(JVM启动时分配的最小堆内存)和Xmx(JVM运行过程中能分配的最大堆内存)设置成一样;
      • Xmx不要超过机器内存的50%;
      • 不要超过30GB,参考文档:A Heap of Trouble: Managing Elasticsearch’s Managed Heap | Elastic Blog;
  • 启动ElasticSearch服务

    • 以shisan用户启动,命令:

      #前台启动
      bin/elasticsearch
      # -d 后台启动
      bin/elasticsearch -d
      
    • 测试:打开本地浏览器(推荐谷歌浏览器),输入地址http://192.168.65.47:9200(替换为linux环境对应IP),若显示以下结果则启动成功

      在这里插入图片描述

1.3 生产模式启动 ES 服务常见错误总结

  • 如果不配置discovery.type: single-node绕过引导检查,ES服务启动可能抛出以下异常:

  • 错误[1]:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

    • 原因:ES需要大量创建索引文件,需大量打开系统文件,Linux系统打开文件最大数目的限制过低会导致启动报错

    • 解决:切换到root用户,编辑/etc/security/limits.conf文件,末尾添加配置:

      * soft nofile 65536
      * hard nofile 65536
      * soft nproc 4096
      * hard nproc 4096
      
  • 错误[2]:max number of threads [1024] for user [es] is too low, increase to at least [4096]

    • 原因:用户最大可创建线程数太小,无法创建本地线程

    • 解决:编辑/etc/security/limits.d/20-nproc.conf文件,改为配置:

      * soft nproc 4096
      
  • 错误[3]:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    • 原因:最大虚拟内存太小

    • 解决:编辑/etc/sysctl.conf文件,追加内容:

      vm.max_map_count=262144
      
      • 保存退出后执行命令sysctl -p使配置生效
  • 错误[4]:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

    • 原因:缺少默认发现配置,生产环境需配置集群发现相关参数

    • 相关参数说明:

      • discovery.seed_hosts:集群主机列表
      • discovery.seed_providers:基于配置文件配置集群主机列表
      • cluster.initial_master_nodes:启动时初始化的参与选主的node,生产环境必填
    • 解决:编辑config/elasticsearch.yml文件,添加配置(二选一即可):

      • 配置集群发现参数:
        discovery.seed_hosts: ["127.0.0.1"]
        cluster.initial_master_nodes: ["node-1"]
        
      • 配置单节点(开发模式,绕过引导检查):
        discovery.type: single-node
        

2 安装ES浏览器插件

插件名称功能介绍下载地址
Elasticsearch Head方便查看集群节点数据,方便管理和索引、分片,支持同时连接多集群Chrome下载
GitHub下载
Elasticsearch Tools方便查看节点资源占用,可执行查询语句Chrome下载
Elasticvue功能强大,对国人友好Chrome下载
[Edge下载](Microsoft Edge 加载项 - elasticvue)
  • Elasticvue界面如下:

    在这里插入图片描述

3 可视化Kibana安装

  • Kibana是一个开源分析和可视化平台,旨在与Elasticsearch协同工作

    • 参考文档:[Quick start | Kibana Guide 8.14] | Elastic;

    • 下载地址:Past Releases | Elastic;

  • 下载并解压缩Kibana

    • Windows:下载地址 https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-windows-x86_64.zip,解压后使用;

    • Linux:执行以下命令下载并解压:

      wget https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-linux-x86_64.tar.gz
      tar -zxvf kibana-8.14.3-linux-x86_64.tar.gz
      cd kibana-8.14.3
      
  • 修改Kibana.yml配置文件。编辑config/kibana.yml文件,添加以下配置:

    # 指定Kibana服务器监听的端口号
    server.port: 5601
    # 指定Kibana服务器绑定的主机地址
    server.host: "0.0.0.0"
    # 指定Kibana连接到的Elasticsearch实例的访问地址
    elasticsearch.hosts: ["http://localhost:9200"]
    # 将 Kibana 的界面语言设置为简体中文
    i18n.locale: "zh-CN"
    
  • 运行Kibana

    • Windows:直接执行kibana.bat

    • Linux:注意需用非root用户启动,执行以下命令:

      # 启动kibana服务
      bin/kibana
      # 后台启动,并将日志写入到logs/kibana.log
      nohup bin/kibana > logs/kibana.log 2>&1 &
      # 查询kibana进程
      netstat -tunlp | grep 5601
      
  • 访问Kibana。访问地址:http://localhost:5601,可进入Kibana界面,利用其开发工具(如控制台)进行操作

    在这里插入图片描述

  • Kibana提供丰富的cat API用于查看Elasticsearch集群信息,部分常用API及功能如下:

    API 路径功能说明
    /_cat/allocation查看单节点的shard分配整体情况
    /_cat/shards查看各shard的详细情况
    /_cat/shards/{index}查看指定分片的详细情况
    /_cat/master查看master节点信息
    /_cat/nodes查看所有节点信息
    /_cat/indices查看集群中所有index的详细信息
    /_cat/indices/{index}查看集群中指定index的详细信息
    /_cat/segments查看各index的segment详细信息,包括segment名、所属shard、内存(磁盘)占用大小等
    /_cat/segments/{index}查看指定index的segment详细信息
    /_cat/count查看当前集群的doc数量
    /_cat/count/{index}查看指定索引的doc数量
    /_cat/recovery查看集群内每个shard的recovery过程,调整replica
    /_cat/recovery/{index}查看指定索引shard的recovery过程
    /_cat/health查看集群当前状态(红、黄、绿)
    /_cat/pending_tasks查看当前集群的pending task
    /_cat/aliases查看集群中所有alias信息、路由配置等
    /_cat/aliases/{alias}查看指定索引的alias信息
    /_cat/thread_pool查看集群各节点内部不同类型的threadpool的统计信息
    /_cat/plugins查看集群各个节点上的plugin信息
    /_cat/fielddata查看当前集群各个节点的fielddata内存使用情况
    /_cat/fielddata/{fields}查看指定field的内存使用情况,包含field属性对应的值
    /_cat/nodeattrs查看单节点的自定义属性
    /_cat/repositories输出集群中注册快照存储库
    /_cat/templates输出当前正存在的模板信息

4 安装中文分词插件

4.1 在线安装

  • 以analysis-icu分词插件为例;

  • analysis-icu功能

    • 基于ICU(International Components for Unicode)库,提供高级的文本分析和处理功能
    • 支持多语言和复杂的Unicode文本处理
    • 包含ICU分词器(ICU Tokenizer)和ICU标准化过滤器(ICU Normalizer)
  • analysis-icu应用场景

    • 多语言文本分析,适用于处理各种语言的文本
    • 支持Unicode标准化和处理复杂字符
    • 提供高级的文本处理功能,如正则表达式替换、文本转换等
  • 操作命令

    # 查看已安装插件
    bin/elasticsearch-plugin list
    # 安装插件
    bin/elasticsearch-plugin install analysis-icu
    # 删除插件
    bin/elasticsearch-plugin remove analysis-icu
    
  • 注意:安装和删除完插件后,需要重启ES服务才能生效;

  • 测试分词效果

    POST _analyze
    {"analyzer":"icu_analyzer","text":"中华人民共和国"
    }
    

    在这里插入图片描述

4.2 离线安装

  • 本地下载相应的插件,解压,然后手动上传到elasticsearch的plugins目录,然后重启ES实例就可以了;

  • IK中文分词插件:GitHub - infinilabs/analysis-ik: 🚌 The IK Analysis plugin integrates Lucene IK analyzer into Elasticsearch and OpenSearch, support customized dictionary.;

  • 注意:

    • IK分词器插件和ES版本必须一一对应,否则会出现兼容性问题导致ES启动失败;
    • 当前我们使用的ES版本是8.14.3,可以从Index of: analysis-ik/stable/下载ES8.14.3对应版本的分词器;
  • 测试分词效果

    • ES默认分词(standard):会单字拆分,执行请求:
      POST _analyze
      {"analyzer":"standard","text":"中华人民共和国"
      }
      
    • ik_smart(最粗粒度拆分):
      POST _analyze
      {"analyzer": "ik_smart","text": "中华人民共和国"
      }
      
    • ik_max_word(最细粒度拆分):
      POST _analyze
      {"analyzer":"ik_max_word","text":"中华人民共和国"
      }
      
  • 创建索引时指定IK分词器为默认分词器

    # 创建索引,指定默认分词器
    PUT /employee
    {"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
    }
    # 查看索引setting信息
    GET /employee/_settings
    

    在这里插入图片描述

  • 针对字段配置IK分词器

    # 创建索引并指定content字段的分词器
    PUT /index
    POST /index/_mapping
    {"properties": {"content": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"}}
    }# 索引文档(插入文档)
    POST /index/_create/1
    {"content":"美国留给伊拉克的是个烂摊子吗"}
    POST /index/_create/2
    {"content":"公安部:各地校车将享最高路权"}
    POST /index/_create/3
    {"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
    POST /index/_create/4
    {"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}# 带高亮的查询
    POST /index/_search
    {"query": {"match": {"content": "中国"}},"highlight": {"pre_tags": ["<tag1>","<tag2>"],"post_tags": ["</tag1>","</tag2>"],"fields": {"content": {}}}
    }
    
  • /index/_mapping 映射属性解释

    • "properties":包含字段定义的JSON对象,此处仅含content字段
    • "content":索引中定义的字段名
      • "type": "text":指定content字段数据类型为text,用于全文搜索,可被分词器处理为词条用于索引和搜索
      • "analyzer": "ik_max_word":索引(写入)content字段时使用ik_max_word分词器,对文本最细粒度切分,提高搜索召回率
      • "search_analyzer": "ik_smart":搜索(查询)content字段时使用ik_smart分词器,更智能切分,提高搜索准确率。通过索引和搜索使用不同分词器,可在提高召回率的同时保持搜索精度
http://www.dtcms.com/a/482470.html

相关文章:

  • Java HTTP编程深度解析:从基础到微服务通信的完整架构实践
  • 3dgs train.py详解
  • Ruby Socket 编程
  • 阿里云linux主机如何添加2个网站中山网站建设方案托管
  • React 状态管理中的循环更新陷阱与解决方案
  • 手机h5免费模板网站深圳网页设计培训要多久
  • 网站快速建设网络营销公司介绍
  • 唐山seo网站建设企业网站的建立如何带来询盘
  • 上海虹口网站建设重庆网站建设公司的网站
  • 自动化测试之 Cucumber 工具
  • 基于MATLAB的t-SNE算法多合成数据集降维可视化实现
  • SAP 关于工单的状态更改,这个要怎么查看呢?
  • 网站建设费用会计分录男女做暧暧视频免费网站
  • 如何高效编写MySQL数据导出与导入语句?
  • 第六部分:VTK进阶(第160章 体绘制采样与空域加速)
  • 网站开发什么意思泾阳做网站
  • 什么是swc?
  • 第九章 装饰器与闭包
  • 接口测试案例从哪些维度去设计
  • 协程入门(基础篇)
  • 建设好网站的在线沟通功能广州开发区投资集团有限公司招聘
  • 如何将 iPhone 联系人同步到 Mac
  • 织梦的网站收录不好保定网站建设设计
  • 网络安全之揭秘APT Discord C2 以及如何取证
  • 第五章 神经网络的优化
  • 网络安全主动防御技术与应用
  • 5. 神经网络的学习
  • 响应式网站页面设计怎么写网站建设推广
  • 2025/10/14 redis断联 没有IPv4地址 (自用)
  • 基于多奥品牌设备的车牌识别系统与电梯门禁联动方案,核心是通过硬件信号对接+软件权限映射实现车辆身份与电梯权限的绑定。以下是具体实施步骤: