目录
- 什么是ELK
- 功能分类
- 为什么选择elasticsearch(技术选型)
- 相关概念
- 和集群相关
- cluster
- shards
- replicas
- Index(相当于表)
- Document
- 元数据
- 倒排索引
- 在虚拟机里面的docker里面安装es
- 在虚拟机里面安装Kibana
什么是ELK
ELK是Elasticsearch、Logstash、Kibana三个软件首字母。
Elasticsearch: 全文检索工具。和之前学习的Solr功能是类似的。
Kibana:页面管理工具。可以通过Kibana的管理界面操作Elasticsearch
Logstash:日志收集的工具,通过此工具可以实现日志内容收集及格式转换。也就是将日志输入到这个里面,之后进行转换,再输出到Elasticsearch中,我们就可以在Elasticsearch中检索日志了。
功能分类
Elasticsearch具备两个主要功能:
搜索。功能和Solr类似。
分析。结合LogStash使用。
为什么选择elasticsearch(技术选型)
为了实现全文检索
Mysql也可以实现全文检索,但是国内很多的人不会选择,选择的主流是这个
如果数据库大的话,推荐使用elasticsearch。
Mysql为了达到查询快,使用索引,但是数据和索引是存放在磁盘上面,
Elasticsearch是索引在内存,数据在磁盘上面。
相关概念
和集群相关
cluster
集群。
Elasticsearch集群由一或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看Elasticsearch集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个Elasticsearch集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。
shards
primary shard:代表索引的主分片,Elasticsearch可以把一个完整的索引分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的Elasticsearch节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能。primary shard的数量只能在索引创建时指定,并且索引创建后不能再更改primary shard数量。
replicas
replica shard:代表索引主分片的副本,Elasticsearch可以设置多个replica shard。replica shard的作用:一是提高系统的容错性,当某个节点某个primary shard损坏或丢失时可以从副本中恢复。二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。
Index(相当于表)
索引。相当于关系型数据库中的表。其中存储若干相似结构的Document数据。如:客户索引,订单索引,商品索引等。Elasticsearch中的索引不像数据库表格一样有强制的数据结构约束,在理论上,可以存储任意结构的数据。但了为更好的为业务提供搜索数据支撑,还是要设计合适的索引体系来存储不同的数据。
Document
文档。Elasticsearch中的最小数据单元。一个Document就是一条数据,一般使用JSON数据结构表示。每个Index下的Type中都可以存储多个Document。一个Document中可定义多个field,field就是数据字段。如:学生数据({“name”:“张三”, “age”:20, “gender”:“男”})。
元数据
在Elasticsearch中所有以“_”开头的属性都成为元数据,都有着自己特定的含义。
例如:_index:表示索引
倒排索引
对数据进行分析,抽取出数据中的词条,以词条作为key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。倒排索引是Document写入Elasticsearch时分析维护的。
传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表 即为倒排索引。有了倒排索引,就能实现 o(1)时间复杂度的效率检索文章了,极大的提高了 检索效率。
在虚拟机里面的docker里面安装es
1 打开虚拟机
2 开启docker
如果docker还没有开启。需要先开始docker软件
systemctl start docker
拉取Elasticsearch镜像
docker pull elasticsearch:7.6.1
===========================================
3创建并启动容器
–name 名字为es
-d 后台启动
-p 端口号。9200restful访问端口,9300为java代码访问端口
docker run --name=es -d -p 9200:9200 -p 9300:9300 elasticsearch:6.8.4
docker run --name=es -d -p 9200:9200 -p 9300:9300 elasticsearch:7.6.1
以上就安装了es,并且进行了启动
docker logs -f es
既然已经es软件启动了,那么我们看看如何连接这个软件?
curl http://localhost:9200
执行以上的命令之后,我们可以看到返回的数据是:
{
"name" : "pkshWK7", 当前es节点的名称
"cluster_name" : "docker-cluster", 集群的名称
"cluster_uuid" : "eJsstaRaQiGwa-d82NY2dw", 集群的唯一的标识
"version" : { 里面写的是当前es版本的信息
"number" : "6.8.4", 版本
"build_flavor" : "default",
"build_type" : "docker", 当前es是docker构建的
"build_hash" : "bca0c8d",
"build_date" : "2019-10-16T06:19:49.319352Z",
"build_snapshot" : false,
"lucene_version" : "7.7.2",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search" es的广告语
}
在虚拟机里面安装Kibana
已经安装了es,我们可以使用命令进行操作了,但是我们现在想要使用界面的形式进行操作,
docker pull kibana:6.8.4
2新建并启动容器
192.168.8.142 Docker所在服务器的IP
–link es:es 中第一个es是容器名,第二个es是容器别名。设置link后才能让容器互通。
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.40.145:9200 --name kibana --link es:es -p 5601:5601 kibana:6.8.4
以上命令就启动了Kibana。并且Kibana连接了es
在浏览器输入 http://192.168.40.145:5601