1、ES对复杂分布式机制的透明隐藏特性
复杂的分布式机制, 如分片机制,cluster discovery(集群发现机制),shard负载均衡,shard副本,请求路由,集群扩容,shard重分配等等全部隐藏起来了,而我们不用去关心。
2、ES的垂直扩容和水平扩容
例子:现有6台服务器,每台容纳1T数据,马上数据要增长到8T,这个时候两个方案:
(1)垂直扩容:重新购置两台服务器,每台服务器的容量是2T,替换老的两台服务器,那么现在6台服务器的总容量是4*1T+2*2T=8T
(2)水平扩容:新购置两台服务器,每台服务器的容量是1T,直接加入到集群中,那么现在的总容量是8*1T=8T(常见的)
- 垂直扩容:采购更强大的服务器,成本非常高,且有瓶颈,假设世界上最强大的服务器容量就是10T,但当你的总数据量达到5000T时,要采购多少台最强大的服务器
- 水平扩容:业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力
3、增加或减少节点时的数据rebalance
总有某台服务器的负载会重一点,承载的数据量和请求会大一点,这时如果又增加了一台服务器,es会自动根据当前的资源情况进行负载均衡
4、master节点
(1)管理es集群的元数据:比如索引的创建和删除,维护索引元数据,节点的增加和移除,维护集群的元数据
(2)默认情况下,会自动选择一台节点,作为master节点
(3)master节点不承载所有的请求,所以不会是一个单点瓶颈
5、节点对等的分布式架构
(1)节点对等:每个节点都能接收所有的请求
(2)自动请求路由
(3)响应收集
6、shard & replicaji机制再次梳理
(1)1个index包含多个shard
1个index,包含3T数据,每台服务器可以承载1T的数据,设置其primary shard有3个
(2)每个shard都是一个最小工作单元,承载部分数据,Lucene实例,完整的建立索引和处理请求的能力
(3)增减节点时,shard会自动在nodes中负载均衡
(4)primary shard 和 replica shard ,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard
(5)replica shard 是primary shard的副本,负责容错,以及承担请求负载
(6)primary shard 的数量在创建索引的时候就固定了,replica shard 的数量可以随时修改
(7)primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard
(8)primary shard 不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的总用),但是可以和其他primary shard的replica shard放在同一个节点上
7、单node环境下创建index是什么样子的
(1)单node环境下,创建一个index,有3个primary shard,3个replica shard
(2)集群status是yellow
(3)这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的
(4)集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求
PUT /test_index
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
}
}
8、2个node环境下replica shard是如何分配的
(1)replica shard分配:3个primary shard,3个replica shard,
(2)primary--->replica同步
(3)读请求:primary、shard都可以承载