构建高可用web站点(四)

首先我们来了解负载均衡的概念:英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

其实负载均衡也是一个很庞大的知识体系。我也不是学习得很完善,这里就是把我自己学过的自我总结一下。分为一下几个方面:

(1)基于DNS的负载均衡

学过网络的都知道,DNS的作用主要是将域名映射为IP地址。我们可以采取多个A记录的方式来让别人访问这个网站是解析到一个IP地址来实现RR调度策略。当然对于DNS来说,比较重要的也是DNS缓存,可以让请求直接到对应的服务器上面而不需要解析。

也可以通过搭建BIND9 DNS服务器来了解DNS。

基于DNS的负载均衡的优势:1.简便  2.配置简单 3.易于调试(dig,ping,nslookup)  4.容易扩展

也有对应相关的问题:1.粘性,因为HTTP是一种无状态协议,无法将会话星系从一个请求保留到下一个请求。为了解决这个问题,你可以和每个请求一起,发送一个唯一的标识。收集你跟网站当前交互的信息,但这种做法并不完全保证你一定能回到有之前连接信息的那台服务器上。

2.处理方式,当所有高强度请求可能都跑到一台服务器上的时候就会出现很大的问题,得加以避免。

3.容错性,当有一台web服务器宕机了,基于DNS的负载均衡器是无法判别的。

(2)内容分发CDN

它采取了分布式网络缓存结构(即国际上流行的web cache技术),通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。

  CDN服务最初用于确保快速可靠地分发静态内容,这些内容可以缓存,最适合在网速庞大的网络中存储和分发,该网络在几十多个国家的十几个网络中的覆盖CDN网络服务器。

  由于动态内容必须通过互联网来传输,因此要提供快速的网络体验,以满足当今用户的要求,只能通过对互联网流量的独特视角来达到。必须使用先进技术来了解通过互联网的最佳路由,充分利用这些最佳路由,加速通过互联网协议的数据通讯,以改善用户的网络体验。

这个的实现一般是采用代理服务器来进行,下面就进行描述。

(3)使用Nginx(代理服务器)进行负载均衡

使用代理服务器转发请求,在这一层面来说,Nginx是比较优秀的,因为它可以自己处理一些静态页面缓存等功能,而且配置还是比较简单,这里给出一个例子nginx的简单配置

http

{

#设定负载均衡列表

upstream  www.zyan.cc  {

server   192.168.1.2:80;

server   192.168.1.3:80;

server   192.168.1.4:80;

server   192.168.1.5:80;

}

}

server{

#对 / 所有做负载均衡 (本机nginx采用完全转发,所有请求都转发到后端的tomcat集群)

location / {

root /var/www ;

index index.jsp index.htm index.html;

proxy_redirect off;

#保留用户真实信息

proxy_set_header Host $host;

proxy_set_header   X-Real-IP   $remote_addr;

proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass  http://backend;

}

}

Nginx主要有以下几种负载均衡算法:

静态负载均衡算法包括:轮询,比率,优先权

动态负载均衡算法包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。

静态负载均衡算法

◆轮询(Round Robin):顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

◆比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。

◆优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

动态负载均衡算法

◆最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。

◆最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

◆观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

◆预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)

◆动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。

◆动态服务器补充(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。

◆服务质量(QoS):按不同的优先级对数据流进行分配。

◆服务类型(ToS): 按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。

◆规则模式:针对不同的数据流设置导向规则,用户可自行。

这里还想提一些加速的手段:比如说Gzip压缩传送数据前对数据进行压缩。第一篇提到的多线程模型,异步选择等。

(4)对数据库进行负载均衡

在之前也说过Mysql的分布式集群的一些概念,比如说Mysql Cluster。

(5)对网络进行负载均衡

在TCP/IP上,比如数据传送过程中的数据分片和路由器的分组交换

负载均衡器:IPVS

单点故障:这里我简单的说一下Memcached单点故障的解决方法,因为在集群中,一个节点失效,可能会引发大量缓存的大量重建,这是一个比较难以接收的后果。

解决方案1:本地备份缓存

在本地放一份缓存,同时也在分布式Memcached上放一份缓存,如果当其中一台节点当机了,客户端程序直接读取本地的缓存,本地客户端维护一个HashMap即可,这样的方案虽然很简陋,但是可以满足一部分场景的需要,当你很急需的时候可以作为临时方案暂时替代一下。

解决方案2:采用缓存代理服务器

采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。这样的架构比较完善了,如果其中一台缓存代理服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性,以上描述的系统架构如图所示:

在看《大规模分布式存储系统:原理解析与架构实战》中看到了虚拟节点的方案也挺值得学习。

时间: 2024-10-11 15:49:57

构建高可用web站点(四)的相关文章

构建高可用web站点学习--前言

前言:本人对于提高web站点的访问量等的有很浓厚的兴趣,也学习了将近一年的时间,希望能总结点东西,虽然很多东西都是从书籍和资料中学习的,而不是原创,但是这是我总结的一点感悟和进行的分类吧. 本系列文章大多为谈论一些基本思想.至于代码实现和服务器的搭建和配置,可能不会涉及到,不过其中会涉及到一些基本的参数配置,所以要求对服务器的搭建和配置有基本的了解.因为搭建和配置的资料网上和书本都 很多,我在这里就能不说就不说了.免得影响文章的长度和关注的焦点. 目录结构: (一)单个服务器如何处理请求 (二)

构建高可用web站点学习(二)

web站点的缓存学习 缓存在web应用里面十分常见,也有各种各样的缓存,从请求开始一直到代码处理的阶段都可以采取缓存.下面就逐一介绍: 一.客户端缓存(浏览器和http方面) 前端页面缓存主要遵循http协议和客户端 如果响应头信息告诉缓存器不要保留缓存:请求信息需要认证或者安全加密:一个缓存的副本如果含有以下信息,内容将会被认为足够新:含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内.浏览器已经使用过缓存副本,并且在一个会话中已经检查过内容的新鲜度. Expires(过期时间)属性是h

构建高可用web站点(五)

数据库是web站点中重要的应用,放在第四篇是因为之前来不及总结的原因,在之前的文章我看到了无论是Mysql或者是nosql的一些缓存和分布式一些比较扩展性的功能.但是对于单个数据库来说,它的优化也是我们学习的重点.现在我就来简单说说我自己总结的一些东西. 关于Mysql:Mysql是web站点中应用很广泛的关系型数据库.这一块的东西也是有很多值得学习的东西,介绍的书籍也很多,比如<高性能Mysql><Mysql性能调优和架构设计><Mysql技术内幕:InnoDB引擎>

构建高可用web站点学习(一)

单个服务器如何处理请求 web服务器最简单的形式就是一个程序,它侦听HTTP请求,在收到一个HTTP请求之后做出回复.当然在接收请求后服务器所做的东西是我们关注的焦点.在下文中也会提及到node是如何简单的实现一个web服务器. 常用的是Apache,tomcat等服务器解决web请求.现在更多的人会使用Nginx解决web请求,这也有一定的道理.本文主要研究各服务器比较成熟的多任务处理方式.下文会详细的提到. Apache: 说到web应用平台,基本上第一反应都是LAMP这个经典的平台.其中A

构建高可用web站点学习(三)

分布式的构建 做为网站访问的生命线(数据访问),当然也可以采用分布式的方法来减轻单台服务器的访问压力.之前有讲过Memcached的分布式,但是Memcached服务器互不通信,所以我们也提过redis的主从分布.这篇文章主要的就是关注分布式服务器的一些基本思想. 数据库的主从分布:这里我以Mysql为例,当Mysql需要向外扩展的时候的策略则划分为三个部分:复制.拆分以及数据分片 ,而主从分布最主要关注的问题就是主库和从库间的同步.原理如下图: 大致描述一下过程:从服务器的IO线程从主服务器获

Centos6下nginx+keepalived构建高可用web集群

1)拓扑描述: 2) nginx的安装准备 pcre:兼容的正则表达式,nginx也要支持伪静态 # yum -y install pcre pcre-devel # yum -y install openssl* # mkdir -p /application/nginx1.6.2 # ln -s /application/nginx1.6.2 /application/nginx 3) 安装nginx # cd /usr/local/src # tar xf nginx-1.6.2.tar.

构建高可用的LVS负载均衡集群 入门篇

一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能. LVS 集群采用IP负载和基于内容请求分

Centos 7搭建LVS+Keepalived高可用Web服务群集

一.LVS+Keepalived高可用群集 Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器.管理服务器池,而不仅仅用作双机热备.使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性:对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入. 在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器.此博客将以DR模式的

heartbeat + httpd + nfs 实现高可用web服务器

一  环境准备 二 拓扑结构 三 前提条件 四 安装相关软件 五 配置heartbeat 六 测试web集群 七 问题汇总 八 共享存储 一 环境准备 操作系统 centos 6.4 x86_64  最小化安装 如使用yum 安装的方式 centos5.5 安装的是V2.X   ,centos 6.4 安装的是V3.X YUM 安装   Vim  man   ntp  "development tools" "server platform development"