网易云笔记地址:https://note.youdao.com/ynoteshare1/index.html?id=eccd97647a00e000f03069f050528d84&type=note
从我的角度来看,ES相对于mongo这种传统nosql来说,最大优点是全文搜索和扩展性了。因为mongo的性能实在也不咋地,分表之后造成的处理统计麻烦比之mysql更让人头大。而分布式可扩展的ES可以让使用者没有后顾之忧,确实感觉不错。
一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,
它们具有相同的 cluster.name ,它们协同工作,分享数据和负载。当加入新的节点或者删除
一个节点时,集群就会感知到并平衡数据。
集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如新建或
删除索引、增加或移除节点等。主节点不参与文档级别的变更或搜索,这意味着在流量增长
的时候,该主节点不会成为集群的瓶颈。任何节点都可以成为主节点。我们例子中的集群只
有一个节点,所以它会充当主节点的角色。
做为用户,我们能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于
哪个节点上,它们可以转发请求到相应的节点上。我们访问的节点负责收集各节点返回的数
据,最后一起返回给客户端。这一切都由Elasticsearch处理。
从介绍看来,有点redis的集群的意思。
集群健康
在Elasticsearch集群中可以监控统计很多信息,但是只有一个是最重要的:集群健康(cluster
health)。集群健康有三种状态: green (所有主要分片和复制分片都可用)、 yellow (所有主要分片可用,但不是所有复制分片都可用) 或 red (不是所有的主要分片都可用) 。
GET /_cluster/health
添加索引
一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一
部分。分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片
中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在
你的节点间迁移分片,以使集群保持平衡。
分片可以是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每个文档属
于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请
求,比如搜索或者从别的shard取回文档。
当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
这是三个节点的示例图
增加故障转移
启动第二个节点,配置3个复制分片
横向扩展
随着应用需求的增长,我们该如何扩展?如果我们启动第三个节点,我们的集群会重新组织
自己。均匀分配,为每个分片平均性能
继续扩展
通过修改复制分片数量来扩展分片
PUT /blogs/_settings
{
"number_of_replicas" : 2
}
从图中可以看出, blogs 索引现在有9个分片:3个主分片和6个复制分片。这意味着我们能够
扩展到9个节点,再次变成每个节点一个分片。这样使我们的搜索性能相比原始的三节点集群
增加三倍。
当然,在同样数量的节点上增加更多的复制分片并不能提高性能,因为这样做的话平均
每个分片的所占有的硬件资源就减少了(译者注:大部分请求都聚集到了分片少的节
点,导致一个节点吞吐量太大,反而降低性能),你需要增加硬件来提高吞吐量。
不过这些额外的复制节点使我们有更多的冗余:通过以上对节点的设置,我们能够承受
两个节点故障而不丢失数据。
继续扩展增加了冗余,但是降低性能。不过因为增加了分片,也有了增加硬件节点的前提。
应对故障
当node1主节点挂掉,会推举出一个活着的节点为主节点(此处选举规则不明,猜测和redis集群类似)。同事,复制分片升级为主分片