5 ES集群分片副本
5.1 提高ES集群可用性
如何提高 ES 集群系统的可用性;有如下两个方面;
服务可用性:
1.2个节点的情况下,允许其中1个节点停止服务;
2.多个节点的情况下,坏的节点不能超过集群一半以上;
数据可用性
1.通过副本 replication 解决,这样每个节点上都有完备的数据。
2.如下图所示,node2上是 oldxu_index 索引的一个完整副本数据。
5.2 增大ES集群的容量
1、如何增大 ES 集群系统的容量;我们需要想办法将数据均匀分布在所有节点上;
引入分片 shard 解决;
2、什么是分片,将一份完整数据分散为多个分片存储;
2.1. 分片是 es 支持 Pb 级数据的基石
2.2 分片存储了索引的部分数据,可以分布在任意节点上
2.3 分片存在主分片和副本分片之上,副本分片主要用来实现数据的高可用
2.4 副本分片的数据由主分片同步,可以有多个,用来提高读取数据性能
注意:主分片数在索引创建时指定且后续不允许在更改;默认ES7分片数为1个
3、如下图所示:在3个节点的集群中创建
oldxu_index 索引,指定3个分片,和1个副本
# 创建索引,设定主分片和副本分片 3 1 =6
PUT /oldxu_index
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
}
# 动态修改副本分片
PUT /oldxu_index/_settings
{
"number_of_replicas": 9
}
点击more----> create index
结果展示
5.3 增加节点能否提高容量
问题:目前一共有3个ES节点,如果此时增加一个新节点是否能提高 oldxu_index 索引数据容量?
答案:不能,因为 oldxu_index 只有3个分片,已经分布在3台节点上,那么新增的第四个节点对于oldxu_index 而言是无法使用到的。所以也无法带来数据容量的提升
5.4 增加副本能否提高读性能
问题:目前一共有3个ES节点,如果增加副本数是否能提高 oldxu_index 的读吞吐量;
答案:不能,因为新增的副本还是会分布在这 node1、node2、node3 这三个节点上的,还是使用了相同的资源,
也就意味着有读请求来时,这些请求还是会分配到node1、node2、node3 上进行处理、也就意味着,还是利用了相同的硬件资源,所以不会提升读性能
如果需要增加读吞吐量性能,应该怎么来做
答案:增加读吞吐量还是需要添加节点,比如在增加三个节点 node4、node5、node6 那么将原来的 R0、R1、R2 分别迁移至新增的三个节点上,
当有读请求来时会被分配 node4、node5、node6,也就意味着有新的 CPU、内存、IO,这样就不会在占用 node1、node2、node3 的硬件资源,
那么这个时候读吞吐量才会得到真正的提升;
5.5 副本与分片总结
分片数和副本的设定很重要,需要提前规划好
1、过小会导致后续无法通过增加节点实现水平扩容;
2、设置分片过大会导致一个节点上分布过多的分片,造成资源浪费。分片过多也会影响查询性能;