web负载均衡

1、web负载均衡

思考:

  对于web站点的水平扩展,负载均衡是一种常见的手段,在学习实现方法之前,我们首先需要思考:

 例如:某公司的团队需要承担的工作量,开始的时候工作量较小,大家很轻松,随着任务的扩大,团队无法承担任务的完成。

  ①:外包

   团队决定将一些任务外包给别的公司,并派一个人于外部公司人进行对接,称为接口人。

  ②:接口人

   有一天,接口人生病没有来公司,这个时候就会影响公司的正常工作,直到他回来,公司才可以正常恢复工作。

   显然这位接口人非常关键,他的缺席会影响整个外包工作的正常进行,这也许是致命的,我们将这种情况称为单点故障(Single Point of Failure),如果只依赖一个因素,设备或人,就会暴露出单点故障的隐患,所以,我们应当避免单点故障。

   为此,公司给其配备了一个助理,以备当他不在的时候,助理可以继续完成工作。

  ③:工作量分配

接口人需要跟多个外部公司进行沟通,并且将工作任务储蓄不断地分配给他们,在分配任务中可能出现:

给某些公司分配了太多的任务,其中一些任务没有按时完成

有些公司比较闲,却没有及时分配任务给他们

有些公司业务差,却分配了高难度的任务,花费大量时间,还是没有完成

有些公司业务强,却分了简单的任务

这就需要接口人来优化任务分配问题,使用正确的管理方法来掌握外部公司的进度和状态,了解其负载,以帮助自己更加有效的分配任务,实现外部工作的负载均衡(Load Balancing)

  ④:风险管理

尽管我们已经避免了接口人的单点故障,降低了风险,但是外部公司依然可能出现问题,在必要的时候,我们需要将任务快速转移给别的公司,这个前提是有备用的外部公司,从避免单点故障到准备备用方案,都是降低外包工作风险的一系列措施,同时也保障了外部工作的不间断性,或者称为高可用性(High Availability .HA)

  ⑤:制约

    当工作任务更多时,接口人的工作就有点吃不消了,工作量太大的时候与外部公司进行沟通就会花费全部时间,都会制约接口人处理外部工作,因此限制了外部工作的无限扩展。因此公司决定设立更多的接口人,并分开工作。

 

 

 

2、常用负载均衡

      ①、HTTP重定向

        对于HTTP重定向,它可以将HTTP请求进行转移,在WEB开发中我们经常会用它来完成自动跳转,比如用户登录成功后跳转到相应的管理页面。这种重定向完全由HTTP定义,并且由HTTP代理和Web服务器共同实现。很简单,当HTTP代理(比如浏览器)WEB服务器请求某个URL后,这意味着HTTP代理需要继续请求这个新的URL,这便完成了自动跳转,当然,如果你自己写了一个HTTP代理,也可以不支持重定向,也就是对于WEB服务器返回的Location标记视而不见,虽然这可能不符合HTTP标准,但这完全取决于你的应用场景。也正是因为HTTP重定向具备了请求转移和自动跳转的本领,所以除了满足应用程序需要的各种自动跳转之外他可可以用于实现负载均衡,以达到WEB扩展的目的。

   ②、DNS负载均衡

     我们知道,DNS负责提供解析服务,当我们访问某个站点时,实际上首先需要通过该站点域名的DNS服务器来获取域名指向的IP地址,在这一过程中,DNS服务器完成了域名到IP地址的映射,同样,这种映射也可以使一对多的,这时候,DNS服务器便充当了负载均衡调度器(也称均衡器),它就像前面提到的重定向转移到策略一样,将用户的请求分散到多台服务器上但是他的实现机制完全不同。

   ③、反向代理负载均衡

     反向代理服务器的核心工作便是转发HTTP请求,因此它工作在HTTP层面、也就是TCP七层结构中的应用层(第七层),所以基于反向代理的负载均衡也称为七层负载均衡,实现它并不困难,目前几乎所有主流的Web服务器都热衷于支持基于反向代理的负载均衡,随后我们将进行Nginx反向代理均衡负载的实验。

   ④、IP负载均衡

     事实上,在数据链路层(第二层)、网络层(第三层)以及传输层(四层)都可以实现不同机制的负载均衡,但有所不同的是,这些负载均衡调度器的工作必须由Linux内核来完成,因为我们希望网络数据包在内核缓冲区进行进程用户地址空间之间,尽早地被转发到其他实际服务器上,没错。Linux内核当然可以办得到,位于内核的NetifilterIPVS可以解决问题,而用户空间的应用程序对此却束手无策。另一方面,也正是因为可以将调度器工作在应用层一下,这些负载均衡系统可以支持更多的网络服务协议,比如FTPSMTP DNS以及流媒体和VoIP等应用。

3、nginx+keepalive实现高可用热备负载均衡

①、规划和准备

两台相同配置的web

用途

IP

MASTER

192.168.1.100

BACKUP

192.168.1.101

②、安装

两台接入服务器分别安装Nginxkeepalive

准备依赖包:

yum -y install gcc pcre-devel zlib-devel openssl-devel

yum -y install popt-devel

下载:

wget http://nginx.org/download/nginx-1.2.4.tar.gz

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

安装Nginx

安装keepalive

tar zxvf keepslived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure

make

make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin

加入启动服务

echo “/usr/local/nginx/sbin/nginx” >> /etc/rc.local

echo “/etc/init.d/keepalived.start” >> /etc/rc.local

③、配置

⑴、配置Nginx

两台接入服务器的Nginx的配置完全一样,主要是配置/usr/local/nginx/conf/nginx.confhttp。其中多域名指向是通过虚拟主机(配置http下面的server)实现;同一域名的不同虚拟目录通过每个server下面的不同location实现:到后端的服务器在http下面配置upstream,然后在serverlocation中通过proxypass引用。要实现前面规划的接入方式,http的配置如下:

http {

    include       mime.types;

    default_type  application/octet-stream;

 

    sendfile        on;

 

    upstream dev.hysec.com {

        server 50.1.1.21:80;

    }

 

 

    upstream opslinux.com {

      ip_hash;

      server 192.168.1.102:80

      server 192.168.1.103:80

      server 192.168.1.104:80

    }

    server {

        listen       80;

        server_name  opslinux.com;

        location / {

            proxy_pass http://opslinux.com;

        }

}

 

验证方法:

首先用IP访问前表中各个应用服务器的url

再用域名和路径访问前表中各个应用系统的域名/虚拟路径

 

posted @ 2017-02-13 17:19  霓裳梦竹  阅读(197)  评论(0编辑  收藏  举报