1、什么是服务器集群
简单来说就是把多台服务器组合到一起按照某一个目的实现特定功能的服务器的集合,也就是服务器集群,而这些服务器都采用linux系统,那么,我们就可以把这个集群称作linux集群。
2、为什么要用到集群
比如说现在有一台服务器,现将此服务器部署为LAMP或者LNMP,并再此上架设了某站点,刚开始有2000个连接并发访问,服务器可以在3秒之内提供正常用户服务,当连接增长到3000时,服务器可以在5秒之内提供服务,相对来说,服务器响应时间越长,用户体验就会下降,当打开网站的时间超过3秒钟,可能会流失40%的用户,超过10秒,可能会流失75%以上的用户。如果说服务器在此时响应时间超过5秒,且cpu负载、带宽资源很紧张,这时就需要扩展服务器的性能来保证正常使用。接下来就说一下扩展方式。
3、cluser
(1) scale up向上扩展(垂直扩展),用性能更好的服务器取代现有性能较差的服务器,但同等比例资金投入并不能带来同等比例性能的提升,往往性能越高,代价也就越大,是性价比较低的解决方案;
(2) scale out向外扩展(横向),通过增加同类的或类似级别的服务器数量获得如容量等的提升,且向外提供一致的服务,当用户请求时,由这几台服务器中其中的某一台提供服务即可。此种方法可以达到同等投入同等性能的提升,但带来的就是管理上的问题:系统是否一致、网络拓扑搭建、系统选型、耦合度、资源共享等等。
既然想要采用向外扩展的解决方案,就需要两台以上服务器提供服务,那么连接访问到哪个服务器就需要有统一的分发器去分配资源,尽可能公平的将众多用户请求按照一定规则平均的调度多台服务器上来,这种模型类似于DNS中同一个域名有多条A记录,对应多个IP地址,从而可以轮询访问,只不过这里的分配方法有一定的规则去实现。因此,在这些服务器前段就需要一个调度器,这里的调度器就是在前端接收用户请求,后端调度给各个服务器,这个调度器就是负载均衡器(director | dispatcher | loader balancer)。
横向扩展可以带来容量相加的提升,但也是有一定上限,如果这些服务器争用一些共享资源,就可能会存在热点,所以随着服务器数量的增加,内部就会越来越混乱,性能随着服务器数量的增加就会下降的越来越严重一旦超出某个上限,可以理解为,2-3个人称为一个团队,200-300人就只能叫乌合之众。
创建集群还可能会有其他用途,比如企业里一台服务器提供某服务,则这一台服务器必然会有宕机的概率,一旦宕机就造成业务上的中断,但如果由两台或两台以上的服务器组成集群提供同样的服务,无论其中哪一台宕机,业务还是可用的,这里可以想想RAID(磁盘阵列)就可以明白了(可以算是硬盘的集群),虽然多台服务器宕机的概率是增加的,但能致使业务中断的同时宕机概率就变小了,这就保证了服务的可用性,这样组合成的集群也就是高可用集群或者是为了提高可用性的集群。
例如:如果是两台服务器组成的集群,采用的可能是主备模型(active-standby模型)或双主模型(active-actice模型)。
这里主要说一下传统的主备模型,例如A、B两台服务器,在平时使用时仅由A主机提供全部服务,而B主机持续探测A主机的heartbeat信息(探测间隔时间由其他因素综合决定),如果在几次探测时都检查到A主机未正常工作,则B主机将A主机提供的服务、IP地址、数据资源等等切换到B主机上,并且前端路由分发请求就会全部分发到B主机上,此时用户的访问可能会有短时间的间隔,但却换成功后,所有服务恢复正常。当A主机修复后,可以取代B的工作角色,也可以由B主机作为主力机,A主机作为备用机。
衡量系统的几个特性:
(1)、可扩展性(伸缩性)需要增加资源以完成更多的工作任务时能够获得的等同性价比提升;
(2)、可用性:可以理解为可用的时间比,如:一个系统的可用性除了0就是1,一年中可用性达到99%,就是有4天完全不可用,如达到99.9%,一年宕机时间就不到半天,现在可达到的最高可用性大概为99.999%,也就是5分钟左右,但是达到此种百分比所消耗的人力、物力也就投入的更多。;
(3)、性能:响应时间;
(4)、容量:在保证可接受性能的情况下能够达到的吞吐量;
(5)、最大吞吐量:基准性能测试时得出的数据指标系统容量的最大值。
通常扩展可带来性能的提升,但往往不是响应比例的提升。
作为运维人员来讲,最基本的目标就是可用,同时也是最应该关注的点,即便性能、容量、扩展都不是很好,但只要可用,就不要随便改动,稳定大于一切。系统稳定可用要比设计的多么完善要重要的多,完善也是相对的,总有更加完善的设计方案,所以保证其可用是最根本的。在稳定的基础上,如果想要扩展,减少众多主机的安装OS、系统配置,就需要运维的标准化。比如说,软件版本(如:操作系统)、应用程序版本、程序配置路径要统一,这样就减少了不必要的麻烦。在稳定的基础上,运维工作已游刃有余,下一步可以走向自动化,如:构建自动化运维系统,如出现常见问题,平台可以根据预设发现问题并第一时间解决。
那么新系统上线又是怎么处理的呢?像BAT3M这种公司是不可能全站停站维护的,这时就需要采用灰度发布,比如访问量较大,有100台主机,平均分成五份,在访问量较小的凌晨,可以80或60台主机可以正常提供服务,这样,就可以在前端调度器上下线20台主机,安装上新版本,测试上线,再下线20台,安装新版本,再上线,直至全部更新完毕,这种方式就叫做灰度式发布。如果说将此人工灰度发布变成自动化灰度发布,将新版本交给平台,让平台根据这种阶梯顺序发布。这样就用更少的人力去管理更多的服务器。
4、Linux Cluser 类型
负载均衡集群(load balancing 简称:LB):主要目标在于通过添加更多的主机来维持更多用户请求,主要用途在于扩容,也会提供一定的可用性,但可用性在此处不是主要目的;同时,由于主机是多个,可以提供较好的可用行,但是调度器是唯一的,就存在单点故障的风险(SPOF:single point of failure),一旦调度器宕机,则所有服务均不可用,所以就引用了下面的集群;
高可用集群(high availability 简称:HA):可以想象,既然调度器存在单点故障,那么可以在调度器的层面多加一台主机实现主备模型的集群,从而消除单点故障,类似于这种类型的可以提高可用性的集群就叫做高可用集群。高可用集群的目标不在于扩容、性能的提升,而主要在于实现服务在可接受的时间范围内保持可用。衡量公式:A=平均无故障时间/(平均无故障时间+平均修复时间),其中平均无故障时间所占的比例以衡量服务器的可用性,一般达到99.9%就够用了;
高性能集群(high performance 简称: HP):把众多主机组织起来能够协同完成一个较大较复杂计算的计算机集群,就叫做高性能集群;(全球最快的500个计算机可在此网站查询:www.top500.org)
分布式系统:如单一MYSQL服务器可能会存在大量高并发的读写操作,一个MYSQL服务器承载不了如此大的访问量,然而采用对MYSQL服务器做读负载均衡是可以的,但是写负载均衡是不实际的,此时就可以对数据进行切割,如果是两台服务器,100个数据,那么就可以每台50个进行分割,这些服务器集合到一起才能组合成一个完整的系统。所以说这种减轻了服务器压力,又不是为了同一目的而组织在一起的集群称为分布式系统,而此分布式系统往往也需要调度器(或叫查询路由器),为用户提供统一的入口,访问前50个数据或后50个数据则分别调度到两个服务器上。现今的众多的NOSQL都是采用分布式模式工作。同理,分布式文件系统也是基于类似方式实现的。
5、高可扩展系统
作为运维工程师来讲,设计可弹性扩展收缩的架构是非常必要的,所以构建高可扩展系统要遵循如下原则:
在系统内部尽量避免串行化和交互;(交互:系统和系统之间需要互相通讯,如电商系统的购物车里的物品是在第一个服务器中,如果两个服务器不通讯,那么访问第二个服务器就不会出现此购物车里的物品,那么要实现每次登陆都能看见此购物车里的东西就需要两个服务器之间通讯来实现同步,实际上就是内部共享集群;串行化:系统内部部分组件的运行有先后次序、有依赖关系)。
基本的就这些,如有不妥之处,望指正。
原文地址:http://cthlj.blog.51cto.com/9694348/1655104