谷粒商城-高级-35 全文检索 Elasticsearch-基础及使用 Docker 安装
一、ElasticSearch简介
简介
Elasticsearch 是一个分布式搜索服务,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。它可以快速的存储、搜索和分析海量数据。提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也是采用了ElasticSearch作为其搜索服务。
用途:检索,日志处理和分析,基础设施指标和容器监测,安全分析,业务分析等。
基本概念
ES和Mysql 进行类比
1、Index(索引)
动词,相当于MySQL中的 insert;
名词,相当于MySQL中的 Database;
2、Type(类型)
在 Index(索引)中,可以定义一个或多个类型。
类似于 MySQL中的 Table;每一种类型的数据放在一起。
3、Document(文档)
保存在某个索引(index)下,某种类型(Type)的一个数据(Document),文档是 JSON 格式的,Document就是MySQL中的某个 Table 里面的内容;
类似关系:
- 索引---数据库
- 类型---表
- 文档---表中的记录
- 属性---列
4、倒排索引机制
分词:将整句分拆为单词,在检索的时候然后会给每个记录做相关性得分,然后从高到低情况排除给出。
二、Docker安装ES
1、下载镜像文件
sudo docker pull elasticsearch:7.4.2 # 存储和检索数据
sudo docker pull kibana:7.4.2 # 可视化检索数据
在安装的时候看一下虚拟机内存是否够用,ES非常的吃内存。
free -m
2、创建实例
切换到root用户
su root
> vagrant
2.1、ElasticSearch
创建配置文件目录,将docker内部es的配置文件挂载到外部,方便修改。
mkdir /mydata/elasticsearch/config
mkdir /mydata/elasticsearch/data
# 任何IP都可以访问,注意host和IP中间有空格
echo "http.host: 0.0.0.0" >>/mydata/elasticsearch/config/elasticsearch.yml
创建好目录之后,需要给该目录访问、执行的权限:
chmod -R 777 /mydata/elasticsearch/
运行镜像:
#运行ES
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx256m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
与ES交互的端口说明:
-
9200端口
RESTful API通过HTTP通信
-
9300端口
Java客户端与ES的原生传输协议和集群交互
ES_JAVA_OPTS指定java虚拟机相关参数
- -Xms128m 初始堆内存大小为128m
- -Xmx256m 最大堆内存大小为256m
- discovery.type=single-node 设置为单点启动
ES默认占内存很大,默认占2G,所以,一般在启动时需要指定固定的内存大小,这里我们设置为 128M。
启动之后,可以查看docker 的ES进程:
[root@localhost mydata]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9c6d899522a elasticsearch:7.4.2 "/usr/local/bin/dock…" 33 seconds ago Up 11 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
docker启动时加载出现了问题,使用 docker logs
查看启动日志:
2020-08-23 15:57:39,546 main ERROR No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1097)
at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1070)
···
Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]
at org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken(XContentParserUtils.java:78)
at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:617)
... 8 more
根据错误分析原来是配置文件[elasticsearch.yml] 的host和IP中间没有空格:
echo "http.host:0.0.0.0" >>/mydata/elasticsearch/config/elasticsearch.yml
echo "http.host: 0.0.0.0" >>/mydata/elasticsearch/config/elasticsearch.yml
然后通过浏览器访问ES:http://192.168.10.10:9200/
2.2、Kibana
docker run --name kibana -e ELASTICSEARCH_URL=192.168.10.10:9200 -p 5601:5601 \
-d kibana:7.4.2
http://192.168.10.10:9200 一定要改为自己ES虚拟机的地址。
查看是否运行成功:
[root@localhost config]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbd8372062fc kibana:7.4.2 "/usr/local/bin/dumb…" 2 minutes ago Up 2 minutes 0.0.0.0:5601->5601/tcp kibana
b9c6d899522a elasticsearch:7.4.2 "/usr/local/bin/dock…" 27 hours ago Up 13 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
[root@localhost config]#
访问kibana报这样的错:
Reporting plugin self-check failed. Please check the Kibana Reporting settin
修改 es配置文件config/elasticsearch.yml,修改项如下:
cluster.name: my-application
http.host: 0.0.0.0
xpack.license.self_generated.type: basic
进入容器内部:
docker exec -it fbd8 /bin/bash
kibana 配置文件
bash-4.2$ pwd
/usr/share/kibana/config
bash-4.2$ vi kibana.yml
修改kibana.yml配置文件:
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://192.168.10.10:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
然后重启Kibana,可以看到,已经可以正常访问了哈~
3、设置开机自启动
docker是安装在虚拟机上的,我们希望在虚拟机自启动docker时,docker里边的ES,Kibana容器也可以自启动,那么需要设置开机自启动:
先查容器的container ID:
[root@localhost config]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbd8372062fc kibana:7.4.2 "/usr/local/bin/dumb…" 4 hours ago Up 3 hours 0.0.0.0:5601->5601/tcp kibana
b9c6d899522a elasticsearch:7.4.2 "/usr/local/bin/dock…" 31 hours ago Up 4 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
设置开机自启动:
docker update fbd8 --restart=always # kibana
docker update b9c6 --restart=always # elasticsearch
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)