让学习成为一种习惯!--------magic_guo
最近在学习为服务项目,免不了要接触一些第三方组件,如:es、rabbitMq、fastDFS等,如果在服务器中安装这些单一组件或者将这些组件搭建成集群的话,我认为使用docker服务会方便管理;另外docker中的docker-compose也可以很方便的管理这些项目;
今天记录一下搜索引擎elasticsearch和kibana:
elasticsearch简写es,es是一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据
kibana是es的管理界面,就好像rabbitMq的management一样,将es可视化;
安装要点:
我这里安装的是7.2.0版本的,一定要牢记es和kibana的版本要一直才能连接上;另外顺便提一下,在java代码中选择依赖,也要选择相同的版本;以为不同的版本可能对应的API接口会有所改变,例如在es在7.x以上版本不用再设置type doc这个属性;
下载镜像:
docker pull elasticsearch:7.2.0
docker pull kibana:7.2.0
es容器启动命令:
docker run --name elasticsearch --restart always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms200M -Xmx200M" -d elasticsearch:7.2.0
需要注意的是:
1、–restart always 参数:服务器中docker启动时此容器也随着启动;
2、-e ES_JAVA_OPTS="-Xms200M -Xmx200M" :设置es容器启动的容量大小,由于我是用的是虚拟机,分配内存比较小,分配给es容器的大小是200M;建议此容器的大小设置不要超过虚拟机容器的一半:
启动之后,进到容器内部,解决es访问跨域问题:
在config/elasticsearch.yml中添加:
http.cors.enabled: true
http.cors.allow-origin: "*"
命令:
docker exec -it elasticsearch /bin/bash
vi config/elasticsearch.yml
效果:
安装ik分词器:
直接在线下载,下载完成之后,输入y确认安装即可
需要注意的是ik分词器和es的版本也最好相同;
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
安装完ik分词后,直接Ctrl+p+q退出而不关闭容器,然后重启次容器:
docker restart elasticsearch
启动完之后在浏览器中访问http://yourIp:9200,看到如下内容代表es安装成功。
postman测试ik分词器:
访问http://yourIp:9200/_analyze
携带Json参数:
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
docker run --name kibana -e ELASTICSEARCH_URL=http://172.17.0.3:9200 -p 5601:5601 -d kibana:7.2.0
说明:
-e ELASTICSEARCH_URL=http://172.17.0.3:9200 是对于es的关联,也是es对外暴露的ip;
可以使用 docker inspect 容器名字/id 产看容器的信息:
docker inspect 容器名字/id
启动成功之后,需要进入/usr/share/kibana/config/kibana.yml修改一下对于es关联的ip,因为初始化的ip地址是http://elasticsearch:9200 需要修改成es对外暴露的ip:http://172.17.0.3:9200
然后同样退出容器重启容器,访问http://yourIpo:5601
就可以看到kibana的界面:
如果连接不上可以使用docker logs kibana 来查看kibana容器的连接状态信息;
另外我认为kibana容器应晚于es容器的启动,这样不会导致kibana找不到es的连接;可以使用docker-compose的定义管理这些容器的启动顺序;
完结!
静下心,慢慢来,会很快!