集群
Elasticsearch用于构建高可用和可扩展的系统。
扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))
或者购买更多的服务器(横向扩展(horizontal scale or scaling out))。
- 一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name
- 一个节点(node)就是一个Elasticsearch实例
- 集群中一个节点会被选举为主节点(master),任何节点都可以成为主节点。
- 集群健康(cluster health)有三种状态:green、yellow或red。
GET /_cluster/health
颜色 | 意义 |
---|---|
green | 所有主要分片和复制分片都可用 |
yellow | 所有主要分片可用,但不是所有复制分片都可用 |
red | 不是所有的主要分片都可用 |
分片
一个分片(shard)是一个最小级别"工作单元(worker unit)"
- 主要分片(primary shard)
- 复制分片(replica shard)
- 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
- 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
分配3个主分片和一个复制分片(每个主分片都有一个复制分片)
# PUT /blogs { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }
把复制分片的数量从原来的1增加到2
# PUT /blogs/_settings { "number_of_replicas" : 2 }
- 主分片或者复制分片都可以处理读请求——搜索或文档检索,所以数据的冗余越多,我们能处理的搜索吞吐量就越大。
- 在同一个节点上保存相同的数据副本是没有必要的——如果这个节点故障了,那所有的数据副本也会丢失。
- 在单一节点上运行意味着有单点故障的风险——没有数据备份。要防止单点故障,唯一需要做的就是启动另一个节点。
只要第二个节点与第一个节点有相同的cluster.name(请看./config/elasticsearch.yml文件)
- 提升性能:扩展节点
在同样数量的节点上增加更多的复制分片并不能提高性能,因为这样做的话平均每个分片的所占有的硬件资源就减少了 (译者注:大部分请求都聚集到了分片少的节点,导致一个节点吞吐量太大,反而降低性能),你需要增加硬件来提高吞吐量。
不过这些额外的复制节点使我们有更多的冗余 —— 高可用;当杀掉一个节点,新的主节点会把复制分片升级为主分片。