如何基于Docker快速搭建Elasticsearch集群?

Elasticsearch 作为一个搜索引擎 , 我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息 。 所以第一步我们需要保证的就是 Elasticsearch 的高可用性 , 什么是高可用性呢?它通常是指 , 通过设计减少系统不能提供服务的时间 。 假设系统一直能够提供服务 , 我们说系统的可用性是 100% 。 如果系统在某个时刻宕掉了 , 比如某个网站在某个时间挂掉了 , 那么就可以它临时是不可用的 。 所以 , 为了保证 Elasticsearch 的高可用性 , 我们就应该尽量减少 Elasticsearch 的不可用时间
针对一个索引 , Elasticsearch 中其实有专门的衡量索引健康状况的标志 , 分为三个等级:

  • green , 绿色 。 这代表所有的主分片和副本分片都已分配 。 你的集群是 100% 可用的 。
  • yellow , 黄色 。 所有的主分片已经分片了 , 但至少还有一个副本是缺失的 。 不会有数据丢失 , 所以搜索结果依然是完整的 。 不过 , 你的高可用性在某种程度上被弱化 。 如果更多的分片消失 , 你就会丢数据了 。 所以可把 yellow 想象成一个需要及时调查的警告 。
  • red , 红色 。 至少一个主分片以及它的全部副本都在缺失中 。 这意味着你在缺少数据:搜索只能返回部分数据 , 而分配到这个分片上的写入请求会返回一个异常 。
如果你只有一台主机的话 , 其实索引的健康状况也是 yellow , 因为一台主机 , 集群没有其他的主机可以防止副本 , 所以说 , 这就是一个不健康的状态 , 因此集群也是十分有必要的 。
另外 , 既然是群集 , 那么存储空间肯定也是联合起来的 , 假如一台主机的存储空间是固定的 , 那么集群它相对于单个主机也有更多的存储空间 , 可存储的数据量也更大 。
详细了解 Elasticsearch 集群接下来我们再来了解下集群的结构是怎样的 。
首先我们应该清楚多台主机构成了一个集群 , 每台主机称作一个节点(Node) 。
如图就是一个三节点的集群:
如何基于Docker快速搭建Elasticsearch集群?文章插图
在图中 , 每个 Node 都有三个分片 , 其中 P 开头的代表 Primary 分片 , 即主分片 , R 开头的代表 Replica 分片 , 即副本分片 。 所以图中主分片 1、2 , 副本分片 0 储存在 1 号节点 , 副本分片 0、1、2 储存在 2 号节点 , 主分片 0 和副本分片 1、2 储存在 3 号节点 , 一共是 3 个主分片和 6 个副本分片 。 同时我们还注意到 1 号节点还有个 MASTER 的标识 , 这代表它是一个主节点 , 它相比其他的节点更加特殊 , 它有权限控制整个集群 , 比如资源的分配、节点的修改等等 。
这里就引出了一个概念就是节点的类型 , 我们可以将节点分为这么四个类型: