ElasticSearch架构思考(转)
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目:
- 打算处理多少数据?
- 打算处理多少搜索请求?
- 请求的复杂度是怎样?
- 每个节点有多少资源数?
- 打算建立多少索引,支持多少应用?
一个集群解决所有问题?
需要回答的问题远不止以上这些,但是第五个问题往往是容易被我们忽视的,因为单个ElasticSearch集群有能力支持多索引,也就能支持多个不同应用的使用。我们可以将公司里所有的日志都放在一个ElasticSearch集群下处理,无论是网站上的一个简单查询,还是一个非常复杂的分析。了解一个集群能支持多少个应用程序的日志需求,能帮助我们分析出合适的节点数目。
节点数与内存相关
ElasticSearch 的节点数受RAM的限制,对于某个服务器或虚拟机,我们分配的物理或虚拟内存是有限的,这样自然限制了我们分配节点的数量。
万能节点数——3
如果我们要建立一个ElasticSearch集群,一个比较合适的数字是3。为什么3?很大程度上一个集群3个节点可以防止“split-brain”出现,尽管,对于一个分布式的集群,每个节点都是对等的,但是我们仍然需要一个主节点master。这个节点承担协调自己以及其他所有节点间的通信任务。在ES中,主节点除了负责以上工作,它还会对分片与副本的存储进行优化,同时还要处理索引、写入数据和路由索引优化等问题。
三个和尚投票
当主节点master出现问题,从节点slave不能与主节点通信时,从节点会发起选举任命新的主节点,同时新的master会接管旧master的所有工作,如果旧master重新恢复并加入到集群中,新master会将原来旧的master降级为slave,这样就不会有冲突发生。所有这个过程都由ElasticSearch自己处理,使用者无需任何参与。
两个和尚投票
但是,当只有两个节点的时候,一主(master)一从(slave),如果主从直接的通信出现问题时,从节点slave会自我提升为master,但是当恢复通信时,我们就会同时有两个master。因为此时,对于原来的主节点(master)角度考虑,它认为是原来的从节点(slave)出现问题,现在仍然需要作为slave重新加入。这样,两个节点的时候,我们就出现了集群不知道将哪个节点选举为主节点的情况,也就是我们通常说的“分脑”。
为了防止这种情况的发生,第三个节点的出现会打破平衡,解决冲突问题。
三个和尚仍然存在问题
分脑的问题同样会出现在具有三或三个以上节点的集群中,为了降低发生的概率,ElasticSearch提供了一个配置 discovery.zen.minimummasternodes 它规定了在选举新的master时,一个集群下最少需要的节点数。例如,一个3节点集群,这个数字为2,2个节点可以防止单个节点在脱离集群时,将其自己选举成master,相反,它会等待直到重新加入到集群中。这个数值可以通过一个公式确定:
N/2 + 1 N的值为集群下所有节点的数目。
牺牲可用性
防止两个节点集群出现“分脑”情况有一个办法,就是将其中一个节点 node.data 的配置设置为 false,这样,这个节点就永远不会成为master,当然,这也会降低集群的可用性。
小结
对于ElasticSearch集群的节点数没有定论,ElasticSearch的工程师在Quora上也给出了他的相似意见https://www.quora.com/Whats-the-maximum-number-of-nodes-Elasticsearch-can-have-How-many-max-have-you-used-in-practice
资料
elasticsearch系列:http://www.cnblogs.com/richaaaard/category/783901.html
ElasticSearch架构思考(转)的更多相关文章
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...
- 一种基于Storm的可扩展即时数据处理架构思考
问题引入 使用storm可以方便的构建一种集群式的数据框架,并通过定义topo来实现业务逻辑. 但使用topo存在一个缺点, topo的处理能力来自于其启动时设置的worker数目,在很多情况下,我们 ...
- 写给大忙人的Elasticsearch架构与概念(未完待续)
最新版本官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html文档增删改参考https://www ...
- Elasticsearch 架构原理
为什么要学习架构? Elasticsearch的一些架构设计,对我们做性能调优.故障处理,具有非常重要的影响.下面将从Elasticsearch的准实时索引的实现.自动发现.rounting和repl ...
- Elasticsearch架构原理
架构原理 本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Ela ...
- 京东架构师:日均 5 亿查询量的ElasticSearch架构如何设计?
作者:张sir 来源:京东技术(id:jingdongjishu) 1. 背景 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数 ...
- Spark运行时的内核架构以及架构思考
一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...
- Beats:为 Beats => Logstash => Elasticsearch 架构创建 template 及 Dashboard
文章转载自:https://elasticstack.blog.csdn.net/article/details/115341977 前一段时间有一个开发者私信我说自己的 Beats 连接到 Logs ...
- 对云资源服务商资源读写的架构思考:前端代码走token
第一.统一了访问端接口.提高前端开发速度:第二统一了阿里各个产品的 数据读写模式: 第三,我们的服务器产生token时对读写规则做限制,特定的token由特定的规则产生,而不是让前端代代码去管控限制 ...
随机推荐
- Codeforces 583 DIV2 Robot's Task 贪心
原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使 ...
- BZOJ 3672 NOI 2014 购票
题面 Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市 ...
- UVA 11100 The Trip, 2007 水题一枚
题目链接:UVA - 11100 题意描述:n个旅行箱,形状相同,尺寸不同,尺寸小的可以放在尺寸大的旅行箱里.现在要求露在最外面的旅行箱的数量最少的同时满足一个旅行箱里放的旅行箱的数量最少.求出这样满 ...
- BZOJ 1188 [HNOI2007]分裂游戏
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 学习SG函数的过程中,我先看了一篇叫做 <2008-贾志豪-组合数学略述... ...
- php 经验之谈
导出excel中文名乱码(保存文件名): hpexcel导出Excel文件时有两个主要的过程: 1.定义文件名 2.填充Excel数据 这两个过程中可能会出现一些乱码问题,下面我来说一下解决办法: 解 ...
- java中的堆、栈和常量池简介
一.它们各自存放的数据类型: 堆:存放所有new出来的对象. 栈:存放基本类型的变量数据和对象的应用,对象(new出来的对象)本身并不存在栈中,而是存放在堆中或者常量池中(字符串常量对象存放在常量池中 ...
- 200多种Android动画效果的强悍框架
admin 发布于2015-10-23 14:33 363/68015 [精品推荐]200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^ 功能模块和技术方案 只 ...
- 更改VS2010 工程名的方法
哇~~~~~~~啦啦啦~~~~~~~~ 太开心了,通过不断的尝试,我终于知道怎么更改VS2010的工程名了!!! 下面分享给大家: 1.打开自己想要更改名字的工程,用ctrl+h在整个项目中把想更改的 ...
- Java中对象、对象引用、堆、栈、值传递以及引用传递的详解
Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...
- (三)初识jQuery
进入jQuery官网:http://jquery.com/ 点击Download jQuery v3.1.1--->下载最新版本的jQuery版本--->放到你需要引入jQuery的文件中 ...