基本概念
-
万物皆索引
-
shards: 分片,类似分表
- 允许水平分割 / 扩展你的内容容量。
- 允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
-
replicas: 副本,拓展分片失败下的高可用性
-
分配:主从服务器分配
系统架构
- 副本和本体不能放在一个node上
分布式集群
单节点集群
#PUT http://127.0.0.1:1001/users
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
- 3个分片,每个分片一个副本
- elasticsearch-head 插件(Chrome插件)查看集群情况
- 集群健康值:yellow( 3 of 6 ):表示主分片正常运行,但是副本分片没有正常运行(因为本体和副本在同一个节点,无法在节点down时保证高可用性)
多节点集群
- 加入新的节点,绿色则两个分片运行正常
- 星号表示master
- 加粗边框表示主分片,细边框为replicas
水平扩容
-
加入第三个节点
-
自动均衡
-
主分片的数目在索引创建时已确定,这个数目定义了索引能够存的最大数据量
-
改变replicas的设置
#PUT http://127.0.0.1:1001/users/_settings
{
"number_of_replicas" : 2
}
- users 索引现在拥有 9 个分片: 3 个主分片和 6 个副本分片。 这意味着我们可以将集群
扩容到 9 个节点,每个节点上一个分片。相比原来 3 个节点时,集群搜索性能可以提升3 倍
应对故障
- 关闭第一个节点,则
- 不影响服务的正常运行
- 恢复第一个节点
- 只是master切换了,恢复往初
路由计算&分片控制
- 放置规则影响查询规则
- 分片控制:可以发送请求到集群中的任一节点。每个节点都有能力处理任意请求。每个节点都知道集群中任一文档位置
- 当发送请求的时候, 为了扩展负载,更好的做法是轮询集群中所有的节点
数据写流程
- 在客户端收到成功响应时,文档变更已经在主分片和所有副本分片执行完成,变更是安全的。有一些可选的请求参数允许您影响这个过程,可能以数据安全为代价提升性能。这些选项很少使用
- consistency 参数的值可以设为:
- one :只要主分片状态 ok 就允许执行写操作。
- all:必须要主分片和所有副本分片的状态没问题才允许执行写操作。
- quorum:默认值为quorum , 即大多数的分片副本状态没问题就允许执行写操作
- timeout
- 如果没有足够的副本分片会发生什么?Elasticsearch 会等待,希望更多的分片出现。默认情况下,它最多等待 1 分钟。 如果你需要,你可以使用timeout参数使它更早终止:100是100 毫秒,30s是30秒