ElasticSearch入门(一)之环境的搭建

1.写在前面

今天就随着我一起来学ElasticSearch吧,今天是这个系列的博客的第一篇,我也不会打算讲的太深,主要是教大家简简单单的装一个elasticsearch,然后装一个kibana简单的操作一下elasticsearch。

2.环境的准备

elasticsearch 7.3.2
kibana 7.3.2
Ubuntu 18.04

尽量和我的环境是一样的,这样问题就会少很多,在装环境开始之前,先了解一些elasticsearch一些常用的知识。

3.引言

3.1什么是elasticsearch?

ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统

3.2什么是Elastic Stack?

Elastic Stack,前身缩写是ELK,就是ElasticSearch + LogStash + Kibana

ElasticSearch入门(一)之环境的搭建_第1张图片

ES的使用场景:

  • 网上商场,搜索商品.
  • ES配合logstash,kibana,日志分析

3.3为什么要使用elasticsearch?

假设用数据库做搜索,当用户在搜索框输入“四川火锅”时,数据库通常只能把这四个字去进行全部匹配。可是在文本中,可能会出现“推荐四川好吃的火锅”,这时候就没有结果了。

4.elasticsearch基本概念

4.1近实时(NRT)

ES是一个近实时的搜索引擎(平台),代表着从添加数据到能被搜索到只有很少的延迟。(大约是1s)

4.2文档

Elasticsearch是面向文档的,文档是所有可搜索数据的最小单元。可以把文档理解为关系型数据库中的一条记录。文档会被序列化成json格式,保存在Elasticsearch中。同样json对象由字段组成,给个字段都有自己的类型(字符串,数值,布尔,二进制,日期范围类型)。当我们创建文档时,如果不指定类型,Elasticsearch会帮我们自动匹配类型。每个文档都一个ID,你可以自己指定,也可以让Elasticsearch自动生成。json格式,支持数组/嵌套,在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。

4.3索引

索引是具有某种相似特性的文档集合。例如,您可以拥有客户数据的索引、产品目录的另一个索引以及订单数据的另一个索引。索引由一个名称(必须全部是小写)标识。在单个集群中,您可以定义任意多个索引。Index体现了逻辑空间的概念,每个索引都有自己的mapping定义,用于定义包含文档的字段名和字段类型。Index体现了物理空间的概念,索引中的数据分散在shard上。可以将其暂时理解为 MySql中的 database。

索引的mapping和setting

  1. mapping:定义文档字段的类型
  2. setting:定义不同数据的分布

4.4类型

一个索引可以有多个类型。例如一个索引下可以有文章类型,也可以有用户类型,也可以有评论类型。在一个索引中不能再创建多个类型,在以后的版本中将删除类型的整个概念。
从6.0开始,type已经被逐渐废弃。在7.0之前,一个index可以设置多个types。7.0开始一个索引只能创建一个type(_doc)

4.5节点

节点是一个Elasticsearch实例,本质上就是一个java进程,节点也有一个名称(默认是随机分配的),当然也可以通过配置文件配置,或者在启动的时候,-E node.name=node1指定。此名称对于管理目的很重要,因为您希望确定网络中的哪些服务器对应于ElasticSearch集群中的哪些节点。

在Elasticsearch中,节点的类型主要分为如下几种:

  • master eligible节点:
    每个节点启动后,默认就是master eligible节点,可以通过node.master: false 禁止master eligible可以参加选主流程,成为master节点当第一个节点启动后,它会将自己选为master节点每个节点都保存了集群的状态,只有master节点才能修改集群的状态信息
  • data节点
    可以保存数据的节点。负责保存分片数据,在数据扩展上起到了至关重要的作用
  • Coordinating 节点
    负责接收客户端请求,将请求发送到合适的节点,最终把结果汇集到一起每个节点默认都起到了Coordinating node的职责

开发环境中一个节点可以承担多个角色,生产环境中,建议设置单一的角色,可以提高性能等

4.6分片

索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能不适合单个节点的磁盘,或者速度太慢,无法单独满足单个节点的搜索请求。为了解决这个问题,ElasticSearch提供了将索引细分为多个片段(称为碎片)的能力。创建索引时,只需定义所需的碎片数量。每个分片(shard)本身就是一个完全功能性和独立的“索引”,可以托管在集群中的任何节点上。

为什么要分片?

  • 它允许您水平拆分/缩放内容量
  • 它允许您跨碎片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量

如何分配分片以及如何将其文档聚合回搜索请求的机制完全由ElasticSearch管理,并且对作为用户的您是透明的。主分片数在索引创建时指定,后续不允许修改,除非Reindex

4.7分片副本

在随时可能发生故障的网络/云环境中,非常有用,强烈建议在碎片/节点以某种方式脱机或因任何原因消失时使用故障转移机制。为此,ElasticSearch允许您将索引分片的一个或多个副本复制成所谓的副本分片,简称为副本分片。

为什么要有副本?

  • 当分片/节点发生故障时提供高可用性。因此,需要注意的是,副本分片永远不会分配到复制它的原始/主分片所在的节点上。
  • 允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索。

总而言之,每个索引可以分割成多个分片。索引也可以零次(意味着没有副本)或多次复制。复制后,每个索引将具有主分片(从中复制的原始分片)和副本分片(主分片的副本)。

可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您还可以随时动态更改副本的数量。您可以使用收缩和拆分API更改现有索引的分片数量,建议在创建索引时就考虑好分片和副本的数量。

默认情况下,ElasticSearch中的每个索引都分配一个主分片和一个副本,这意味着如果集群中至少有两个节点,则索引将有一个主分片和另一个副本分片(一个完整副本),每个索引总共有两个分片。

4.8倒排索引

文档 分词结果
Doc1 breakthrough,drug,for,schizophrenia
Doc2 new,schizophrenia,drug
Doc3 new,approach,for,treatment,of
  • DocID:出现某单词的文档ID
  • TF(词频):单词在该文档中出现的次数
  • POS:单词在文档中的位置
单词 逆向文档频率 倒排列表(DocID;TF;POS)
breakthrough 1 (1;1<1>)
drug 2 (1;1<2>)(2;1<3>)
for 2 (1;1<3>)(3;1<3>)
schizophrenia 2 (1;1<4>)(2;1<2>)
new 2 (2;1<1>)(3;1<1>)
approach 1 (3;1<2>)
treatment 1 (3;1<4>)
of 1 (3;1<5>)

5.linux ES的安装(elasticsearch-7.3.2)

  1. 下载elasticsearch-7.3.2 tar包 下载地址https://www.elastic.co/cn/downloads/elasticsearch
  2. 上传到linux的/opt目录下,解压 tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz
  3. 进入解压后的 elasticsearch-7.3.2文件夹的bin目录下 执行./elasticsearch root账户

执行结果如下:

这个错误,是因为使用root用户启动elasticsearch,elasticsearch是不允许使用root用户启动的在6.xx之前,可以通过root用户启动。但是发现黑客可以透过elasticsearch获取root用户密码,所以为了安全性,在6版本之后就不能通过root启动elasticsearch

解决方案如下:

groupadd king useradd king -g king
cd /opt
chown -R king:king elasticsearch-7.3.2

由于我们的已经有用户King了,所以这儿就只需要修改elasticsearch目录的所属者就可以,具体的如下:

ElasticSearch入门(一)之环境的搭建_第2张图片

这个时候我们再次启动一下,具体的如下:

可以发现是启动成功了,但是这个时候使用浏览器访问是无法访问的,具体的如下:

ElasticSearch入门(一)之环境的搭建_第3张图片

可以发现访问失败了,于是我们就要去修改对应配置文件了,由于我是在虚拟机上启动的,所以这儿我们先将jvm的内存调小点,具体的如下:文件的路径config/jvm.options

这两项改成512m,然后继续修改elasticsearch的配置文件,路径:config/elasticsearch.yml使它能从外部访问,具体的如下:

修改完,然后保存,然后启动对应的elasticsearch,具体的如下:

具体的问题:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] vm最大虚拟内存,max_map_count[65530]太低,至少增加到[262144]

解决办法:

vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p 使配置生效

具体的如下:

加上对应的配置项,然后保存,执行命令sysctl -p 使配置生效,具体的如下:

ElasticSearch入门(一)之环境的搭建_第4张图片

其他的问题:descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]最大文件描述符[4096]对于elasticsearch进程可能太低,至少增加到[65536]

解决办法:

vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
* 所有用户
nofile ‐ 打开文件的最大数目
noproc ‐ 进程的最大数目
soft 指的是当前系统生效的设置值
hard 表明系统中所能设定的最大值

具体的如下:

ElasticSearch入门(一)之环境的搭建_第5张图片

加上对应的配置项,然后保存。这个问题也就解决了。

其他的问题:max number of threads [2048] for user [tongtech] is too low, increase to at least [4096]用户的最大线程数[2048]过低,增加到至少[4096]

解决办法:

vim /etc/security/limits.d/90-nproc.conf
* soft nproc 4096

由于我这儿没有出现这个问题,就不加这步操作了,直接启动,具体的如下:

可以发现我们已经的启动了elasticsearch,这个时候我们外部访问一下,

注意:注意开放端口或者关闭防火墙(centos7)

  1. 查询防火墙状态:firewall-cmd --state
  2. 关闭防火墙:systemctl stop firewalld.service
  3. 开启防火墙: systemctl start firewalld.service
  4. 禁止firewall开机启动:systemctl disable firewalld.service

Ubuntu

sudo ufw disable

ElasticSearch入门(一)之环境的搭建_第6张图片

可以发现就完成了安装了。

6.elasticsearch-head 的安装

google应用商店下载插件安装(需)具体的地址是:https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm?hl=zh-CN

ElasticSearch入门(一)之环境的搭建_第7张图片

7.kibana的安装

1.下载kibana-7.3.2-linux-x86_64.tar.gz https://www.elastic.co/cn/downloads/kibana

2.上传至linux系统中并解压 tar -zxvf kibana-7.3.2-linux-x86_64.tar.gz /opt目录下面

3.vim kibana-7.3.2-linux-x86_64/config/kibana.yml修改对应的配置文件

具体的如下:

4.cd kibana-7.3.2-linux-x86_64/bin

5../kibana --allow-root运行的结果如下:

6.访问kibana,具体的结果如下:

ElasticSearch入门(一)之环境的搭建_第8张图片

至此我们所需要的工具就装完了

8.写在最后

这次的博客就简简单单的写了下elasticsearch的安装,以及对他操作的一些的工具的安装,下篇博客我会简单的介绍下elasticsearch的一些的API。

你可能感兴趣的:(elasticsearch,elasticsearch)