分片
一、分片的创建策略
1、分片:数据的载体,类似mysql中表。
每一个分片承载了完整数据中的一部分,每一个分片都存在时,数据才是完整的
2、主分片是数据的一部分,副本分片是主分片的备份
3、7.0之后分片默认一主一副
4、分片的合理容量为10-50G
5、分片有shard reblance策略,体现了高可用
二、集群级和索引级配置
1、node.attr.rack_id:rack1
node.attr.hot_warm_cold:hot
_cat/nodeattrs?v查看节点属性信息
2、集群配置:persistent:永久性修改
transient:集群重启后失效
1 PUT _cluster/settings 2 { 3 "persistent": { 4 "cluster.routing.allocation.awareness.attributes":"rack_id" 5 } 6 }
3、索引
1 PUT product 2 { 3 "settings": { 4 "number_of_shards": 3, 5 "index.routing.allocation.include._name":"node1" 6 } 7 }
索引的setting在{}里面,集群的setting在_cluster后面
三、分片分配感知策略
基于分片感知策略进行实现的:node.attr.rack_id:rack1可以指定节点所处机架
索引d和c是指定分片感知策略后,索引b和a是指定分片感知策略前。node1和node2在机架1中,node3在机架2中
分片感知策略前和后的区别:感知后主分片不会平均分配到每个节点中,感知前主分片会平均分配到每个节点中
原因:若机架2断电不可用,感知分片前每个主分片平均到每个节点,node3中主分片挂掉导致集群不可用。
所以,分片感知策略后,node3中不会有主分片存在,机架1或机架2中一个机架挂掉后集群可用率依旧为50%
四、强制感知策略
1 PUT _cluster/settings 2 { 3 "persistent": { 4 "cluster.routing.allocation.awareness.attributes":"rack_id", 5 "cluster.routing.allocation.awareness.force.rack_id.value":"rack1,rack2" 6 7 } 8 }
上面那个机架的图中:若机架2断电不可用,若不启用强制感知策略则会触发shard rebalance,分片重新分配到机架1。此时会造成机架1中服务器超负载
若开启分片再平衡策略,当机架2不可用后不会触发分片再平衡。机架1中机器避免超负载运行