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、安装插件,运行统计数据等。 | |
config | elasticsearch.yml | 集群配置文件 |
JDK | Java 运行环境 | |
data | path.data | 数据文件 |
lib | Java 类库 | |
logs | path.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的界面了。
四、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.enabled | false | 是否支持跨域,默认为false |
http.cors.allowed.origin | localhost | 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?/localhost(:[0-9]+)?/ |
http.cors.max-age | 1728000(20天) | 浏览器发送一个“预检”OPTIONS请求,以确定CORS设置。最大年龄定义多久的结果应该缓存。 |
http.cors.allow-methods | OPTIONS,HEAD,GET,POST,PUT,DELETE | 允许跨域的请求方式 |
http.cors.allow-headers | X-Requested-With,Content-Type,Content-Length | 跨域允许设置的头信息 |
http.cors.allow-credentials | 是否返回设置的跨域Access-Control-Allow-Credentials头,如果设置为true,那么会返回给客户端。 |
退出容器
exit
重启elasticsearch
docker restart elasticsearch