一、Elasticsearch集群的概念(cluster)
在一个分布式系统里面,可以通过多个elasticsearch运行实例组成一个集群,这个集群里面有一个节点叫做主节点(master),elasticsearch是去中心化的,所以这里的主节点是动态选举出来的,不存在单点故障。
在同一个子网内,只需要在每个节点上设置相同的集群名,elasticsearch就会自动的把这些集群名相同的节点组成一个集群。节点和节点之间通讯以及节点之间的数据分配和平衡全部由elasticsearch自动管理。
在外部看来elasticsearch就是一个整体。
Elasticsearch 节点(node)
每一个运行实例称为一个节点,每一个运行实例既可以在同一机器上,也可以在不同的机器上。
所谓运行实例,就是一个服务器进程,在测试环境中可以在一台服务器上运行多个服务器进程,在生产环境中建议每台服务器运行一个服务器进程。
Elasticsearch索引(index)
Elasticsearch里的索引概念是名词而不是动词,在elasticsearch里它支持多个索引。
优点类似于关系数据库里面每一个服务器可以支持多个数据库是一个道理,在每一索引下面又可以支持多种类型,这又类似于关系数据库里面的一个数据库可以有多张表一样。
但是本质上和关系数据库还是有很大的区别,我们这里暂时可以这么理解。
Elasticsearch 分片(shards)
Elasticsearch 它会把一个索引分解为多个小的索引,每一个小的索引就叫做分片。
分片之后就可以把各个分片分配到不同的节点中去。
Elasticsearch副本(replicas)
Elasticsearch的每一个分片都可以有0到多个副本,而每一个副本也都是分片的完整拷贝,好处是可以用它来增加速度的同时也提高了系统的容错性。
一旦Elasticsearch的某个节点数据损坏或则服务不可用的时候,那么这个时就可以用其他节点来代替坏掉的节点,以达到高考用的目的。
Elasticsearch 的recovery概念
Elasticsearch 的recovery代表的是数据恢复或者叫做数据重新分布。
elasticsearch 当有节点加入或退出时时它会根据机器的负载对索引分片进行重新分配,当挂掉的节点再次重新启动的时候也会进行数据恢复。
Elasticsearch river
Elasticsearch river 代表的是一个数据源,这也是其它存储方式(比如:数据库)同步数据到 elasticsearch 的一个方法。
它是以插件方式存在的一个 elasticsearch 服务,通过读取 river 中的数据并把它索引到 elasticsearch 当中去,官方的 river 有 couchDB、RabbitMQ、Twitter、Wikipedia。
Elasticsearch 的 gateway 概念
gateway 代表 elasticsearch 索引的持久化存储方式,elasticsearch 默认是先把索引存放到内存中去,当内存满了的时候再持久化到硬盘里。
当这个 elasticsearch 集群关闭或者再次重新启动时就会从 gateway 中读取索引数据。
elasticsearch 支持多种类型的 gateway,有本地文件系统(默认),分布式文件系统,Hadoop 的 HDFS 和 amazon 的 s3 云存储服务。
Elasticsearch的discovery.zen概念
discovery.zen代表 elasticsearch 的自动节点发现机制,而且 elasticsearch还是一个基于 p2p 的系统。
首先它它会通过以广播的方式去寻找存在的节点,然后再通过多播协议来进行节点之间的通信,于此同时也支持点对点的交互操作。
Elasticsearch里Transport的概念
Transport代表 elasticsearch 内部的节点或者集群与客户端之间的交互方式。
默认的内部是使用 tcp 协议来进行交互的,同时它支持 http 协议(json格式)、thrift、servlet、memcached、zeroMQ等多种的传输协议(通过插件方式集成)。
Elasticsearch分布式搜索引擎架构图
说完Elasticsearch的几个基本概念后,给大伙上一张 Elasticsearch分布式搜索引擎的总体框架图:
ElasticSearch是基于Lucene开发的分布式搜索框架,包含如下特性:
- 分布式索引、搜索。
- 索引自动分片、负载均衡。
- 自动发现机器、组建集群。
- 支持Restful 风格接口。
- 配置简单等。
Elasticsearch还有丰富的第三方插件
下图是ElasticSearch的第三方插件管理工具,通过它可以很清晰的看到它索引分布的情况:哪块分布在那里,占用空间多少都可以看到,并且可以管理索引。
当某台机器挂掉的时候,整个系统会对故障机里的索引重新分配到其它机器上,当故障机重新加入到集群时,它又会重新把索引分配给它。
当然,这些规则都是可以自行根据参数进行设置的,非常灵活。
ElasticSearch是先把索引的内容保存到内存之中,当内存不够时再把索引持久化到硬盘中,同时它还有一个队列,是在系统空闲时自动把索引写到硬盘中。
Elasticsearch 后端存储方式可以有一下四种:
- 像普通的 Lucene 索引,存储在本地文件系统中。
- 存储在分布式文件系统中,如 freeds。
- 存储在 Hadoop 的 hdfs中。
- 存储在亚马逊的 S3 云平台中。
它支持插件机制,有丰富的插件:比如和 mongoDB、couchDB 同步的river 插件,分词插件,Hadoop 插件,脚本支持插件等。
欢迎转载文章进行三次加工,不用说明转载出处!
相关推荐
在深入理解Elasticsearch(简称ES)的索引原理前,我们需要先明白基本概念。ES是一种分布式全文搜索引擎,它将数据存储在索引中,这些索引类似于关系型数据库中的数据库,但具备更高的可扩展性和实时性。索引可以...
大数据技术与应用基础教学大纲 本课程大纲旨在帮助学生掌握大数据技术的基本概念、理论和实践操作,了解大数据发展...* 掌握 Elasticsearch 的一些入门操作 * 了解并基本掌握怎样利用所学的工具对目标实例进行数据分析
通过逐步讲解,读者将了解到JSX、事件监听、state、props以及列表渲染等关键概念,明白React.js如何解决这些问题,从而能够使用React.js构建简单的页面功能。 进入第二个阶段,作者深入探讨了React.js的高级特性,...
首先,我们要明白JavaScript的主要特点。它是一种解释型的、弱类型的、基于原型的语言,支持事件驱动和函数式编程。JavaScript主要运行在浏览器环境中,用于实现客户端的动态效果,与用户进行实时交互。 在...
在学习使用Box2D引擎之前,我们需要了解一下一些常用的概念: 刚体(rigid body) 一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。它们就像钻石那样坚硬。我们用物体(body)来代替刚体。 形状(shape...
在Android系统中,系统版本号和系统ID是两个重要的标识符,它们对于设备的...如果你是开发者,理解这些概念可以帮助你更好地进行应用适配和测试;如果你是普通用户,了解这些信息可以帮助你更好地理解和维护你的设备。
要正确理解ES6,首先需要明白ECMAScript与JavaScript的关系。JavaScript是Netscape公司推出的脚本语言,由于商标法的限制,ECMA(欧洲计算机制造商协会)接手JavaScript的标准化工作,并将其更名为ECMAScript,这是...
首先,我们要明白“搜索”的概念。搜索,或者说信息检索,是指通过特定的算法和技术,在大量数据中找出与查询条件相匹配的结果。在IT领域,搜索不仅局限于网页搜索,还包括文件搜索、数据库搜索、代码搜索等多个方面...
首先,我们要明白模块导入的基本概念。在ES6中,我们可以使用`import`和`export`关键字来导入和导出模块。例如: ```javascript // 导入模块 import { myFunction } from './myModule.js'; // 导出模块 export ...
7. **监控与日志**:Prometheus、Grafana用于监控服务性能,ELK Stack(Elasticsearch、Logstash、Kibana)用于收集和分析日志,帮助我们及时发现和解决问题。 8. **持续集成/持续部署(CI/CD)**:Jenkins、GitLab C...
【一般现在时】是英语语法中的一个重要概念,主要用来表达经常性的行为、习惯、状态、事实、真理以及自然规律。这一时态对于初中英语学习者来说尤其关键,因为它是最基础的时态之一,贯穿于日常对话和写作之中。 1....
首先,我们要明白"animate-client"的核心特性——使用动画GIF实现实时聊天。这不仅要求开发者具备基本的前端开发技能,还要求他们了解如何处理动态图像,尤其是GIF格式。GIF是一种支持动画的图像格式,常用于创建...
",并要求回答时名词使用复数形式,例如"There are eight.",让学生明白在询问数量时,名词需变为复数。 课程进一步解释了名词的概念,名词分为可数名词和不可数名词。可数名词指可以计数的个体,如student(学生)...
首先,我们要明白Android的物理传感器是如何工作的。Android系统提供了SensorManager服务,允许开发者访问各种硬件传感器,如加速度计、陀螺仪和磁力计等。这些传感器可以检测设备的运动和方向变化,为游戏提供实时...
首先,我们要明白3D地图的基本概念。3D地图是通过计算机图形学技术,将地理信息以三维立体的方式展现,提供更加直观、真实的视觉体验。高德地图3D功能不仅包含了传统的道路、建筑等元素,还加入了丰富的地标、路况等...
首先,我们要明白的是,"飞机大战"是一款2D飞行射击游戏,玩家通过操控一架飞机,躲避敌机的攻击并反击,目的是尽可能长时间地生存下去,同时获得更高的分数。在这个项目中,主要涉及到以下几个关键的技术点: 1. *...
Server Slide Rendering,缩写为 ssr,即服务器端渲染,因为是后端出身,所以其实早就明白是怎么回事,只是没这个具体名词的概念罢了,这个词被频繁提起也是拜近年来前端飞速发展所赐,主要针对 SPA应用,目的大概有...
首先,我们要明白塔防游戏的基本玩法和设计思路。这类游戏通常需要玩家在固定路径上建造防御塔,阻止敌人的入侵。游戏的核心在于策略和平衡,如何合理分配资源,选择合适的塔种,以及升级路径,是游戏设计的重点。 ...
首先,我们要明白Android的视图系统。在Android中,视图是用户界面的基础构建块,它负责渲染UI元素并处理用户的输入事件。视图可以是简单的元素,如按钮、文本框,也可以是复杂的组合,如自定义视图。游戏视图通常会...