分布式专题——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配置等
      jdk 7.x以后特有,自带的java 环境
      data 默认的数据存放目录,包含节点、分片、索引、文档的所有数据,生产环境需要修改
      lib elasticsearch依赖的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服务

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

      properties 复制代码
      # 打开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,需创建专有账户,命令如下:

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

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

      shell 复制代码
      #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用户,命令:

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

    sh 复制代码
    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,添加以下配置:

      yaml 复制代码
      # 配置节点对外提供服务的地址以及集群内通信的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
    • 配置建议:

  • 启动ElasticSearch服务

    • 以shisan用户启动,命令:

      shell 复制代码
      #前台启动
      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文件,添加配置(二选一即可):

      • 配置集群发现参数:

        yaml 复制代码
        discovery.seed_hosts: ["127.0.0.1"]
        cluster.initial_master_nodes: ["node-1"]
      • 配置单节点(开发模式,绕过引导检查):

        yaml 复制代码
        discovery.type: single-node

2 安装ES浏览器插件

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

3 可视化Kibana安装

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

  • 下载并解压缩Kibana

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

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

      shell 复制代码
      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文件,添加以下配置:

    yaml 复制代码
    # 指定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用户启动,执行以下命令:

      shell 复制代码
      # 启动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标准化和处理复杂字符
    • 提供高级的文本处理功能,如正则表达式替换、文本转换等
  • 操作命令

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

  • 测试分词效果

    json 复制代码
    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):会单字拆分,执行请求:

      json 复制代码
      POST _analyze
      {
        "analyzer":"standard",
        "text":"中华人民共和国"
      }
    • ik_smart(最粗粒度拆分):

      json 复制代码
      POST _analyze
      {
        "analyzer": "ik_smart",
        "text": "中华人民共和国"
      }
    • ik_max_word(最细粒度拆分):

      json 复制代码
      POST _analyze
      {
        "analyzer":"ik_max_word",
        "text":"中华人民共和国"
      }
  • 创建索引时指定IK分词器为默认分词器

    json 复制代码
    # 创建索引,指定默认分词器
    PUT /employee
    {
      "settings" : {
        "index" : {
          "analysis.analyzer.default.type": "ik_max_word"
        }
      }
    }
    # 查看索引setting信息
    GET /employee/_settings
  • 针对字段配置IK分词器

    json 复制代码
    # 创建索引并指定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分词器,更智能切分,提高搜索准确率。通过索引和搜索使用不同分词器,可在提高召回率的同时保持搜索精度
相关推荐
怿星科技3 小时前
Android MVVM架构解析:现代开发的首选模式
android·架构
MicrosoftReactor3 小时前
技术速递|使用 GitHub Copilot Agent 模式现代化 Java 项目的分步指南
java·github·copilot
文火冰糖的硅基工坊3 小时前
[嵌入式系统-100]:IoT(物联网)与AIoT(人工智能物联网)
人工智能·物联网·架构·创业
ahauedu4 小时前
Spring Boot 2.7+ 中 RedisConnectionFactory Autowire 警告的深度解析
java·spring boot·后端
無限神樂4 小时前
RabbitMQ概述,Rabbitmq是什么
分布式·rabbitmq
fakerth4 小时前
【OpenHarmony】分布式文件服务模块架构
分布式·架构·操作系统·openharmony
im_AMBER4 小时前
杂记 15
java·开发语言·算法
通信小呆呆4 小时前
分布式雷达 vs 多基地雷达:同频共振的“合唱团”和“乐队”
分布式·目标检测·信息与通信·信号处理·计算成像