elasticsearch 分片_Elasticsearch—概念、安装和配置
前言:Elasticsearch是一款很火热的,很优秀的,基于lucene的开源的分布式的搜索引擎,话不多说,本篇文章主要是Elasticsearch基本概念介绍、安装和配置。Elasticsearch的基本概念官方文档——Basic Concepts | Elasticsearch Reference [6.4] | Elastic我们在学习关系型数据库和服务器的时候,接触到了一些概念如:dat
前言:
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:
如果是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 查看所有用户 + 用户iddscl . -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组里是否成功添加了用户:
可以看到elastic组里成功添加了一个用户,用户ID是501。最后,我们给当前的组下的用户username赋予权限:
sudo chown -R username:elastic /usr/local/elasticsearch-6.4.2
然后,就可以顺利启动了:
/usr/local/elasticsearch-6.4.2/bin/elasticsearch
启动后,我们在浏览器访问:http://127.0.0.1:9200/ 即可看到如下页面:
关于用户、用户组的创建和查看、chown命令以及elasticsearch安装的注意事项,参考了如下网址:
Install Elasticsearch with .zip or .tar.gz
https://jingyan.baidu.com/article/14bd256e943fa6bb6d261203.html
Elasticsearch入门教程 - Elasticsearch教程™
Elasticsearch教程(一),全程直播(小白级别) -技术博客
mac下用户|用户组的操作 - 过路打酱油的博客 - CSDN博客
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)