Elasticsearch—概念、安装和配置

13.jpg

前言:

Elasticsearch是一款很火热的,很优秀的,基于lucene的开源的分布式的搜索引擎,话不多说,本篇文章主要是Elasticsearch基本概念介绍、安装和配置。


Elasticsearch的基本概念

官方文档——Basic Concepts | Elasticsearch Reference [6.4] | Elastic

我们在学习关系型数据库和服务器的时候,接触到了一些概念如:database数据库、table表、行row、列column、集群cluster等。同样,在Elasticsearch(ES)中也有类似的概念,

在Elasticsearch中有一些常用的概念:

  • 集群Cluster
  • 节点Node
  • 索引Index
  • 类型Type
  • 文档Document
  • 分片和副本Shards & Replicas

下面,让我们逐一看一下这些概念。

1.集群Cluster

集群是一个或多个节点(服务器)的集合,它们共同保存用户的整个数据,并提供跨所有节点的联合索引和搜索功能。集群由唯一名称标识,默认情况下为“elasticsearch”。

2.节点Node

节点是作为集群一部分的单个服务器,存储数据并参与群集的索引和搜索功能。

3.索引Index

索引是具有某些类似特征的文档Document的集合。索引由名称标识(必须全部小写),此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。

4.类型Type

Type是在ES6.0.0版本以前存在的概念,一个索引下允许存在不同类型的的文档,可以用Type来作为索引的逻辑类别/分区。最新版本的ES已经删除了Type这个概念,因为默认一个索引下只能存在相同类型(1种)的文档。

5.文档Document

文档是可以被索引的基本信息单元。文档以JSON格式来存储表示。一个索引下可以存储任意数量的文档。

6.分片Shards

索引可能存储大量可能超过单个节点的硬件限制的数据。例如,占用1TB磁盘空间的十亿个文档的单个索引可能不适合单个节点的磁盘,或者可能太慢而无法单独从单个节点提供搜索请求。为了解决这个问题,Elasticsearch提供了将索引细分为多个称为分片的功能。创建索引时,只需定义所需的分片数即可。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。

分片的特点:

  • 分片的机制和实现对用户而言是透明的
  • 可以横向拆分/缩放索引的内容
  • 跨分片(多个节点)分布和并行化的操作,可以提高整体性能/吞吐量

分片的分布方式以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,对用户而言是透明的。

7.副本Replicas

副本,是一种备份和防止故障的机制,因为在可能发生故障的网络/云环境中,分片/节点以某种方式脱机或因任何原因消失时,需要其他节点上存储的副本来提供内容。Elasticsearch允许将索引复制为副本。由于索引可能存在多个分片,所以对应的,副本也同样会保存相应的副本分片,所有的副本分片整体构成了一个完整的索引的「副本」。

副本的特点:

  • 副本分片永远不会和主分片分配于相同的节点上(否则发生故障时,就起不到作用了)
  • 副本分片拓展了搜索量/吞吐量,因为可以在主分片和副本分片上并行搜索。
  • 可以在创建索引时为每个索引定义分片和副本的数量。创建索引后还可以随时动态更改副本数。

默认情况下,Elasticsearch中的每个索引都分配了5个主分片和1个副本,当集群中有2个节点时,则一个索引在一个节点中必然包5个主分片,而在另一台节点中存储着此索引的「副本」,即5个副本分片。则此集群中此索引总计有10个分片。

ES中的索引、文档、字段关系总结:

可以类比MySQL中的表Table,在ES中,索引Index就相当于Mysql中的表Table;索引中的文档Document就相当于表中的一行记录Row;

在Mysql中,我们可以创建用户表、产品表、订单表,用户表中的每一行Row记录了一条用户信息,然后每一行用户信息都有更详细的记录如用户姓名、性别、年龄、电话等.....这些称为列Column;

在ES中,索引Index就相当于Mysql中的表Table,我们可以创建用户索引、产品索引、订单索引,每个索引下包含若干条文档(Document),这些文档和Table中的row类似,文档中又存在不同的字段,这些字段则类似于数据库中的Column。


Elasticsearch的安装和配置

首先,官网下载,选择相应的版本,我是mac所以此次演示都是基于mac系统的,Linux下差不多,有少许区别。Windows下可能会有一些坑....下载地址:Download Elasticsearch

下载完成后将包移到合适的位置,然后解压:

tar -xzf elasticsearch-6.4.2.tar.gz

CD到解压后的目录:

cd elasticsearch-6.4.2/

启动:

./bin/elasticsearch

启动时,不出意外会报错elasticsearch java.nio.file.AccessDeniedException:

image

如果是root用户可能报这样的错:
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root. at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:285) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) Refer to the log for complete error details.
原因:因为版本的问题,最新的版本安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。

看到这我们就知道,是当前用户的权限不够,但是又不允许root用户启动,为此需要我们新建一个用户组,这里我起名elastic:

dscl . create /Groups/elastic

在mac上,查看用户和用户组的命令和Linux不太一样,如下:
dscl . -list /Users 查看所有用户
dscl . -list /Groups 查看所有用户组
dscl . -list /Users UniqueID 查看所有用户 + 用户id
dscl . -list /Groups PrimaryGroupID 查看所有用户组+组id

新建了一个用户组:elastic后,我们可以用命令dscl . -list /Groups查看一下是否创建成功,成功以后,我们还要给这个用户组一个唯一ID,用命令:

sudo dseditgroup -o create elastic

可以赋于其一个随机ID,然后,将当前用户添加至创建好的elastic用户组:

sudo dscl . -append /Groups/elastic GroupMembership username

username是要添加至elastic组里的用户名。

我们可以用:dscl . -read /Groups/elastic查看elastic组里是否成功添加了用户:

image

可以看到elastic组里成功添加了一个用户,用户ID是501。最后,我们给当前的组下的用户username赋予权限:

sudo chown -R username:elastic /usr/local/elasticsearch-6.4.2

然后,就可以顺利启动了:

/usr/local/elasticsearch-6.4.2/bin/elasticsearch
image

启动后,我们在浏览器访问:http://127.0.0.1:9200/ 即可看到如下页面:

image

关于用户、用户组的创建和查看、chown命令以及elasticsearch安装的注意事项,参考了如下网址:
Install Elasticsearch with .zip or .tar.gz
https://jingyan.baidu.com/article/14bd256e943fa6bb6d261203.html
Elasticsearch入门教程 - Elasticsearch教程™
Elasticsearch教程(一),全程直播(小白级别) -技术博客
mac下用户|用户组的操作 - 过路打酱油的博客 - CSDN博客

你可能感兴趣的:(Elasticsearch—概念、安装和配置)