[Elasticsearch] 集群的工作原理 - 第一部分
本文翻译自Elasticsearch官方指南的life
inside a cluster一章。
ES就是为高可用和可扩展而生的。
扩展能够通过购置性能更强的server(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置很多其它的server(水平扩展或者向外扩展,Horizontal Scale/Scaling Out)来完毕。
虽然ES可以利用更强劲的硬件。垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展 - 通过向集群中加入很多其它的节点来分布负载,添加可靠性。
在大多数数据库中,水平扩展通常都须要你相应用进行一次大的重构来利用很多其它的节点。相反。ES天生就是分布式的:它知道怎样管理多个节点来完毕扩展和实现高可用性。
这也意味着你的应用不须要在乎这一点。
在本章中,我们会介绍怎样建立集群(Cluster),节点(Node)和分片(Shard)来依据你的需求完毕扩展,同一时候也可以保证即使发生硬件故障你的数据也会安然无恙。
一个空的集群
假设我们启动了一个没有不论什么数据和索引的节点(Node),我们的集群(Cluster)看起来就像以下这样:
一个节点会执行一个ES的实例。而一个集群则会包括拥有同样cluster.name的一个或者多个节点。这些节点共同工作来完毕数据共享和负载分担。
随着节点被加入到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。
集群中的一个节点会被选为主节点(Master Node)。它负责管理整个集群的变化。如创建或者删除一个索引(Index)。向集群中加入或者删除节点。主节点并不须要參与到文档级别的变化或者搜索中,这意味着尽管仅仅有一个主节点,但它并不会随着流量的添加而成为瓶颈。
不论什么节点都能够成为主节点。
在我们的样例中仅仅有一个节点,所以它就承担了主节点的功能。
对于用户,可以和集群中的随意节点进行通信,包含主节点。每一个节点都知道每份文档的存放位置,而且可以将请求转发到持有所需数据的节点。
用户通信的节点会负责将须要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。
集群健康指标(Cluster Health)
在一个ES集群中。有非常多能够被监測的统计数据,可是当中最重要的是集群健康指标。它会以green,yellow和red来报告集群的健康状态。
# Retrieve the cluster health
GET /_cluster/health
当集群中没有不论什么索引时。它会返回例如以下信息:
{
"cluster_name": "elasticsearch",
"status": "green",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}
status字段提供的值反应了集群总体的健康程度。
它的值的意义例如以下:
- green:全部的主分片(Primary Shard)和副本分片(Replica Shard)都处于活动状态
- yellow:全部的主分片都处于活动状态,可是并非全部的副本分片都处于活跃状态
- red:不是全部的主分片都处于活动状态
在本章剩下的部分中,我们会解释什么是主分片和副本分片,以及以上的几种颜色状态信息所带来的实际影响。
加入索引
为了向ES中加入数据,我们须要一个索引(Index) - 它是一个用来存储相关数据的地方。
实际上,一个索引实际上仅仅是一个"逻辑命名空间(Logical Namespace)",用来指向一个或者多个物理分片(Physical Shard)。
一个分片就是底层的"工作单元(Worker Unit)"。它拥有索引中全部数据的一部分。在分片一章中,会对分片的工作方式进行具体说明,可是就如今而言,我们仅仅须要知道一个分片就是一个Lucene的实例,一个分片本身就是一个完整的搜索引擎。
我们的文档会被存储和索引在分片中,可是应用是不会直接和分片进行交互的。相反地,应用和索引进行交互。
ES通过分片将数据分布在集群中。可以将分片想象成数据的容器。文档会被存储在分片中。而分片则会被分配到集群中的节点中。随着集群的扩大和虽小,ES会自己主动地将分片在节点之间进行迁移。以保证集群可以保持一种平衡。
一个分片可以是主分片(Primary Shard)或者副本分片(Replica Shard)。索引中的每份文档都属于一个主分片,所以主分片的数量就决定了你的索引可以存储的最大数据量。
虽然在理论上,一个主分片可以容纳的最大数据量并没有限制,可是在实际生产中这个限制是存在的。
分片的最大空间全然取决于你的用例:硬件条件,文档的大小和复杂度,怎样索引和查询文档。以及期望的响应时间。
一个副本分片则仅仅是一个主分片的拷贝。副本用来提供数据冗余,用来保护数据在发生硬件故障是不会丢失,同一时候也可以处理像搜索和获取文档这种读请求。
主分片的数量在索引建立之初就会被确定下来,而副本分片的数量则能够在不论什么时候被更改。
让我们在当前仅仅有一个节点的集群中创建一个新的blogs索引。默认情况下。索引会拥有5个主分片。可是为了演示,我们会让索引有3个主分片和1个副本分片(每一个主分片都有1个副本分片):
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
此时我们的集群就变成这样了:
这个时候我们假设检查集群的健康状态,会得到例如以下的结果:
{
"cluster_name": "elasticsearch",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 3,
"active_shards": 3,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 3
}
集群的健康状态变成了黄色,同一时候响应中还说明了有3个未被分配的分片。
黄色说明了全部的主分片都正在正常执行,处于活动状态 - 集群如今可以成功处理来自外部的请求 - 可是并非全部的副本分片都处于活动状态。实际上,全部的3个副本分片眼下都处于"未分配"的状态 - 它们不存在于不论什么节点上。这是由于将同样数据的拷贝存放在同一节点上是没有意义的。
假设我们失去了该节点。那么我们会失去全部数据和它们的拷贝。
因此当前我们的集群可以正常工作,仅仅只是抵御不了硬件故障带来的风险。
[Elasticsearch] 集群的工作原理 - 第一部分的更多相关文章
- Elasticsearch从入门到精通之Elasticsearch集群内的原理
上一章节我介绍了Elasticsearch安装与运行,本章节及后续章节将全方位介绍 Elasticsearch 的工作原理 在这个章节中,我将会再进一步介绍 cluster . node . shar ...
- Elasticsearch集群内的原理
一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力.当有节点加入集群中或者从 ...
- LVS集群之工作原理和调度算法(2)
LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...
- 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作
剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存 ...
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)
数据操作与REST API(Data manipulation with REST API) ElasticSearch REST API可用于各种任务.多亏了它,我们可以管理索引,更改实例参数,检查 ...
- 腾讯云Elasticsearch集群规划及性能优化实践
一.引言 随着腾讯云 Elasticsearch 云产品功能越来越丰富,ES 用户越来越多,云上的集群规模也越来越大.我们在日常运维工作中也经常会遇到一些由于前期集群规划不到位,导致后期业务增长集群 ...
- ES2:ElasticSearch 集群配置
ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...
- [译]使用explain API摆脱ElasticSearch集群RED苦恼(转)
"哔...哔...哗",PagerDuty的报警通知又来了. 可能是因为你又遭遇了节点宕机, 或者服务器机架不可用, 或者整个ElasticSearch集群重启了. 不管哪种情况, ...
- Elasticsearch 集群和索引健康状态及常见错误说明
之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一. ...
随机推荐
- Scala-基础-流程控制语句
import junit.framework.TestCase import scala.util.control.Breaks._ //流程控制语句 //关键字 if else match clas ...
- url-safe base64 && base64
1: 为什么需要base64? ASCII码一共规定了128个字符的编码,这128个符号,范围在[0,127]之间. 其中,[0,31],及127, 33个属于不可打印的控制字符. 在电子邮件传输信息 ...
- The user specified as a definer ('root'@'%') does not exist 解决方法
mysql> grant all privileges on *.* to root@"%" identified by "."; Query OK, r ...
- SQL删除重复数据(根据多个字段),pandas的nan存入数据库报错
delete from M_FACTOR_DATA_TEST a where (a.factor_id,a.data_date,a.stock_code) in (select factor_id,d ...
- php第二十六节课
会话购物车 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- Gym - 101550A(Artwork 倒序+并查集)
题目: 思路: 1.对输入数据离线,先把所有的黑线都画出来,统计一下剩余的白色连通块的个数,dfs过程将一个连通块放到一个集合中. 2.倒着往前消去黑线,如果当前的块A是白块就看他的四周有没有白块:有 ...
- Linux有几种安装软件的方式?????
看了Windows后台软件安装的过程,想必Linux也是这样.拿RHEL7来打比方 最开始Linux上安装软件只提供源代码,需要自己去编译源代码,拷贝库文件等 RPM 红帽软件包管理器可以自动地执行上 ...
- Python反射、异常处理
反射 :字符串到对象属性的映射 hasattr(obj,string), 判断对象obj里面是否有叫string的字段或方法 getattr(obj,string) 获取obj对象里名叫string的 ...
- NumPy 学习笔记(四)
NumPy 算术函数: 1.numpy.reciprocal(arr) 返回参数逐个元素的倒数 2.numpy.power(one, two) 将第一个输入数组中的元素作为底数,计算它与第二个输入数组 ...
- react入门----基础语法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...