垂直扩容和水平扩容介绍

垂直扩容:
所谓的垂直扩容就是升级服务器,买性能更好的,更贵的然后替换原来的服务器,这种扩容方式不推荐使用。因为单台服务器的性能总是有瓶颈的。

水平扩容:
水平扩容也称为横向扩展,很简单就是增加服务器的数量,这种扩容方式可持续性强,将众多普通服务器组织到一起就能形成强大的计算能力。水平扩容 VS 垂直扩容用一句俗语来说再合适不过了:三个臭皮匠赛过诸葛亮。

为什么用水平扩容

一般的扩容模式分为两种,一种是水平扩容,一种是垂直扩容。

假设现在6台服务器,每台服务器容纳1T的数据,马上数据量将要增长到8T的数据,这个时候有两个方案.
1.垂直扩容:重新购置两台服务器,每台服务器的容量是2T,替换老的两台服务器,那么六台服务器的总容量就是41T+22T = 8T.
2.水平扩容: 重新购置两台服务器,两台服务器的容量是1T,直接加入到集群中去,那么现在的服务器的总容量就是8*1T=8T

一般扩容方案就是水平扩容方案,因为垂直扩容成本高,然后就是有瓶颈.假设世界上最强大的服务器容量就是10T,但是当你的总数据量达到5000T的时候,你要采购多少台最强大的服务器啊.
而水平扩容是业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力

强大的服务器也很高.你配置稍微高了一点,越接近临界点那么价格越贵.

假如100T用普通的1T服务器组成,一台服务器是1万,100台服务器就是100T,价格是100万.,
而你用强大的服务器组成100T, 一台10T的强大服务器可能是50万,那么10台服务器.组成100T,价格就是500万.

水平扩容的过程分析

自定义索引shard数量的操作:

  1. PUT /student
  2. {
  3. "settings" : {
  4. "number_of_shards" : 3,
  5. "number_of_replicas" : 1
  6. }
  7. }

以上代码意味着我们创建的索引student将会分配三个primary shard和三个replica shard。

一台服务器

当我们只有一台服务器的时候,shard是怎么分布的呢?

Elasticsearch集群扩容,垂直扩容还是水平扩容 - 图1

注:P代表primary shard, R代表replica shard。明确一点在后面的描述中默认一个es节点在一台服务器上。

分析一下上面的过程,首先需要明确的两点:

1,primary shard和replica shard不能再同一台机器上,因为replica和shard在同一个节点上就起不到副本的作用了。

2,当集群中只有一个节点的时候,node1节点将成为主节点。它将临时管理集群级别的一些变更,例如新建或 删除索引、增加或移除节点等。

明确了上面两点也就很简单了,因为集群中只有一个节点,该节点将直接被选举为master节点。其次我们为student索引分配了三个shard,由于只有一个节点,所以三个primary shard都被分配到该节点,replica shard将不会被分配。此时集群的健康状况为yellow。

增加一台服务器

接着上面继续,我们增加一台服务器,此时shard是如何分配的呢?

Elasticsearch集群扩容,垂直扩容还是水平扩容 - 图2

Rebalance(再平衡),当集群中节点数量发生变化时,将会触发es集群的rebalance,即重新分配shard。Rebalance的原则就是尽量使shard在节点中分布均匀,达到负载均衡的目的。

原先node1节点上有p0、p1、p2三个primary shard,另外三个replica shard还未分配,当集群新增节点node2,触发集群的Rebalance,另外三个replica shard将被分配到node2上,即如上图所示。

此时集群中所有的primary shard和replica shard都是active(可用)状态的所以此时集群的健康状况为yellow。可见es集群的最小高可用配置就是两太服务器。

继续新增服务器

Elasticsearch集群扩容,垂直扩容还是水平扩容 - 图3

继续新增服务器,集群将再次进行Rebalance,在primary shard和replica shard不能分配到一个节点上的原则,这次rebalance同样本着使shard均匀分布的原则,将会从node1上将P1,P2两个primary shard分配到node1,node2上面,然后将node2在primary shard和replica shard不能分配到一台机器上的原则上将另外两个replica shard分配到node1和node2上面。

注意:具体的分配方式上,可能是P0在node2上面也有可能在node3上面,但是只要本着Rebalance的原则将shard均匀分布达到负载均衡即可。