水平扩容
如何为正在增长中的应用程序按需扩容呢?
- 启动第三个节点,集群将会拥有三个节点的集群,为了分散负载而对分片进行重新分配
通过 elasticsearch-head 插件查看集群情况
集群健康值 green( 3 of 6 ):表示所有 6 个分片(包括 3 个主分片和 3 个副本分片)都在正常运行
Node 1 和 Node 2 上各有一个分片被迁移到了新的 Node 3 节点,现在每个节点上都拥有 2 个分片, 而不是之前的 3 个
- 每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片的性能将会得到提升
每个分片是一个功能完整的搜索引擎,它拥有使用一个节点上的所有资源的能力
- 当前这个拥有 6 个分 片(3 个主分片和 3 个副本分片)的索引可以最大扩容到 6 个节点,每个节点上存在一个分片,并且每个分片拥有所在节点的全部资源
# 动态调整副本
如果想要扩容超过 6 个节点怎么办呢?
分析
主分片的数目
在索引创建时就已经确定
定义了这个索引能够存储的最大数据量
实际大小取决于数据、硬件和使用场景
读操作
- 搜索和返回数据
- 可以同时被主分片或副本分片所处理
- 当拥有越多的副本分片时,也将拥有越高的吞吐量
在运行中的集群上是可以动态调整副本分片数目的,可以按需伸缩集群;把副本数从默认的 1 增加到 2
在 Postman 中,向 ES 服务器发 PUT 请求
PUT http://localhost:1001/users/_settings
1
body
{
"number_of_replicas" : 2
}
1
2
3
2
3
response
{
"acknowledged": true
}
1
2
3
2
3
users 索引现在拥有 9 个分片: 3 个主分片和 6 个副本分片
- 这意味着可以将集群扩容到 9 个节点,每个节点上一个分片
- 相比原来 3 个节点时,集群搜索性能可以提升 3 倍
通过 elasticsearch-head 插件查看集群情况
注意
- 如果只是在相同节点数目的集群上增加更多的副本分片并不能提高性能,因为每个分片从节点上获得的资源会变少。 需要增加更多的硬件资源来提升吞吐量
- 更多的副本分片数提高了数据冗余量
- 按照上面的节点配置,可以在失去 2 个节点的情况下不丢失任何数据
小结
- 更多的副本,提高了数据冗余,数据因为节点丢失的几率降低
- 更多的副本不一定会提高查询吞吐量,当 (副本数+主分片个数) <= 节点数 才能得到最大吞吐量;同时建议 节点数 <=主分片数 *(副本数+1)
Last Updated: 2022/04/10, 13:57:31