Elasticsearch基础

介绍

技术 特性 适用场景 说明
ElasticSearch - 基于Apache Lucene
- 轻量级
- 分布式
- RESTful API
- 多索引文件支持
- 支持无宕机升级
- 支持跨集群搜索
- PB级的结构化和非结构化海量数据的处理
- 日志记录和日志分析
- 全文搜索
一款基于Lucene的实时分布式搜索和分析引擎。
- 中文官网
- Getting Started
- Doc
- Elasticsearch Reference
- Import Elasticsearch configuration
- Elasticsearch Plugins and Integrations
- Elasticsearch Clients
- Elasticsearch Service Documentation
- Elastic Cloud on Kubernetes
- Elastic Cloud Control Documentation
- Kibana Guide
- Painless Scripting Language
- Logstash Reference
- Logstash Versioned Plugin Reference
- Beats Platform Reference
- Beats Developer Guide
- Packetbeat Reference
- Filebeat Reference
- Winlogbeat Reference
- Metricbeat Reference
- Heartbeat Reference
- Auditbeat Reference
- Application Performance Monitoring (APM)
- Logs Monitoring Guide
- Metrics Monitoring Guide
- Uptime monitoring guide
- 中文Doc
- 《Elasticsearch 权威指南》中文版
- 下载
BigDesk ES插件 对ES集群的健康状况进行实时监控,包括节点的实时监控,包括JVM的情况、Linux的情况、集群名称、节点列表、内存消耗、GC回收。
可以自由的在各个节点之间进行切换,自动添加或是删除节点。
可以更改refresh interval 刷新间隔。
经过试用,发现不可用,支持elasticsearch的版本只到1.3.x版本。
elasticsearch-head - 开源
- node.js
ES插件
ES集群可视化操作,方便对ES进行各种操作的客户端工具
集群管理工具
数据可视化
执行增删改查操作
Elasticsearch语句可视化
监控 Elasticsearch 状态的客户端插件
kibana ES插件
ES可视化插件。读取ES集群中的索引库中的type信息,并使用可视化的方式呈现,呈现方式有柱状图、饼状图、折线图、仪表盘等。
elasticsearch-readonlyrest-plugin 安全插件 它提供不同类型的身份验证,从基本到LDAP,以及索引和操作级访问控制。
elasticdump 根据Elasticsearch查询备份/恢复或重新索引数据。
- 官网
- Doc
ICU Analysis Plugin ES插件

基础概念

Node节点

一个 Elasticsearch 实例即一个 Node。 节点的类型有:

  • 主节点
  • 数据节点
  • 客户端节点(协调节点)

Elasticsearch 的配置文件中可以通过 node.master、node.data 来设置节点类型。

Node节点类型

节点类型 配置文件设置 说明
主节点+数据节点 node.master: true
node.data: true
- 默认值
- 节点即有成为主节点的资格,又存储数据。- 这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。
- Elasticsearch 默认每个节点都是这样的配置,在测试环境下这样做没问题。
- 实际工作中建议不要这样设置,这样相当于主节点和数据节点的角色混合到一块了。
主节点 node.master: true
node.data: false
- 不会存储数据
- 有成为主节点的资格
- 可以参与选举
- 有可能成为真正的主节点
- 普通服务器即可(CPU、内存消耗一般)
数据节点 node.master: false
node.data: true
- 节点没有成为主节点的资格
- 不参与选举
- 只会存储数据
- 在集群中需要单独设置几个这样的节点负责存储数据,后期提供存储和查询服务。
- 主要消耗磁盘,内存。
客户端节点 node.master: false
node.data: false
- 不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进行负载均衡。
- 普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)。

集群健康值

集群健康值 说明
green 所有主要分片和复制分片都可用
yellow 所有主要分片可用,但不是所有复制分片都可用
red 不是所有的主要分片都可用,当集群状态为 red,它仍然正常提供服务,它会在现有存活分片中执行请求,我们需要尽快修复故障分片,防止查询数据的丢失

安装

先决条件

安装JDK

参考 jdk安装

禁用交换

1
2
$ swapoff -a
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

修改文件限制

1
2
3
4
5
6
$ vim /etc/security/limits.conf
# 增加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096

调整虚拟内存&最大并发连接

1
2
3
4
5
6
$ vim /etc/sysctl.conf
# 配置虚拟内存
vm.max_map_count=262144
fs.file-max=655360
# 配置 swappiness
vm.swappiness=1

创建目录

1
2
3
4
5
6
7
8
# 创建 Elasticsearch 主目录
$ mkdir -p /usr/local/elasticsearch/
# 创建 Elasticsearch 数据目录
$ mkdir -p /usr/local/elasticsearch/data
# 创建 Elasticsearch 日志目录
$ mkdir -p /usr/local/elasticsearch/log
# 设置目录权限
$ chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

CentOS7.4 安装 ElasticSearch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载
$ cd /usr/local/
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-x86_64.rpm

# 安装
$ yum -y localinstall elasticsearch-7.3.0-x86_64.rpm

# 启动
$ systemctl daemon-reload
$ systemctl enable elasticsearch.service
$ systemctl start elasticsearch.service

# 检查
$ curl '127.0.0.1:9200'
# 查看集群状态
$ curl 'http://127.0.0.1:9200/_cluster/state'
# 查看集群健康状态
$ curl 'http://127.0.0.1:9200/_cluster/health'

Ubuntu 安装 ElasticSearch

1
2
3
4
5
6
# 导入Elasticsearch PGP Key
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# 下载
$ cd /usr/local/
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-amd64.deb

Linux 安装 ElasticSearch

1
2
3
4
5
6
7
8
# 导入Elasticsearch PGP Key
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-7.3.0-linux-x86_64.tar.gz.sha512
$ tar -xzf elasticsearch-7.3.0-linux-x86_64.tar.gz
$ cd elasticsearch-7.3.0/

MacOS-原生安装

1
2
3
4
5
6
# 导入Elasticsearch PGP Key
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# 下载
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-darwin-x86_64.tar.gz
$ tar zxvf elasticsearch-7.3.0-darwin-x86_64.tar.gz
$ cd elasticsearch-7.3.0/

MacOS-brew安装

1
2
$ brew update  
$ brew install elasticsearch

Docker 安装 ElasticSearch

先决条件

调整vm.max_map_count

Linux
1
2
3
4
5
6
7
8
9
10
11
# 永久生效
$ vi /etc/sysctl.conf
##### 内容开始 #####
vm.max_map_count = 262144
##### 内容结束 #####

# 暂时生效
$ sysctl -w vm.max_map_count=262144

# 检查设置
$ grep vm.max_map_count /etc/sysctl.conf
Docker for Mac的MacOS
1
2
$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
$ sysctl -w vm.max_map_count = 262144
Windows和macOS与Docker Toolbox
1
2
$ docker-machine ssh
$ sudo sysctl -w vm.max_map_count = 262144

安装Docker

参考Docker基础

单机安装

1
2
3
4
5
# 拉取镜像
$ docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.0

# 开发模式启动
$ docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.0

集群安装

安装DockerCompose

参考Docker基础

准备docker-compose.yml

docker-compose.yml内容如下

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
version: '2.2''2.2'
services:services:
es01: es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0 image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
container_name: es01container_name: es01
environment:environment:
- node.name=es01 - node.name=es01
- discovery.seed_hosts=es02- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster- cluster.name=docker-cluster
- bootstrap.memory_lock=true- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:ulimits:
memlock: memlock:
soft: -1 soft: -1
hard: -1hard: -1
volumes:volumes:
- esdata01:/usr/share/elasticsearch/data - esdata01:/usr/share/elasticsearch/data
ports:ports:
- 9200:9200 - 9200:9200
networks:networks:
- esnet - esnet
es02:es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0 image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
container_name: es02container_name: es02
environment:environment:
- node.name=es02 - node.name=es02
- discovery.seed_hosts=es01- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster- cluster.name=docker-cluster
- bootstrap.memory_lock=true- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:ulimits:
memlock: memlock:
soft: -1 soft: -1
hard: -1hard: -1
volumes:volumes:
- esdata02:/usr/share/elasticsearch/data - esdata02:/usr/share/elasticsearch/data
networks:networks:
- esnet - esnet

volumes:volumes:
esdata01: esdata01:
driver: local driver: local
esdata02:esdata02:
driver: local driver: local

networks:networks:
esnet: esnet:

启动集群

1
2
# 启动集群
$ docker-compose up

检查集群状态

1
$ curl http://127.0.0.1:9200/_cat/health://127.0.0.1:9200/_cat/health

销毁集群和数据卷

1
$ docker-compose down -v

安装集群

只要节点属于同一个局域网网段,而且集群名称相同,ES就会自动发现其它节点。

运维

管理

命令行运行ElasticSearch

1
2
3
4
5
# 命令行运行
$ ./bin/elasticsearch

# 停止
Ctrl + C

守护进程运行ElasticSearch

1
2
3
4
$ ./bin/elasticsearch -d

# 停止
$ pkill -F pid

SysV方式运行

1
2
3
$ sudo chkconfig --add elasticsearch
$ sudo -i service elasticsearch start
$ sudo -i service elasticsearch stop

systemd方式运行

1
2
3
4
$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service
$ sudo systemctl stop elasticsearch.service

检查ElasticSearch运行状态

1
$ curl 'http://127.0.0.1:9200'

查看ElasticSearch日志

1
2
3
$ sudo journalctl -f
$ sudo journalctl --unit elasticsearch
$ sudo journalctl --unit elasticsearch --since "2016-10-30 18:17:16"

配置 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
$ vim /etc/elasticsearch/elasticsearch.yml
##### 根据官方文档整理 开始 #####
# 配置数据存储目录
path.data: /var/lib/elasticsearch
# 配置日志存储目录设置索引数据的存储路径
path.logs: /var/log/elasticsearch

# 配置集群名称,默认是elasticsearch,es会自动发现在同一网段下的es。
## 如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
## 确保不要在不同的环境中重复使用相同的集群名称,否则最终可能会导致节点加入了错误的集群.
cluster.name: logging-prod

# 节点名,默认随机指定一个name列表中名字
## 该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.name: node-1

# 网卡绑定的 ip 地址
## 默认情况下,Elasticsearch仅绑定到环回地址,
## 例如127.0.0.1和[::1] 。这足以在服务器上运行单个开发节点。
network.host: 0.0.0.0

# 提供集群中符合主机要求的节点的列表
## 指定 master 节点,让 es节点能够正确地加入集群
## 开箱即用,无需任何网络配置,Elasticsearch将绑定到可用的环回地址,
## 并将扫描本地端口9300至9305,以尝试连接到在同一服务器上运行的其他节点。
## 这提供了自动群集体验,而无需进行任何配置。
## 如果要与其他主机上的节点形成集群,则必须使用discovery。
## seed_hosts设置提供集群中其他主机的列表,
## 这些主机符合主机要求并且可能处于活动状态且可联系,以便为发现过程提供种子。
## 此设置通常应包含集群中所有符合主机要求的节点的地址。
## 此设置包含主机数组或逗号分隔的字符串。
## 每个值都应采用host:port或host的形式
## (如果未设置,则port默认为设置transport.profiles.default.port退回到transport.port )
## 请注意,IPv6主机必须放在方括号中. 此设置的默认值为127.0.0.1, [::1]
discovery.seed_hosts: ["host1", "host2"]

# 集群的主机节点(多个用逗号分隔)
## 首次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,
## 该步骤确定了在第一次选举中便对其票数进行计数的主资格节点的集合。
## 在开发模式下 ,未配置发现设置,此步骤由节点自己自动执行。
## 由于这种自动引导从本质上讲是不安全的 ,因此当您在生产模式下启动全新的集群时,
## 必须显式列出符合资格的主机节点,并在第一次选举中对其投票进行计数。
## 使用cluster.initial_master_nodes设置来设置此列表。
## 重新启动群集或将新节点添加到现有群集时,不应使用此设置。
cluster.initial_master_nodes: ["node4"]

# 开启跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"

# 启用自动创建系统索引
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

##### 根据官方文档整理 结束 #####



##### 内容来源于网络,未尝试 #####
# 指定该节点是否有资格被选举成为node,默认是true,
## es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.master: true

# 指定该节点是否存储索引数据,默认为true。
node.data: true

# 设置默认索引分片个数,默认为5片。
index.number_of_shards: 5

# 设置默认索引副本个数,默认为1个副本。
index.number_of_replicas: 1

# 设置为true来锁住内存。
## 因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,
## 可以把ES_MIN_MEM和 ES_MAX_MEM两个环境变量设置成同一个值,
## 并且保证机器有足够的内存分配给es。
## 同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
bootstrap.mlockall: true

# 设置对外服务的http端口,默认为9200。
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true
# 设置内容的最大容量,默认100mb

http.max_content_length: 100mb
# 是否使用http协议对外提供服务,默认为true,开启。

http.enabled: false

# gateway的类型,默认为local即为本地文件系统
## 可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,和amazon的s3服务器。
gateway.type: local

#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true

# 设置集群中N个节点启动时进行数据恢复,默认为1。
gateway.recover_after_nodes: 1

# 设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.recover_after_time: 5m

# 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
gateway.expected_nodes: 2

# 初始化数据恢复时,并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_initial_primaries_recoveries: 4

# 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_concurrent_recoveries: 2

# 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
indices.recovery.max_size_per_sec: 0

# 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
indices.recovery.concurrent_streams: 5

# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1

# 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
discovery.zen.ping.timeout: 3s

# 设置是否打开多播发现节点,默认是true。
discovery.zen.ping.multicast.enabled: false

# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]

# 下面是一些查询时的慢日志参数设置
index.search.slowlog.level: TRACE
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug:500ms
index.search.slowlog.threshold.fetch.trace: 200ms
##### 内容来源于网络,尝试 #####

elasticsearch.yml 配置示例

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
# 配置数据存储目录
path.data: /usr/local/elasticsearch/data
#
# Path to log files:
# 配置日志存储目录设置索引数据的存储路径
path.logs: /usr/local/elasticsearch/log

# 配置集群名称
## 默认是elasticsearch,es会自动发现在同一网段下的es,
## 如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
## 确保不要在不同的环境中重复使用相同的集群名称,否则最终可能会导致节点加入了错误的集群.
cluster.name: elasticsearch-test

# 网卡绑定的 ip 地址
## 默认情况下,Elasticsearch仅绑定到环回地址,
## 例如127.0.0.1和[::1] 。这足以在服务器上运行单个开发节点。
network.host: 0.0.0.0
# 提供集群中符合主机要求的节点的列表
## 指定 master 节点,让 es节点能够正确地加入集群
## 开箱即用,无需任何网络配置,Elasticsearch将绑定到可用的环回地址,
## 并将扫描本地端口9300至9305,以尝试连接到在同一服务器上运行的其他节点。
## 这提供了自动群集体验,而无需进行任何配置。
## 如果要与其他主机上的节点形成集群,则必须使用discovery。
## seed_hosts设置提供集群中其他主机的列表,
## 这些主机符合主机要求并且可能处于活动状态且可联系,以便为发现过程提供种子。
## 此设置通常应包含集群中所有符合主机要求的节点的地址。
## 此设置包含主机数组或逗号分隔的字符串。
## 每个值都应采用host:port或host的形式
## (如果未设置,则port默认为设置transport.profiles.default.port退回到transport.port )
## 请注意,IPv6主机必须放在方括号中. 此设置的默认值为127.0.0.1, [::1]
discovery.seed_hosts: ["node13"]
# 集群的主机节点(多个用逗号分隔)
## 首次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,
## 该步骤确定了在第一次选举中便对其票数进行计数的主资格节点的集合。
## 在开发模式下 ,未配置发现设置,此步骤由节点自己自动执行。
## 由于这种自动引导从本质上讲是不安全的 ,因此当您在生产模式下启动全新的集群时,
## 必须显式列出符合资格的主机节点,并在第一次选举中对其投票进行计数。
## 使用cluster.initial_master_nodes设置来设置此列表。
## 重新启动群集或将新节点添加到现有群集时,不应使用此设置。
cluster.initial_master_nodes: ["node13"]

# 开启跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"

# 启用自动创建系统索引
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
#cluster.initial_master_nodes: ["node-1", "node-2"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

安装插件

安装 BigDesk 插件

1
2
3
4
5
6
7
8
9
# 下载
$ git clone https://github.com/lukas-vlcek/bigdesk.git

# 启动
$ cd bigdesk/
$ python -m SimpleHTTPServer

# 访问
## 访问 http://localhost:8000

安装elasticsearch-head

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
# 安装 node.js
## 参考 http://www.wanglibing.com/2016/07/12/nodejs%E5%9F%BA%E7%A1%80/

# 下载
$ git clone git://github.com/mobz/elasticsearch-head.git

# 安装 grunt-cli
$ npm install -g grunt-cli

# 安装 grunt
$ cd elasticsearch-head
$ npm install grunt --save

# 安装 phantomjs-prebuilt 避免报错
$ npm install phantomjs-prebuilt@2.1.14 --ignore-scripts

# 安装依赖的 npm 包
$ npm install

# 修改启动文件
$ vi elasticsearch-head/Gruntfile.js
##### 内容开始 #####
connect: {
server: {
options: {
hostname: '0.0.0.0',
port: 9100,
base: '.',
keepalive: true
}
}
}
##### 内容结束 #####

# 启动 elasticsearch-head
$ cd elasticsearch-head
$ grunt server

# 访问 elasticsearch-head
# 地址:http://localhost:9100

安装 kibana 插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 下载
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.2-linux-x86_64.tar.gz

# 安装
$ yum -y localinstall kibana-7.4.2-linux-x86_64.tar.gz

# 配置
$ vim /etc/kibana/kibana.yml
##### 增加如下内容 #####
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
##### 内容结束 #####

$ systemctl daemon-reload
$ systemctl start kibana
$ systemctl enable kibana

# 访问
## http://127.0.0.1/5601/status
## http://127.0.0.1/5601/

安装 ICU Analysis Plugin

1
2
3
4
5
# 安装
$ sudo bin/elasticsearch-plugin install analysis-icu

# 移除
$ sudo bin/elasticsearch-plugin remove analysis-icu

常见问题

Elasticsearch6 和Elasticsearch7 的配置变化

1
2
3
# In tracing scenario, consider to set more than this at least.
thread_pool.index.queue_size: 1000 # Only suitable for ElasticSearch 6
thread_pool.write.queue_size: 1000 # Suitable for ElasticSearch 6 and 7

常见错误

启用外部IP访问的启动异常

问题描述

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
$ vim /etc/elasticsearch/elasticsearch.yml
##### 内容结束 #####
network.host: 0.0.0.0
##### 内容结束 #####

# 然后启动报错
$ journalctl -xe
11月 19 04:18:37 node15 polkitd[710]: Registered Authentication Agent for unix-process:14076:3042480 (system bus name :1.68 [/usr/bin/pkttyagent --notify-fd 5
11月 19 04:18:37 node15 systemd[1]: Starting Elasticsearch...
-- Subject: Unit elasticsearch.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit elasticsearch.service has begun starting up.
11月 19 04:18:39 node15 elasticsearch[14082]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be remo
11月 19 04:18:40 node15 dhclient[2100]: DHCPREQUEST on enp0s8 to 172.18.30.254 port 67 (xid=0x6e5687ea)
11月 19 04:18:55 node15 elasticsearch[14082]: ERROR: [1] bootstrap checks failed
11月 19 04:18:55 node15 elasticsearch[14082]: [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, dis
11月 19 04:18:55 node15 systemd[1]: elasticsearch.service: main process exited, code=exited, status=78/n/a
11月 19 04:18:55 node15 systemd[1]: Failed to start Elasticsearch.
-- Subject: Unit elasticsearch.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit elasticsearch.service has failed.
--
-- The result is failed.
11月 19 04:18:55 node15 systemd[1]: Unit elasticsearch.service entered failed state.
11月 19 04:18:55 node15 systemd[1]: elasticsearch.service failed.
11月 19 04:18:55 node15 polkitd[710]: Unregistered Authentication Agent for unix-process:14076:3042480 (system bus name :1.68, object path /org/freedesktop/Pol
11月 19 04:18:55 node15 dhclient[2100]: DHCPREQUEST on enp0s8 to 172.18.30.254

解决办法

1
2
3
4
$ vim /etc/elasticsearch/elasticsearch.yml
##### 将下面取消注释 #####
cluster.initial_master_nodes: ["node-1", "node-2"]
##### 内容结束 #####

master_not_discovered_exception

1
2


解决办法

1
2
3
4
$ vim /etc/elasticsearch/elasticsearch.yml
##### 修改如下内容 #####
transport.host: 192.168.100.101
##### 内容结束 #####

集群部署工具

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
0%