Linux安装ElasticSearch

举报
WHYBIGDATA 发表于 2023/02/18 13:04:35 2023/02/18
【摘要】 Linux安装ElasticSearch

Linux安装ElasticSearch



0. 写在前面

  • Linux版本:CentOS7.5
  • ES版本:ElasticSearch-7.8.0

1. 环境准备

  • 运行ElasticSearch,需要安装并配置JDK

    • 设置$JAVA_HOME
  • ElasticSearch各个版本对Java的依赖可参考官网:https://www.elastic.co/cn/support/matrix#matrix_jvm

    • ElasticSearch5.X需要Java8以上的版本
    • ElasticSearch从V6.5开始支持Java11
    • V7.0版本开始,内置了Java环境
  • ElasticSearch比较消耗内存,建议虚拟机4G或以上内存,jvm1g以上的内存分配

可以参考es(Windows环境下)文件elasticsearch-env.bat

02.png

2. ES安装

2.1ES解压

  • 安装包下载地址

https://www.elastic.co/downloads/past-releases/elasticsearch-7-8-0

2.2 新增普通用户

因为安全问题,Elasticsearch 不允许 root 用户直接运行, 所以要创建一个ES专属的普通用户es

[whybigdata@node02 ~]$ sudo useradd es
[whybigdata@node02 ~]$ sudo passwd es
更改用户 es 的密码 。
新的 密码:
passwd:所有的身份验证令牌已经成功更新。

2.3 给新创建的普通用户授权

[whybigdata@node02 ~]$ chown -R es:es /opt/module/es-7.8.0

2.4 给新创建的普通用户设置sudo权限

[whybigdata@node02 ~]$ vim /etc/sudoers
[whybigdata@node02 ~]$ vim /etc/sudoers

root ALL(ALL) ALL下面新增

es ALL(ALL) ALL

  • 或者:
# 使用root用户执行
visudo
# 在 root ALL(ALL) ALL下面新增
es ALL(ALL) ALL

2.5 前置准备

[whybigdata@node02 ~]$ vim /etc/security/limits.conf

在文件末尾中增加下面内容:每个进程可以打开的文件数的限制

 es soft nofile 65536 
 es hard nofile 65536
 [whybigdata@node02 ~]$ vim /etc/security/limits.d/20-nproc.conf

在文件末尾中增加下面内容 :每个进程可以打开的文件数的限制;操作系统级别对每个用户创建的进程数的限制

 es soft nofile 65536 
 es hard nofile 65536
 
 * hard nproc 4096

注:* 带表 Linux 所有用户名称

 [whybigdata@node02 ~]$ sudo vim /etc/sysctl.conf

在文件中增加下面内容:一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536

 vm.max_map_count=655360
  • 保存后执以下命令使配置生效
[whybigdata@node02 ~]$ sudo sysctl -p
vm.max_map_count = 262144

修改JVM配置

################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
-Xms1g
-Xmx1g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##

主要修改以下参数值

cluster.name: my-application

node.name: node-1

path.data: ./data

path.logs: ./logs

network.host: 0.0.0.0

http.port: 9200

cluster.initial_master_nodes: ["node-1"]

Note:cluster.initial_master_nodes必须配置(即使名字跟默认的一样,也要放开注释),否则启动失败,失败日志「elasticsearch.log」说如下:

0.png

启动es

[es@node02 es-7.8.0]$ bin/elasticsearch -d
future versions of Elasticsearch will require Java 11; your Java version from [/opt/module/jdk1.8.0_212/jre] does not meet this requirement
future versions of Elasticsearch will require Java 11; your Java version from [/opt/module/jdk1.8.0_212/jre] does not meet this requirement
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to No such file or directory

[es@node02 es-7.8.0]$ jps
76151 Jps
76110 Elasticsearch

[es@node02 es-7.8.0]$ ps -ef | grep es
root          1      0  0 14:45 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
dbus        592      1  0 14:45 ?        00:00:02 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root      68926   1742  0 19:29 pts/0    00:00:00 su - es
es        68943  68926  0 19:29 pts/0    00:00:00 -bash
es        76110      1 21 19:46 pts/0    00:00:40 /opt/module/jdk1.8.0_212/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=SPI,JRE -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.io.tmpdir=/tmp/elasticsearch-3279581942497379597 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -XX:MaxDirectMemorySize=536870912 -Des.path.home=/opt/module/es-7.8.0 -Des.path.conf=/opt/module/es-7.8.0/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /opt/module/es-7.8.0/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
es        76171  76110  0 19:46 pts/0    00:00:00 /opt/module/es-7.8.0/modules/x-pack-ml/platform/linux-x86_64/bin/controller
es        77441  68943  0 19:49 pts/0    00:00:00 ps -ef
es        77442  68943  0 19:49 pts/0    00:00:00 grep --color=auto es

启动成功,Web页面如下:

1.png

Note:注意启动ES不要使用root用户,否则会出现以下错误日志

2.png

3. Kibana安装

  • 下载地址:

https://www.elastic.co/downloads/past-releases/kibana-7-8-0

3.1 上传并解压tar文件

3.png

进入到config目录,修改kibana.yml文件

# 服务端口
server.port: 5601
# 运行服务的IP设置
server.host: "0.0.0.0"
# elasticsearch访问地址
elasticsearch.hosts: ["http://localhost:9200"]
# kibana汉化
i18n.locale: "zh-CN"

进入bin目录,后台启动kibana

nohup ./kibana & 

服务Web端:http://node02:5601/

4. ik分词器的安装

ES提供插件机制对系统进行扩展,下文在线安装以icu分词器的安装为例子,离线安装以ik分词器为例子:

4.1 为什么要安装其他分词器

ES默认的分词器为standard标准分词器,如下图的执行结果

  • 示例

04.png

  • 标准分词器执行结果

041.png

「中华人民共和国」这一整体被拆分为一个一个字,并不是很友好。下文会展示使用其他分词器在同一示例下的执行结果

4.2下载地址

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip

[es@node02 ~]$ cd /opt/module/es-7.8.0/plugins
[es@node02 plugins]$ mkdir ik-7.8.0
[es@node02 plugins]$ cd /opt/software/
[es@node02 software]$ ll
总用量 3192
-rw-rw-r-- 1 whybigdata whybigdata 3267201 119 10:54 elasticsearch-analysis-ik-7.8.0.tar.gz
[es@node02 software]$ tar -zxvf elasticsearch-analysis-ik-7.8.0.tar.gz -C /opt/module/es-7.8.0/plugins/ik-7.8.0/

启动es,报错信息如下:

[2023-01-19T11:05:00,534][ERROR][o.e.b.Bootstrap          ] [node-1] Exception
java.lang.IllegalStateException: Could not load plugin descriptor for plugin directory [ik-7.8.0]
.......
[2023-01-19T11:05:00,542][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Could not load plugin descriptor for plugin directory [ik-7.8.0]
....

在线安装

[es@node02 ~]$ /opt/module/es-7.8.0/bin/elasticsearch-plugin --help
future versions of Elasticsearch will require Java 11; your Java version from [/opt/module/jdk1.8.0_212/jre] does not meet this requirement
A tool for managing installed elasticsearch plugins

Commands
--------
list - Lists installed elasticsearch plugins
install - Install a plugin
remove - removes a plugin from Elasticsearch

Non-option arguments:
command

Option             Description
------             -----------
-E <KeyValuePair>  Configure a setting
-h, --help         Show help
-s, --silent       Show minimal output
-v, --verbose      Show verbose output
  • 查看已安装的插件
[es@node02 ~]$ cd /opt/module/es-7.8.0/
[es@node02 es-7.8.0]$ bin/elasticsearch-plugin list
  • 安装插件
[es@node02 es-7.8.0]$ bin/elasticsearch-plugin install analysis-icu
  • 删除插件
[es@node02 es-7.8.0]$ bin/elasticsearch-plugin remove analysis-icu

4.png

Note:安装和删除完插件之后,需要重启ES服务才能生效!

  • 示例:icu分词器

051.png

  • 执行结果

052.png

ik分词器不能在线安装,需要离线安装

离线安装

[es@node02 software]$ unzip elasticsearch-analysis-ik-7.8.0.zip -d /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/
Archive:  elasticsearch-analysis-ik-7.8.0.zip
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/elasticsearch-analysis-ik-7.8.0.jar
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/httpclient-4.5.2.jar
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/httpcore-4.4.4.jar
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/commons-logging-1.2.jar
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/commons-codec-1.9.jar
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/plugin-descriptor.properties
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/plugin-security.policy
   creating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/main.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/quantifier.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/extra_single_word_full.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/IKAnalyzer.cfg.xml
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/surname.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/suffix.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/stopword.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/extra_main.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/extra_stopword.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/preposition.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/extra_single_word_low_freq.dic
  inflating: /opt/module/es-7.8.0/plugins/analysis-ik-7.8.0/config/extra_single_word.dic

ik分词器有粒度之分

  • 粗粒度:ik_smart

示例

061.png

结果

{
  "tokens" : [
    {
      "token" : "中华人民共和国",
      "start_offset" : 0,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}
  • 细粒度:ik_max_word

示例

8.png

结果

{
  "tokens" : [
    {
      "token" : "中华人民共和国",
      "start_offset" : 0,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "中华人民",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "中华",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "华人",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "人民共和国",
      "start_offset" : 2,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "人民",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "共和国",
      "start_offset" : 4,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "共和",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "国",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 8
    }
  ]
}

创建索引时可以指定ik分词器作为默认分词器

PUT /es_db
{
  "settings" : {
        "index" : {
            "analysis.analyzer.default.type": "ik_max_word"
        }
    }
}

结束!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。