垂直扩容和水平扩容介绍
垂直扩容:
所谓的垂直扩容就是升级服务器,买性能更好的,更贵的然后替换原来的服务器,这种扩容方式不推荐使用。因为单台服务器的性能总是有瓶颈的。
水平扩容:
水平扩容也称为横向扩展,很简单就是增加服务器的数量,这种扩容方式可持续性强,将众多普通服务器组织到一起就能形成强大的计算能力。水平扩容 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数量的操作:
PUT /student
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
以上代码意味着我们创建的索引student将会分配三个primary shard和三个replica shard。
一台服务器
当我们只有一台服务器的时候,shard是怎么分布的呢?
注: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是如何分配的呢?
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集群的最小高可用配置就是两太服务器。
继续新增服务器
继续新增服务器,集群将再次进行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均匀分布达到负载均衡即可。