Elasticsearch在docker安装及使用

1.安装docker

①安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

②添加阿里云的docker部署仓库

yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

③安装docker

yum install docker-ce docker-ce-cli containerd.io

④启动docker

systemctl start docker

2.安装部署es

①查看所有的es镜像

docker search elasticsearch

②拉取你中意的es镜像(推荐star高的)

docker pull

(如果拉取过程中报错在镜像后面加上版本,比如elasticsearch:6.7.2)

em:

docker pull elasticsearch:6.7.2

③添加镜像加速(docker 默认去官网下载,速度感人,所以添加国内进行加速服务)

vi /etc/docker/daemon.json(文件不存在创建文件)

{“registry-mirrors”:[“https://reg-mirror.qiniu.com/"]}

systemctl daemon-reload

systemctl restart docker

④创建挂载的目录

 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
mkdir -p /data/LPAPP/docker_elasticsearch-6.7.2/config

mkdir -p /data/LPAPP/docker_elasticsearch-6.7.2/data

mkdir -p /data/LPAPP/docker_elasticsearch-6.7.2/logs

mkdir -p /data/LPAPP/docker_elasticsearch-6.7.2/plugins 

chmod -R 777 /data/LPAPP/docker_elasticsearch-6.7.2/data

chmod -R 777 /data/LPAPP/docker_elasticsearch-6.7.2/logs

 

echo "http.host: 0.0.0.0" >> /data/LPAPP/docker_elasticsearch-6.7.2/config/elasticsearch.yml

或者 vim /data/LPAPP/docker_elasticsearch-6.7.2/config/elasticsearch.yml 写入以下内容

 

可选:

/usr/share/elasticsearch/config/jvm.options 配置修改:

-Xms200m

-Xmx200m

修改后可去除容器启动配置:

-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \

elasticsearch.yml文件内容:

# 集群名称

cluster.name: docker-es-app

 

# 本节点名称

node.name: ES-Node01

 

# 是否允许该节点存储数据

node.data: true

 

# 监听IP

#network.host: 0.0.0.0

network.host: ["0.0.0.0"]

 

# 对外服务的端口

http.port: 9200

 

# 支持跨域访问

http.cors.enabled: true

http.cors.allow-origin: "*"

 

# 数据目录

#path.data: /data/LPAPP/es/data

 

# 日志目录

#path.logs: /data/LPAPP/es/logs

 

# 单节点

#discovery.type: single-node

如果没有挂载配置目录,则需要在容器中修改配置:

进入容器

ps -ef |grep elasticsearch

cd /data/LPAPP/es/config (cd /usr/share/elasticsearch/config)

vim elasticsearch.yml

⑤创建容器并启动

1.拉取镜像并创建容器并启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
docker run --name elasticsearch-6.7.2 -p 9200:9200 -p 9300:9300 \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \

-v /data/LPAPP/docker_elasticsearch-6.7.2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \

-v /data/LPAPP/docker_elasticsearch-6.7.2/data:/usr/share/elasticsearch/data \

-v /data/LPAPP/docker_elasticsearch-6.7.2/logs:/usr/share/elasticsearch/logs \

-v /data/LPAPP/docker_elasticsearch-6.7.2/plugins:/usr/share/elasticsearch/plugins \

-itd elasticsearch:6.7.2

2.创建容器并启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
docker run --name elasticsearch-6.7.2 -p 9200:9200 -p 9300:9300 \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \

-v /data/LPAPP/docker_elasticsearch-6.7.2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \

-v /data/LPAPP/docker_elasticsearch-6.7.2/data:/usr/share/elasticsearch/data \

-v /data/LPAPP/docker_elasticsearch-6.7.2/logs:/usr/share/elasticsearch/logs\

-v /data/LPAPP/docker_elasticsearch-6.7.2/plugins:/usr/share/elasticsearch/plugins \

-itd 2982ba071059

3.说明

1).其中elasticsearch.yml是挂载的配置文件,data是挂载的数据,plugins是es的插件,如ik。

而数据挂载需要权限,需要设置data文件的权限为可读可写,需要下边的指令:

chmod -R 777 要修改的路径

2)命令解释:

-e “discovery.type=single-node” 设置为单节点

特别注意:

-e ES_JAVA_OPTS="-Xms256m -Xmx256m” \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES

⑤验证是否运行es成功

ip addr

curl -v http://127.0.0.1:9200

⑤开启9200端口

firewall-cmd –add-port=9200/tcp –permanent

firewall-cmd –reload

firewall-cmd –list-all

3 .安装ik分词器

0.下载

1
2
3
4
5
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.7.2/elasticsearch-analysis-ik-6.7.2.zip \

-P /data/tools

sudo yum install unzip

1).已挂载插件目录(执行):

1
2
3
4
5
6
7
8
\#创建目录:

mkdir -p /data/LPAPP/docker_elasticsearch-6.7.2/plugins/ik 

\#解压

unzip /data/tools/elasticsearch-analysis-ik-6.7.2.zip -d /data/LPAPP/docker_elasticsearch-6.7.2/plugins/ik

2).未挂载插件目录(执行):

 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
\#将压缩包移动到容器中

docker cp /data/tools/elasticsearch-analysis-ik-6.7.2.zip elasticsearch:/usr/share/elasticsearch/plugins


\#进入容器

docker exec -it elasticsearch /bin/bash  


\#创建目录

mkdir /usr/share/elasticsearch/plugins/ik

 

\#将文件压缩包移动到ik中

mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.7.0.zip /usr/share/elasticsearch/plugins/ik


\#进入目录

cd /usr/share/elasticsearch/plugins/ik


\#解压

unzip elasticsearch-analysis-ik-7.7.0.zip


\#删除压缩包

rm -rf elasticsearch-analysis-ik-7.7.0.zip

3).重启ES容器

1
docker restart elasticsearch-6.7.2

4).验证ik分词器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
POST /_analyze {"text":"我是中国人"}

POST /_analyze {"analyzer":"ik_max_word","text":"我是中国人"}

POST /_analyze {"analyzer":"ik_smart","text":"我是中国人"}

POST /_analyze {"text":"中华人民共和国国歌"}

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

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

5).总结

给大家个建议,这玩意装与不装都挺好,不装查到的东西也很精确够使,装上会查出一些没有用的

4.备份与恢复

1).前期准备

架设NFS服务器,并将其挂在至所有elasticsearch节点,挂载点为/data/backup/elasticsearch

mkdir -p /data/backup/elasticsearch

注意如果是容器启动服务的话,必须是容器内路径

参考文档:

https://www.jixian.io/article/Elasticsearch%20%E6%9C%AC%E5%9C%B0%E5%A4%87%E4%BB%BD%E4%B8%8E%E8%BF%98%E5%8E%9F/

2).配置elasticsearch

A.修改所有节点的elasticsearch.yml文件

vim es目录/config/elasticsearch.yml

# 添加path.repo配置共享仓库的位置

path.repo: ["/usr/share/elasticsearch/data"]

# 保存后重启es

docker restart elasticsearch-6.7.2

3).创建了共享目录后在共享目录下为集群创建共享仓库

 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
PUT http://192.168.20.116:9200/_snapshot/backup 

{

​    "type": "fs", 

​    "settings": {

​        "location": "/usr/share/elasticsearch/data/backup",

​        "compress": true, // 是否压缩,可选

​        "max_snapshot_bytes_per_sec" : "50mb",  // 速度限制,默认为20mb,可选

​        "max_restore_bytes_per_sec" : "50mb"

​    }

}

 

curl -XPUT 192.168.20.116:9200/_snapshot/backup -H 'Content-Type:application/json' -d '

{

​    "type": "fs",

​    "settings": {

​        "location": "/usr/share/elasticsearch/data/backup",

​        "max_snapshot_bytes_per_sec": "50mb",

​        "max_restore_bytes_per_sec": "50mb",

​        "compress": "true"

​    }

}

4).备份索引数据

# 所有索引备份

PUT http://192.168.20.116:9200/_snapshot/backup/备份名

# 指定索引备份

{

​ “indices”: “index1, index2”

}

# 全量备份

curl -XPOST http://192.168.20.116:9200/_snapshot/backup/backup-2021-06-05?wait_for_completion=true

TIPS: 如果不希望快照作为后台进程运行,可以通过添加wait_for_completion=true参数,

使其在前台运行,知道备份完成。

# 终止备份

curl -XDELETE http://192.168.20.116:9200/_snapshot/backup/backup-2021-06-05

5).查看备份状态

GET http://192.168.20.116:9200/_snapshot/backup/备份名/_status

GET http://192.168.20.116:9200/_snapshot/backup/backup-2021-06-05/_status

6).查看备份列表

GET http://192.168.20.116:9200/_snapshot/backup/_all

7).删除备份

DELETE http://192.168.20.116:9200/_snapshot/backup/备份名

8).恢复数据

如果是在新的集群恢复数据,需要先将NFS挂载至elasticsearch节点,

并修改配置文件path.repo:["/data/backup/elasticsearch"],

并创建备份仓库,而后执行如下命令:

curl -XPOST http://192.168.20.116:9200/_snapshot/backup/backup-2021-06-05/_restore?wait_for_completion=true

如果,不在新的集群恢复,那么只需要执行上述命令即可。

备注: 使用快照并不会备份templates

# 全部恢复

# wait_for_completion=true 为阻塞运行,可选

POST http://192.168.20.116:9200/_snapshot/backup/备份名/_restore?wait_for_completion=true

# 指定恢复index1索引

{

​ “indices”: “index1”,

​ // 如需重命名,则增加

​ “rename_pattern”: “index1”, // 需改名的原索引名

​ “rename_replacement”: “index2” // 改名后索引名

}

9).查看恢复状态

GET http://192.168.20.116:9200/_recovery/

# percent字段为恢复百分比

# 如需取消一个恢复

DELETE http://192.168.20.116:9200/恢复后的索引名

5.安装视图工具

1).浏览器扩展安装(ElasticSearch-head)(推荐)

①下载扩展

https://codeload.github.com/mobz/elasticsearch-head/zip/refs/heads/master

②安装扩展

1.下载得到压缩包:elasticsearch-head-master.zip

2.解压进入目录,进入crx目录

3.复制文件:es-head.crx 到桌面并修改后缀为zip

4.解压zip文件到es-head目录

5.浏览器打开扩展管理,打开开发者模式

6.加载已解压的扩展程序->选择es-head目录

2).Dejavu安装

$ docker run -p 1358:1358 -d appbaseio/dejavu

open http://localhost:1358/

3).Kibana安装

 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
docker pull kibana:6.7.2

 

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://自己的IP地址:9200 \

-p 5601:5601 -d kibana:6.7.2

 

实例:

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.20.92:9200 \

-p 5601:5601 -d kibana:6.7.2

 

进入容器修改相应内容

docker exec -it kibana /bin/bash

cd /usr/share/kibana/config

vi kibana.yml 添加以下:

server.port: 5601

server.host: 0.0.0.0

elasticsearch.hosts: [ "http://自己的IP地址:9200" ]

i18n.locale: "zh-CN"

 

重启容器

docker restart kibana

然后访问页面

http://自己的IP地址:5601/app/kibana

http://192.168.20.92:5601/app/kibana

tips:

1.索引管理

2.设置查询时间

4).安装elasticsearch-head

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
\#拉取镜像

docker pull mobz/elasticsearch-head:5

 

\#创建容器

docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

 

\#启动容器

docker start elasticsearch-head

or

docker start 容器id (docker ps -a 查看容器id )

#浏览器打开

浏览器打开: http://IP:9100

ElasticSearch-head 操作时不修改配置,默认会报 406错误码,无法查看数据

 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
\#复制vendor.js到外部

docker cp 容器id:/usr/src/app/_site/vendor.js /data/conf/

docker cp 6130115b8ebd:/usr/src/app/_site/vendor.js /data/conf/

 

\#修改vendor.js

vim /data/conf/vendor.js

 

修改内容:

6886行

//contentType: "application/x-www-form-urlencoded",

contentType: "application/json;charset=UTF-8",

 

7574行

//var inspectData = s.contentType === "application/x-www-form-urlencoded" &&

var inspectData = s.contentType === "application/json;charset=UTF-8" &&

 

docker cp /data/conf/vendor.js  容器id:/usr/src/app/_site

docker cp /data/conf/vendor.js  6130115b8ebd:/usr/src/app/_site

docker restart 容器id