Linux 安装 ElasticSearch(单机)

前言

本文主要介绍如何在 Linux 上安装单机版的 ElasticSearch,适用于 Centos/Debian/Ubuntu 等 Linux 发行版系统。

版本说明

软件版本描述
JDK11
ElasticSearch7.2.0

JDK 安装

由于 Elasticsearch 的运行依赖于 JDK,因此需要提前在 Linux 上安装 JDK,这里演示的是如何安装 Oracle JDK 11。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 下载
# wget -O /usr/local/jdk-11.0.4_linux-x64_bin.tar.gz https://download.oracle.com/otn/java/jdk/11.0.4+10/cf1bbcbf431a474eb9fc550051f4ee78/jdk-11.0.4_linux-x64_bin.tar.gz?AuthParam=1563538966_65e52109c4dec9c83ac76eed75b8af77

# 解压
# tar -xvf /usr/local/jdk-11.0.4_linux-x64_bin.tar.gz

# 删除下载文件
# rm /usr/local/jdk-11.0.4_linux-x64_bin.tar.gz

# 创建java命令的软链接(会覆盖已安装的其他版本jdk)
# ln -sf /usr/local/jdk-11.0.4/bin/java /usr/bin/java
# ln -sf /usr/local/jdk-11.0.4/bin/javac /usr/bin/javac

# 配置环境变量
# vim /etc/profile
JAVA_HOME=/usr/local/jdk-11.0.4
JRE_HOME=/usr/local/jdk-11.0.4/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH

# 使环境变量生效
# source /etc/profile

# 验证环境变量是否生效,如果不生效建议重启系统
# javac -version
javac 11.0.4

# java -version
java version "11.0.4" 2019-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode)

ElasticSearch 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 进入安装目录
# cd /usr/local

# 下载ES
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz

# 解压ES
# tar -xvf https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz

# 删除下载文件
# rm -f elasticsearch-7.2.0-linux-x86_64.tar.gz

# 创建ES用户组和用户,出于系统安全考虑,ElasticSearch不允许直接使用Root权限来启动
# groupadd elasticsearch
# useradd elasticsearch -g elasticsearch -p yourpassword

# 更改ES文件的所属用户组及用户
# chown -R elasticsearch:elasticsearch elasticsearch-7.2.0

# 切换ES用户
# su elasticsearch

# 前台启动ES
$ cd elasticsearch-7.2.0/bin
$ ./elasticsearch

# 或者后台启动ES
$ cd elasticsearch-7.2.0/bin
$ ./elasticsearch -d

# 测试连接ES,当结果输出JSON数据则说明ES启动成功
# curl -XGET "127.0.0.1:9200"

# 关闭后台运行的ES
# ps -aux|grep elasticsearch
# kill -9 pid

ElasticSearch 配置

配置 JVM 内存

1
2
3
# 直接编辑ES的启动脚本
# vim elasticsearch-7.2.0/bin/elasticsearch
ES_JAVA_OPTS="-Xms512m -Xmx512m"

配置端口、远程访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 配置端口(默认端口为9200)
# vim /usr/local/elasticsearch-7.2.0/config/elasticsearch.yml
http.port: 9200

# 配置远程访问
# vim /usr/local/elasticsearch-7.2.0/config/elasticsearch.yml
node.name: node-1
cluster.initial_master_nodes: ["node-1"] # 即node.name配置的值
network.host: 192.168.25.131 # 当前ES的IP,或者network.host: 0.0.0.0

# 切换ES用户
# su elasticsearch

# 后台启动ES
$ cd /usr/local/elasticsearch-7.2.0/bin
$ ./elasticsearch -d

# 防火墙开放ES的端口9200
# firewall-cmd --zone=public --permanent --add-port=9200/tcp
# firewall-cmd --reload

# 浏览器测试远程访问,输入URL地址:192.168.25.131:9200,当输出JSON数据则说明远程访问配置成功

ElasticSearch 插件

安装 Head 插件

Head 是 Elasticsearch 的集群管理插件,可以用于数据的浏览和查询。Elasticsearch 5.0 之后,elasticsearch-head 不再做为插件放在其 plugins 目录下了,要使用它则必须先安装 Git,然后通过 Git 拉取 Github 上的 elasticsearch-head 源码。运行 elasticsearch-head 需要用到 Grunt,而 Grunt 需要依赖 NPM 包管理器,因此 NodeJS 是必须要安装的,NodeJS 的安装可参考 本站教程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 进入安装目录
# cd /usr/local

# 安装git、bzip2
# yum install -y git bzip2 # Centos
# apt-get install -y git bzip2 # Debian、Ubuntu

# 下载源码
# git clone https://github.com/mobz/elasticsearch-head.git

# 更改文件的所属用户组及用户
# chown -R elasticsearch:elasticsearch elasticsearch-head

# 全局安装Grunt
# npm install -g grunt-cli

# 安装elasticsearch-head的依赖包
# cd elasticsearch-head
# npm install

# 提示:如果npm的安装过程比较慢,可以使用cnpm替代npm来安装依赖包

# 配置elasticsearch-head允许所有IP访问
# vim /usr/local/elasticsearch-head/Gruntfile.js
# 在connect-->server-->options下面添加:hostname: '*'

# 修改elasticsearch-head的默认连接地址
# vim /usr/local/elasticsearch-head/_site/app.js
# 将this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"中的localhost修改为ES的服务器IP地址

# 配置ES允许跨域访问,在ES的配置文件末尾追加下面两行内容即可
# vim /usr/local/elasticsearch-7.2.0/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

# 防火墙开放elasticsearch-head的端口9100
# firewall-cmd --zone=public --permanent --add-port=9100/tcp
# firewall-cmd --reload

# 切换ES用户
# su elasticsearch

# 后台启动ES
$ cd /usr/local/elasticsearch-7.2.0/bin
$ ./elasticsearch -d

# 前台启动elasticsearch-head
$ cd /usr/local/elasticsearch-head/node_modules/grunt/bin
$ grunt server

# 或者后台启动elasticsearch-head
$ cd /usr/local/elasticsearch-head/node_modules/grunt/bin
$ nohup grunt server > es-head.log 2>&1 &

# 测试访问elasticsearch-head,浏览器输入网址:http://192.168.25.131:9100

安装 Kibana 插件

Kibana 是一个针对 Elasticsearch 的开源分析及可视化平台,使用 Kibana 可以查询、查看并与存储在 ES 索引的数据进行交互操作,也可以执行高级的数据分析,并能以图表、表格和地图的形式查看数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 进入安装目录
# cd /usr/local

# 下载kibana
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz

# 解压kibana
# tar -xvf kibana-7.2.0-linux-x86_64.tar.gz
# mv kibana-7.2.0-linux-x86_64 kibana-7.2.0

# 删除下载文件
# rm -f kibana-7.2.0-linux-x86_64.tar.gz

# 更改文件的所属用户组及用户
# chown -R elasticsearch:elasticsearch kibana-7.2.0

# 修改ES服务的IP
# vim kibana-7.2.0/config/kibana.yml
# 将server.host、elasticsearch.hosts修改为ES的服务器IP地址,不能使用localhost或者127.0.0.1

# 防火墙开放kibana的端口5601
# firewall-cmd --zone=public --permanent --add-port=5601/tcp
# firewall-cmd --reload

# 切换ES用户
# su elasticsearch

# 后台启动ES
$ cd /usr/local/elasticsearch-7.2.0/bin
$ ./elasticsearch -d

# 前台启动kibana
$ cd /usr/local/kibana-7.2.0/bin
$ ./kibana

# 或者后台启动kibana
$ cd /usr/local/kibana-7.2.0/bin
$ nohup ./kibana > kibana.log 2>&1 &

# 测试访问kibana,浏览器输入网址:http://192.168.25.131:5601

常见错误解决方案

错误一

  • 错误信息
1
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 解决方案
1
2
3
4
5
6
7
8
9
# 永久修改
# vim /etc/sysctl.conf
vm.max_map_count=262144

# 使修改生效
# /sbin/sysctl -p

# 查看修改结果
# sysctl vm.max_map_count

错误二

  • 错误信息
1
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
  • 解决方案
1
2
3
4
5
6
7
8
9
# 查看限制
# ulimit -Hn

# 针对elasticsearch用户,修改最大文件描述符数
# vim /etc/security/limits.conf
elasticsearch hard nproc 4096
elasticsearch soft nproc 4096
elasticsearch hard nofile 1048576
elasticsearch soft nofile 1048576

错误三

  • 错误信息
1
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
  • 解决方案
1
2
3
4
# 指定ES节点名称、Master节点
# vim /usr/local/elasticsearch-7.2.0/config/elasticsearch.yml
node.name: node-1 # ES节点名称
cluster.initial_master_nodes: ["node-1"] # ES的主节点,即node-name配置的值

错误四

  • 错误信息
1
ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
  • 解决方案
1
请参考这里的解决方案:https://www.cnblogs.com/hellxz/p/11009634.html