Elasticsearch shard&replica机制
- 一个index 包含多个shard
例如:一个index 包含3T数据,每台服务器可以承载1T数据,设置Primay shard有3个
2. 每个shard 都是一个最小工作单元,承载部分数据,lucence实例,完整的建立索引和处理请求能力
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。
8. primary shard 不能和自己的replica shard放在同一个节点上,但可以和其他primary shard 或replica shard放在同一个节点上
- 单node环境下,创建一个Index, 有3个primary shard,3个replica shard
- 集群status 是yellow
- 这个时候,只会将3 个primary shard 分配到仅有的一个Node上去,另外3个relica shard是无法分配的
- 集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求
PUT /test_index
{
"settings":{
"number_of_shards":3,
"number_of_relicas":1
}
}
将3 个primary shard 分配到仅有的一个Node上
当集群中有另外一个节点加入,es会自动将未分配的replica shard 分配到新的节点上,并将数据同步过去
横向扩容过程:
1) 我们增加一个节点
2)primary &replica 自动负载均衡,6个shard,3 primary ,3 replica
3)每个node 有更少的shard,IO/CPU/MEMORY 资源给每个shard分配更多,每个shard性能更好
4)扩容的极限 ,6个shard,最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最佳
5)超出扩容极限,动态修改replica数量,9个shard (3 primary 6 replica) 扩容到9台机器上,比3台机器时,拥有3倍的读吞吐量
6)3台 机器的情况下,9个shard (3 primary 6 repilca ),资源是更少,但是容错性更好,最多容纳2台机器宕机,6个shard 只能容忍1台机器宕机