Docker安装ElasticSearch和Kibana

一、ElasticSearch安装

1.1 拉取elasticsearch镜像

拉取最新版本elasticsearch

docker pull elasticsearch

拉取指定版本elasticsearch,比如拉取7.17.5版本的elasticsearch

docker pull elasticsearch:7.17.5

1.2 启动elasticsearch

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d elasticsearch:7.17.5

运行docker镜像参数说明:

-p:端口映射
-e:设置环境变量,discovery.type=single-node(单机运行),ES_JAVA_OPTS="-Xms512m -Xmx512m"(设置JVM参数)
-d:后台启动
–name:容器名称
elasticsearch:7.17.5:镜像名称:版本号

1.3 目录结构

目录配置文件描述
bin脚本文件,包括启动 Elasticsearch、安装插件,运行统计数据等。
configelasticsearch.yml集群配置文件
JDKJava 运行环境
datapath.data数据文件
libJava 类库
logspath.logs日志文件
modules包含所有 ES 模块
plugins包含所有已安装插件
[root@localhost ~]# docker exec -it elasticsearch bash
root@ea4a5cf39cd3:/usr/share/elasticsearch# ll
total 656
drwxrwxr-x.  1 root          root     58 Aug 30 02:43 ./
drwxr-xr-x.  1 root          root     27 Jun 24 02:04 ../
-rw-r--r--.  1 root          root    220 Jun 24 02:04 .bash_logout
-rw-r--r--.  1 root          root   3771 Jun 24 02:04 .bashrc
drwxrwxr-x.  3 elasticsearch root     17 Aug 30 02:43 .cache/
-rw-r--r--.  1 root          root    807 Jun 24 02:04 .profile
-r--r--r--.  1 root          root   3860 Jun 23 21:55 LICENSE.txt
-r--r--r--.  1 root          root 640930 Jun 23 21:59 NOTICE.txt
-r--r--r--.  1 root          root   2710 Jun 23 21:55 README.asciidoc
drwxrwxr-x.  1 elasticsearch root      6 Jun 24 02:03 bin/
drwxrwxr-x.  1 elasticsearch root     36 Aug 30 02:43 config/
drwxrwxr-x.  1 elasticsearch root     19 Aug 30 02:43 data/
dr-xr-xr-x.  1 root          root     17 Jun 23 22:02 jdk/
dr-xr-xr-x.  3 root          root   4096 Jun 23 22:02 lib/
drwxrwxr-x.  1 elasticsearch root     37 Aug 30 02:43 logs/
dr-xr-xr-x. 61 root          root   4096 Jun 23 22:03 modules/
drwxrwxr-x.  1 elasticsearch root      6 Jun 23 21:59 plugins/
root@ea4a5cf39cd3:/usr/share/elasticsearch#

1.4 验证elasticsearch是否启动成功

linux内用curl访问: curl http://localhost:9200,输入类似如下的信息表示安装成功

[root@localhost ~]# curl http://localhost:9200
{
  "name" : "ea4a5cf39cd3",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "XGDDrECVQfmuFFrcPz6fSg",
  "version" : {
    "number" : "7.17.5",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
    "build_date" : "2022-06-23T21:57:28.736740635Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[root@localhost ~]#

如果你是在服务器上安装,想要对外访问还必须打开你服务器的9200端口,然后将localhost换成你服务器的ip地址即可。

二、插件安装

2.1 安装IK分词器

插件安装可以用elasticsearch-plugin install url命令

比如安装:elasticsearch-analysis-ik(分词器),Ik分词器版本要和ES和Kibana版本保持一致

docker进入容器命令,容器名称为 elasticsearch

docker exec -it elasticsearch /bin/bash

进入 plugins目录

cd /usr/share/elasticsearch/plugins/

安装插件,elasticsearch-analysis-ik版本与elasticsearch保持一致,即7.17.5

elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.5/elasticsearch-analysis-ik-7.17.5.zip

退出容器,并重启docker容器

exit

docker restart elasticsearch

2.2 分词器使用验证

ik_smart:智能分词,最少切分,宁缺毋滥,保证查准率

ik_max_word:最大化分词法,最细粒度划分,尽量多的有意义的分词,保证查全率,ik_max_word分词包含 ik_smart

Postman post请求分词测试:http://ip:9200/_analyze

{
    "tokenizer": "ik_max_word",
    "text": "北京朝阳"
}

结果如下:

{
  "tokens" : [
    {
      "token" : "北京",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "朝阳",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

三、kibana安装

3.1 docker安装kibana

安装kibana版本与elasticsearch版本一致,即 7.17.5

docker pull kibana:7.17.5

3.2 启动kibana

安装完成以后需要启动kibana容器,使用–link连接到elasticsearch容器,命令如下:

docker run --name kibana --link=elasticsearch:elasticsearch -p 5601:5601 --restart always -d kibana:7.17.5

启动以后可以打开浏览器输入http://ip:5601就可以打开kibana的界面了。

image

四、ElasticSearch优化

4.1 复制对应目录到宿主机

[root@localhost elasticsearch]# docker cp elasticsearch:/usr/share/elasticsearch/plugins /docker/elasticsearch/plugins
[root@localhost elasticsearch]# docker cp elasticsearch:/usr/share/elasticsearch/data /docker/elasticsearch/data
[root@localhost elasticsearch]# docker cp elasticsearch:/usr/share/elasticsearch/logs /docker/elasticsearch/logs
[root@localhost elasticsearch]# docker cp elasticsearch:/usr/share/elasticsearch/config /docker/elasticsearch/config

4.2 编辑批处理文件 start.sh,文件内容如下

#!/bin/bash
ES_DIR=/docker/elasticsearch
docker stop elasticsearch
docker rm -f elasticsearch
docker run -d \
  --name elasticsearch \
  --restart always \
  -p 9200:9200 \
  -p 9300:9300 \
  -v ${ES_DIR}/data:/usr/share/elasticsearch/data \
  -v ${ES_DIR}/config:/usr/share/elasticsearch/config \
  -v ${ES_DIR}/logs:/usr/share/elasticsearch/logs \
  -v ${ES_DIR}/plugins:/usr/share/elasticsearch/plugins \
  -e "discovery.type=single-node" \
  -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
  elasticsearch:7.17.5

运行docker镜像参数说明:

-p:端口映射
-e:设置环境变量,discovery.type=single-node(单机运行),ES_JAVA_OPTS="-Xms512m -Xmx512m"(设置JVM参数)
-d:后台启动
–name:容器名称
elasticsearch:7.17.5:镜像名称:版本号
-v:挂载目录,宿主机目录:容器目录
--restart always:容器自启

4.3 重新部署ES

[root@localhost elasticsearch]# pwd
/docker/elasticsearch
[root@localhost elasticsearch]# ll
总用量 8
drwxrwxr-x. 4 root root 4096 8月  30 16:55 config
drwxrwxr-x. 3 root root   19 8月  30 11:27 data
drwxrwxr-x. 2 root root  139 8月  30 16:50 logs
drwxrwxr-x. 3 root root   25 8月  30 11:28 plugins
-rw-r--r--. 1 root root  507 8月  30 17:05 start.sh
[root@localhost elasticsearch]# sh start.sh
elasticsearch
elasticsearch
a490bc6e93a5a60a4b4f60a8f96b1f0fe2e57525dcdc2811a9dcb5a483988765
[root@localhost elasticsearch]#

五、Kibana优化

5.1 复制容器对应目录到宿主机

[root@localhost ~]# docker cp kibana:/usr/share/kibana/data /docker/kibana/data
[root@localhost ~]# docker cp kibana:/usr/share/kibana/config /docker/kibana/config

5.2 编辑批处理文件 start.sh,文件内容如下

#!/bin/bash
KIBANA_DIR=/docker/kibana
docker stop kibana
docker rm -f kibana
docker run -d \
  --name kibana \
  --restart always \
  --link=elasticsearch:elasticsearch \
  -p 5601:5601 \
  -v ${KIBANA_DIR}/data:/usr/share/kibana/data \
  -v ${KIBANA_DIR}/config:/usr/share/kibana/config \
  kibana:7.17.5

5.3 重新部署kibana

[root@localhost kibana]# pwd
/docker/kibana
[root@localhost kibana]# ll
总用量 4
drwxrwxr-x. 2 root root  44 6月  23 19:37 config
drwxrwxr-x. 6 root root 110 8月  31 09:22 data
-rw-r--r--. 1 root root 306 8月  31 09:21 start.sh
[root@localhost kibana]# sh ./start.sh
kibana
kibana
dafa6fc5eeacda56b432636095c64d3259e69e2fe6171d8275fd9f1077f16f9c
[root@localhost kibana]#

六、常见问题处理

开始链接elasticsearch服务,会发现链接不上,由于是前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置

vi config/elasticsearch.yml

在elasticsearch.yml的文件末尾添加如下配置,保存,退出容器,并重启

http.cors.enabled: true
http.cors.allow-origin: "*"

参数说明:

参数缺省值说明
http.cors.enabledfalse是否支持跨域,默认为false
http.cors.allowed.originlocalhost当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?/localhost(:[0-9]+)?/
http.cors.max-age1728000(20天)浏览器发送一个“预检”OPTIONS请求,以确定CORS设置。最大年龄定义多久的结果应该缓存。
http.cors.allow-methodsOPTIONS,HEAD,GET,POST,PUT,DELETE允许跨域的请求方式
http.cors.allow-headersX-Requested-With,Content-Type,Content-Length跨域允许设置的头信息
http.cors.allow-credentials是否返回设置的跨域Access-Control-Allow-Credentials头,如果设置为true,那么会返回给客户端。

退出容器

exit

重启elasticsearch

docker restart elasticsearch
posted @ 2022-08-30 10:22  我命由我不由天—hao  阅读(714)  评论(0编辑  收藏  举报