1.1 Linux集群涉及的核心概念及常用软件
1.1.1 什么是负载均衡高可用
事实上,我们现在一谈到Linux集群,就会涉及一个重要概念,即负载均衡高可用,这里面其实包含了两个层面,即负载均衡和高可用。那么,什么是负载均衡,什么又是高可用呢?
在解释这些专业术语之前,我们先弄明白一个小问题:为什么需要负载均衡(Load Balance,LB)?在这里先举一个例子,假如我们有一个金融资讯类的网站,只允许100个用户同时在线访问。网站上线初期,由于知名度较小,加上没有宣传,只有几个用户经常上线;后期经过宣传,知名度提升了,百度和谷歌又收录了我们的网站,这时同时在线的用户数量直线上升,甚至达到上千人;于是,网站变得异常繁忙,但网站的用户体验并不好,经常反应不过来,这时用户势必埋怨,为了不影响客户对我们的信心,一定要想办法解决这个问题。试想,如果有几台或几十台相同配置的机器,前端放一个转发器,轮流转发客户对网站的请求,每台机器都将用户数控制在100之内,那么网站的反应速度势必会大大提高;即使其中的某台服务器因为硬件故障宕机了,也不会影响用户的访问。而这个神奇的转发器就是负载均衡器。那什么是负载均衡呢?负载均衡建立在现有的网络结构之上,它提供了一种廉价、有效透明的方法来扩展网络设备和服务器的带宽,并通过增加吞吐量,加强网络数据处理能力,来提高网络的灵活性和可用性。通过负载均衡器,我们可以实现N台廉价的PC服务器并行处理,从而达到小型机或大型机的计算能力,这也是目前负载均衡如此流行的主要原因。
高可用(High Availability,HA)其实有两种不同的含义,在广义上,是指整个系统的高可用性;在狭义方面,一般指主机的冗余接管,如主机HA。如无特殊说明,本书中的HA都是指广义的高可用性。广义的高可用指的是保证整个系统不会因为某一台主机崩溃或故障损坏而发生停止服务的现象;狭义的即前面提到的主机的冗余接管。下面从最前端的负载均衡器说起。
单台负载均衡器位于网站的最前端,它起着对客户请求分流的作用,相当于整个网站或系统的入口,如果它不幸崩溃了,整个网站也会挂掉,所以这个时候就要求有一种方案,能在短时间(一般要求小于1秒)内将崩溃的负载均衡器接管过去,这称为高可用。这个时间非常短,客户完全察觉不到其中一台机器已经发生崩溃的情况。至于负载均衡器后端的Web集群、数据库集群,因为有负载均衡器的内部机制,即使是其中的某一台或两台发生问题,也不会影响整套系统的使用,这种意义上的高可用就是广义上的。
现在我们俗称的Linux集群,指的是大范围内的整套系统架构,相对于负载均衡器后端的Web集群、Resin集群或MySQL集群来说,它的涵盖面要广得多,包括了负载均衡高可用,还有各种LB的调度算法以及后端应用的健康检查等。这里为了便于区分,在提到集群(Cluster)时一般会带上前缀,比方说Web集群,那么这里所指的是后端提供相同服务的Web机器群;如果是Linux集群,那么指的是大范围的系统集群架构,希望大家不要混淆。
另外,对于集群与分布式系统的区别,这里简单跟大家解释一下。
分布式是指将不同的业务分布在不同的地方。
而Linux集群是将N台廉价的服务器集中在同一个地方,实现相同的业务;分布式系统中的每一个节点,都可以称为集群;而集群并不一定就是分布式的。
比如我们的Web应用,后端就是N台相同的Web服务器,如果其中一台服务器垮掉了,这个时候其实是不影响业务的;而分布式系统中的每一个节点都会完成不同的业务,一个节点垮掉了,那么这个业务就是不可访问的。
目前,在线上环境中应用得较多的负载均衡器硬件有F5 BIG-IP和Citrix NetScaler(现在基本上都已被软件级别的LB或Docker化部署取代,后面不会再涉及),软件有LVS、Nginx及HAProxy,高可用软件有Heartbeat、Keepalived,成熟的Linux集群架构有DNS轮询、LVS+Keepalived、Nginx/HAProxy+Keepalived及DRBD+Heartbeat。