美文网首页
Linux服务器集群概念辨识

Linux服务器集群概念辨识

作者: Zhang21 | 来源:发表于2017-08-11 19:31 被阅读693次

    Linux服务器集群系统各概念辨析

    计算机集群

    WEB的负载均衡、集群、高可用解决方案



    计算机集群

    计算机集群简称集群(Clusters),是一种计算机系统。它通过一组散列集成的 软件或硬件 连接起来高度紧密地协作完成计算工作。在莫种意义上,他们可以被看做是一台计算机。

    集群系统中的单个计算机通常称为节点,通常通过内网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和可靠性。

    集群分类

    集群分为同构和异构,他们区别在于 “组成集群系统的计算机之间的体系结构是否相同”。

    集群计算机按功能和结构可以分为以下几类:

    高可用性集群 HA(High-Availability clusters);

    负载均衡集群(Load Balancing clusters);

    高性能计算集群(High Performance clusters);

    网格计算(Grid Computing);

    集群技术特点

    通过多台计算机完成同一工作,达到更高的效率;

    多台主机内容、工作过程等完全一样,其中一台宕机不会影响全局;


    Linux服务器集群概念

    集群、冗余、负载均衡、主从复制、读写分离、分布式、分布式计算、分布式计算平台、并行计算......

    实际生产环境中常有的问题:

    1,当数据库性能遇到问题时,是否能够横向扩展,通过添加服务器的方式达到更高的吞吐量,从而充分利用现有的硬件实现更好的投资回报率;

    2,是否拥有实时同步的副本,当数据库面临灾难时,可以短时间内通过故障转移的方式保证数据库的可用性。此外,当数据丢失或损坏时,能否通过所谓的实时副本(热备)实现数据的零损失;

    3,数据库的横向扩展是都对应用程序透明,如果数据库的横向扩展需要应用程序端进行大量修改,则所带来的后果不仅仅是高昂的开发成本,同时也会带来很多潜在和非潜在的风险;

    集群和冗余

    集群和冗余并不对立,多台服务器做集群(不是主从),本身就有冗余和负载均衡的效果。

    狭义上来说,集群就是把多台服务器虚拟成一台服务器,而冗余的每台服务器都是独立的。

    集群的侧重点在于协同,多台服务器系统分担工作,提升效率;

    冗余的侧重点在于防止单点故障,一主多备的架构,也就是主从复制;

    数据冗余==高可用性==主从;

    主从一定程度上起到了负载均衡的作用,但主要目的还是为了保证数据冗余和高可用性;

    主从只提供一种成本较低的数据备份方案加上不完美的灾难和负载均衡,由于复制存在时间差,不能同步读,所以只是不完善的负载均衡和有损灾备;

    主从显然达不到集群的严格度,不论是 HA 还是 AA(多活并行集群),主从都达不到数据一致性的集群要求;

    主从很难严格界定是哪种模式,可以归类为:

    有一定冗余度的非一致性异步副本(不可靠不同步);

    对于没有严格一致性要求的系统,可以定制为 分担负载、查询过时报表;

    负载均衡、高可用、高性能是什么

    集群有负载均衡集群、高可用集群、高性能集群,分别侧重于抗并发,避免单点故障和大数据下的并行处理。三者也有不同的实现方法,但同时这三者又是相辅相成的。

    负载均衡集群(Load Balance clusters)

    负载均衡着重在于提供服务并发处理能力的集群。是为了消除性能瓶颈,当然也可以起到备份工作。把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求

    负载均衡运行时,一般通过一个或者多个前端负载均衡器,将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm);

    实现原理,一个负载均衡器加上一个集群实现的。负载均衡集群中有一个 分发器(调度器),我们称之为Director,它处在多台服务器上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。分摊到多个操作单元上进行执行,例如Web服务器,FTP服务器,企业关键任务服务器等,从而共同完成工作任务;

    一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性和负载均衡的特点;

    Linux虚拟服务器(LVS)项目 在Linux操作系统上提供最常用的负载均衡软件;


    高可用性集群(High Availability clusters)

    一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上.还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行;

    高可用 以提升服务在线的能力的集群;

    高可用集群主要是为了避免单点故障存在的,备机平时不参与工作。高可用集群是可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器宕机就不会对其再做转发;

    衡量标准:可用性=在线时间(在线时间+故障处理时间);

    高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份则称为备份节点。当活动节点出现问题,导致正在运行的业务不能正常运行时,备用结点此时就会侦测到,并立即接续活动节点来执行业务,从而实现业务的不中断或短暂中断;

    实现原理:利用集群管理软件,当主机故障时,备机能够自动接管主机的工作,并及时切换过去,以实现对用户的不间断服务;

    高性能集群(High Performance clusters)

    高性能着重用于处理一个海量任务;

    高性能集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一任务,所以又被称为 “并行处理集群”;

    充分利用集群中每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,如化学分析等;

    实现原理:并行处理集群试讲大人物划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工作。现在比较火的Hadoop就是使用并行处理集群;

    高可用与负载均衡有什么区别

    HA 和 LB 确实不是一个概念,解决方案的侧重点完全不同。

    HA偏重于备用资源,切机时会有业务的断开的,保证了数据的安全,但造成资源的浪费;

    LB侧重于资源的充分应用,没有主备的概念,只有资源的最大限度的加权平均应用,基本不会业务的中断;

    从目的上来说:

    HA的目的是不中断服务,LB的目的是为了提高接入能力。虽然经常放一起用,但确实是两个不同的领域;

    从功能上来说:

    HA在一条路不通的时候提供另一条路可走,而 LB 就类似于是春运时的多个窗口;

    HA 和 LB是两个概念的问题,一般来说没有谁优谁劣的标准,只有在特定的环境下,谁更适合的问题。

    向上扩展和向外扩展(单机和多机)

    向上扩展:升级当台服务器的硬件;

    缺点是在一定的范围之内它的性能是上升的趋势,但是超出范围之后就是下降的趋势,随着CPU个数的增加资源竞争性越大;

    向外扩展:增加新的服务器;

    优势是增减服务器很方便,而且没有向上扩展随着增加性能下降;

    集群管理工具

    Swarm - Docker;

    Fleet – Core OS;

    Kubernetes –谷歌;

    Mesos – Apache;

    负载均衡

    所谓负载均衡,就是把大访问量分发给不同的服务器,也就是分流请求。

    实现负载均衡的六种方法

    1,HTTP重定向协议实现负载均衡

    HTTP 重定向就是应用层的请求转发,用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群;

    优点:简单;

    缺点:性能较差;

    2,DNS域名解析负载均衡

    DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP;

    优点:交给DNS,不用我们去维护负载均衡服务器;

    缺点:当一个应用服务器挂了,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理;

    3,反向代理负载均衡

    在用户的请求到达方向代理服务器时(已到达网站机房),由于反向代理服务器根据算法转发到具体的服务器,常用的Apache,Nginx都可以充当反向代理服务器;

    优点:部署简单;

    缺点:代理服务器可能成为性能的瓶颈,特别是一次上传大文件;

    LVS集群中实现的三种IP负载均衡技术

    4,IP负载均衡

    LVS-NAT,在请求到达负载均衡器后,负载均衡器通过修改请求的目的IP地址,从而实现请求的转发,做到负载均衡;

    优点:性能更好;

    缺点:负载均衡器的带宽称为瓶颈;

    5,直接路由负载均衡

    LVS-DR,数据链路层负载均衡,在请求到达负载均衡器后,负载均衡器通过修改请求的Mac地址,从而做到负载均衡,与IP负载均衡不一样的是,当请求访问完服务器之后,直接返回客户,而无需在经过负载均衡器;

    6,IP隧道负载均衡(LVS-TUN)

    负载均衡和反向代理有什么区别

    做了反向代理才能实现负载均衡,负载均衡是做反向代理的目的之一。

    Nginx负载均衡分发请求的几种方式

    1,轮询;

    2,权重;

    3,IP-hsah

    #1,2,3是Nginx自带方法;4,5是第三方方法

    4,fair;

    5,url_hash;


    主从复制

    主从复制的作用

    主从是一种用于数据容错和灾备的高可用解决方案,而不是一种处理高并发压力的解决方案(负载均衡是用来抗并发的)

    1,主机负责查询,从机负责增删改;

    2,可以在从机上执行备份,以避免备份期间影响主机的服务;

    3,主从复制后,也可以在从机上查询,以降低主机的访问压力。但是,只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍需在主服务器查询(因为主从复制有同步延迟,所以不能保证强数据一致性);

    主从复制和读写分离的区别

    主从复制是实现读写分离的技术之一,也是实现读写分离的前提条件。

    做读写分离时最重要的就是确保 读库 写库 的数据统一,而主从复制是实现数据统一最简单的方法(并不能够保证强数据的一致性);

    读写分离,顾名思义,就是一个表只负责向前台页面展示数据,而后台管理人员对表的增删改在另一个表中,把两个表分开,就是读写分离;

    主从复制则是一个表数据 增删改 之后会及时更新到另一个表中,保证两个表的数据一致;

    实现主从复制的方法

    MySQL主从复制;

    MongoDB主从复制;

    如何减少主从复制的同步延迟

    MySQL主从数据库同步延迟问题;

    MongoDB主从数据库同步延迟问题;

    主从复制侧重点不同的几种类型

    双机热备=主机+备机;

    主要应用运行在主机,备机即备用机器。备机不工作,主机出现故障时备机接管主机的所有工作;

    双机互备=主机(备机) + 备机(主机);

    互为主备,部分应用运行于主机,部分应用运行于备机,主机备机同时工作;

    双机双工=主机+主机;

    两台主机同时运行应用,主机备机同时工作;


    分布式

    分布式与集群有什么区别

    广义上的分布式是指,将不同的服务分布在不同的服务器上;

    集群是指,将几台服务器集中在一起,实现同一业务;

    分布式中的每一个节点都可以做集群,而集群并不一定是分布式的;




    Web负载均衡、集群、高可用解决方案

    组件

    Apache,Apache软件基金会下的一个项目,Apache HTTP Server ;

    Nginx,高性能HTTP和反向代理服务器,Nginx HTTP Server;

    LVS,Linux虚拟服务器,是一个虚拟的服务器集群系统;

    HAProxy,可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常有需要会话保持或七层处理。HAProxy运行中当前的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进你当前的架构中,同时可以保护你的Web服务器不被暴露到网络上;

    Keepalived,这里说的keepalived不是Apache或者Tomcat等某个组件上的属性字段,它也是一个组件,可以实现Web服务器的高可用。它可以检测Web服务器的工作状态,如果该服务器出现故障被检测到,将其剔除服务器群中,直至正常工作后,Keepalived会自动检测到并加入到服务器群里面。实现主备服务器发生故障时IP瞬时无缝交接。它是LVS集群节点将抗检测的一个用户空间守护进程,也是LVS的引导故障转移模块(director failover)。Keepalived守护进程可以检查LVS池的状态。如果LVS服务器池当中的某一个服务器宕机了,Keepalived会通过一个setsockopt呼叫通知内核将这个节点从LVS拓扑图中移除;

    Memcached,它是一个高性能分布式内存对象缓存系统,用于对业务查询数据缓存,减轻数据库的负载,在memcached里面缓存的数据必须序列化;

    Teeracotta,是一款由美国Teeracotta公司开发的著名开源Java集群平台,支持数据的持久化、session的复制以及高可用;

    常用Web集群

    Tomcat

    Apache Tomcat是Apache基金会下开发的一个Servlet容器,提供了作为web服务器的一些特殊功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀。

    Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。其功能在于交互地浏览和修改数据,生成动态web内容。

    Tomcat更多用来做一个应用容器,管理整个Servlet的生命周期,主要用来跑Java web App。因为Java后台程序无法运行在Apache和Nginx上,他两不是Servlet容器。

    与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。Apache 和 Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但这个文本文件的内容是固定的。也就是说,无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称为静态资源。动态资源与之相反,在不同的时间、不同的客户端访问得到的内容是不相同的。

    Apache 和 Nginx 本身不支持生成动态页面,但它们可以通过其他模块来支持(如shell、Python、PHP程序来生成动态内容)。

    虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:

    动静态资源分离,运用Nginx的反向代理功能分发请求,所有动态资源的请求交个Tomcat,而静态资源的请求则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力;

    负载均衡,当也无压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理;

    Tomcat集群方案

    Apache + Tomcat;

    Nginx + Tomcat;

    Lvs + Nginx + Tomcat;

    # lvs负责集群调度,Nginx负责静态文件处理,Tomcat负责动态文件处理;

    Session复制

    在访问系统会话的过程中,用户登录系统后,不管访问系统的任何资源地址都不需要重复登录,这里面的 Servlet容易保存了该用户的会话(session)。如果两个Tomcat(A、B)提供集群服务时,用户在 A上登录,接下来的请求Web服务器根据策略分发到 B,因为B没有保存用户的会话(session)信息,不知道其登录,会跳转到登录界面。这时候我们需要让 B也保存有 A的会话,我们使用Tomcat的session复制实现或者通过其他手段让session共享。

    如果不采用 粘性session,那么我们可以采用Tomcat的session复制使所有节点Tomcat的会话相同,Tomcat使用组播技术,只要集群中一个Tomcat节点的session发生改变,会广播通知所有的Tomcat节点发生改变。

    高可用(HA)和session共享

    使用 Lvs + Keepalived 实现集群高可用,达到更健壮的LB

    我们可以做前端使用 Lvs 来做负载均衡,根据Lvs的8种调度算法,分发请求到对应的Web服务器集群上。Lvs做双机热备,通过Keepalived模块能够达到故障自动转移到备份服务器,不间断提供服务。

    Web端使用的负载均衡:

    HAProxy + Keepalived + Nginx;

    数据库集群(如MySQL):

    Lvs + Keepalived + MySQL;

    因为HAProxy和Nginx一样是工作在网络7层之上,并且HAProxy弥补了Nginx的一些缺点(如session的保持,cookie的引导),且它本身是个负责均衡软件,处理负载均衡上面必然优于Nginx。

    Lvs比较笨重,对于比较庞大的网络应用,实施比较复杂,虽然它运行在网络4层之上,仅做分发没有流量产生,但是它不能做正则处理也不能做动静分离,所以一般用 Lvs + Keepalived或heatbeat做数据库层的负载均衡。

    使用 terracotta 或 memcached 使session共享

    terracotta 是 jvm 级别的 session共享

    它基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,Terracotta只把变化的部分发送给Terracotta服务器,然后服务器把它转发给真正需要这个数据的节点,并且共享的数据对象不需要序列化。

    通过 memcached 实现内存级 session共享

    通过 memcached-session-manager(msm)插件,通过Tomcat上一定的配置,即可实现把session储存到memcached服务器上。在memcached内存中共享的对象需要序列化。

    其他方案

    通过cookie保存用户信息(一般是登录信息),每一个请求到达Web应用的时候,Web应用从cookie中取出数据进行处理(这里cookie肯定要加密);

    另一种是把用户信息的关键属性保存到数据库,这样就不需要session了。请求过来从数据库查询关键属性数据,做相应处理。缺点是加大了数据库的负载,是数据库成为集群的瓶颈。

    相关文章

      网友评论

          本文标题:Linux服务器集群概念辨识

          本文链接:https://www.haomeiwen.com/subject/eaqhrxtx.html