一、ES分布式基础
1 透明性
以下操作不需要用户关心,ES会自动实现:
- 分布式数据存储
- 数据存放在分片的位置
- 副本数据的写入
- 新加入的ES节点所属集群
- 负载均衡
- 新增副本后,分配重新分配
- 新增或减少es节点时,es集群会将数据重新分配
2 扩容方案
- 垂直扩容:使用性能更强的服务器
- 水平扩容:增加服务器数量(更多使用)
- 分片自动负载均衡,分片向空闲机器转移。
- 每个节点存储更少分片,系统资源给与每个分片的资源更多,整体集群性能提高。
- 扩容极限:节点数大于整体分片数,则必有空闲机器。
- 超出扩容极限时,可以增加副本数,如设置副本数为2,总共3*3=9个分片。9台机器同时运行,存储和搜索性能更强。容错性更好。
- 容错性:只要一个索引的所有主分片在,集群就就可以运行。
3 master节点
- 管理es集群的元数据: 创建删除索引,维护索引元数据;创建删除节点
- es会自动选择一台服务器作为master
4 节点对等
- 节点对等,每个节点都能接收所有的请求
- 自动请求路由
- 响应收集
二、分片(shard)副本(replica)机制
- 每个index包含一个或多个分片
- 每个分片都是一个最小工作单元,承载部分数据
- 增减节点时,分片会自动在nodes中负载均衡
- primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard
- replica shard是primary shard的副本,负责容错,以及承担读请求负载
- primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改
- primary shard的默认数量是1,replica默认是1,默认共有2个shard,1个primary shard,1个replica shard
- primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上
三、单节点下创建index
- 单节点环境下,创建一个index,有3个primary shard,3个replica shard
- 集群status是yellow
- 此时,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的
- 集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求
四、双节点下副分片的分配
(1)replica shard分配:3个primary shard,3个replica shard,1 node
(2)主副分片数据同步
(3)读请求:既可以读主分片上数据,也可以读取副分片上数据
五、容错机制
以3分片,2副本数,3节点为例介绍。
- 主节点宕机,自动master选举,集群为red
- replica容错:新master将replica提升为primary shard,yellow
- 重启宕机node,master copy replica到该node,使用原有的shard并同步宕机后的修改,green