【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

news/2024/5/9 4:12:08/文章来源:https://blog.csdn.net/wm_1991/article/details/51934785

一、反向代理:Web服务器的“经纪人”

1.1 反向代理初印象

  反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

lbs

  从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发。

1.2 反向代理的作用

  ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;

  ②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

  ③实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

lb

二、初识Nginx:简单却不平凡

2.1 Nginx是神马?

  Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Source:Nginx(发音同engine x),它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。

  说到Web服务器,Apache服务器和IIS服务器是两大巨头;但是运行速度更快、更灵活的对手:Nginx 正在迎头赶上。

2.2 Nginx的应用现状

  Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。

  在国内,已经有 淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线 等多家网站使用 Nginx 作为Web服务器或反向代理服务器。

2.3 Nginx的核心特点

  (1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;

  (2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;

  (3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);

PS:对于一个Web服务器来说,首先看一个请求的基本过程:建立连接---接收数据---发送数据,在系统底层看来 :上述过程(建立连接---接收数据---发送数据)在系统底层就是读写事件

①如果采用阻塞调用的方式,当读写事件没有准备好时,必然不能够进行读写事件,那么久只好等待,等事件准备好了,才能进行读写事件,那么请求就会被耽搁 。

②既然没有准备好阻塞调用不行,那么采用非阻塞调用方式。非阻塞就是:事件马上返回,告诉你事件还没准备好呢,你慌什么,过会再来吧。好吧,你过一会,再来检查一下事件,直到事件准备好了为止,在这期间,你就可以先去做其它事情,然后再来看看事件好了没。虽然不阻塞了,但你得不时地过来检查一下事件的状态,你可以做更多的事情了,但带来的开销也是不小的。

  (4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。

①非阻塞通过不断检查事件的状态来判断是否进行读写操作,这样带来的开销很大,因此就有了异步非阻塞的事件处理机制。这种机制让你可以同时监控多个事件,调用他们是阻塞的,但可以设置超时时间,在超时时间之内,如果有事件准备好了,就返回。这种机制解决了上面阻塞调用与非阻塞调用的两个问题。

②以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里面。如果有事件准备好了,那么就去处理;如果事件返回的是EAGAIN,那么继续将其放入epoll里面。从而,只要有事件准备好了,我们就去处理它,只有当所有事件都没有准备好时,才在epoll里面等着。这样,我们就可以并发处理大量的并发了,当然,这里的并发请求,是指未处理完的请求,线程只有一个,所以同时能处理的请求当然只有一个了,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价,你可以理解为循环处理多个准备好的事件,事实上就是这样的。

③与多线程方式相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级,并发数再多也不会导致无谓的资源浪费(上下文切换)。对于IIS服务器,每个请求会独占一个工作线程,当并发数上到几千时,就同时有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战:因为线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,自然性能就上不去,从而导致在高并发场景下性能下降严重。

总结:通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级。 

  (5)Master/Worker结构:一个master进程,生成一个或多个worker进程。

PS:Master-Worker设计模式核心思想是将原来串行的逻辑并行化,并将逻辑拆分成很多独立模块并行执行。其中主要包含两个主要组件Master和Worker,Master主要将逻辑进行拆分,拆分为互相独立的部分,同时维护了Worker队列,将每个独立部分下发到多个Worker并行执行,Worker主要进行实际逻辑计算,并将结果返回给Master。

问:nginx采用这种进程模型有什么好处?

答:采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,Master进程则很快重新启动新的Worker进程。当然,Worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前Worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

  (6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

  (7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。

  (8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

  (9)稳定性高:用于反向代理,宕机的概率微乎其微。

三、构建实战:Nginx+IIS构筑Web服务器集群的负载均衡

  这里我们主要在Windows环境下,通过将同一个Web网站部署到不同服务器的IIS上,再通过一个统一的Nginx反响代理服务器对外提供统一访问接入,实现一个最简化的反向代理和负载均衡服务。但是,受限于实验条件,我们这里主要在一台计算机上进行反向代理、IIS集群的模拟,具体的实验环境如下图所示:我们将nginx服务和web网站都部署在一台计算机上,nginx监听http80端口,而web网站分别以不同的端口号(这里是8050及8060)部署在同一个IIS服务器上,用户访问localhost时,nginx作为反向代理将请求均衡地转发给两个IIS中不同端口的Web应用程序进行处理。虽然实验环境很简单而且有限,但是对于一个简单的负载均衡效果而言,本文是可以达到并且展示的。

3.1 准备一个ASP.NET网站部署到IIS服务器集群中

  (1)在VS中新建一个ASP.NET Web应用程序,但是为了在一台计算机上展示效果,我们将这个Web程序复制一份,并修改两个Web程序的Default.aspx,让其的首页显示不同的一点信息。这里Web1展示的是“The First Web:”,而Web2展示的则是“The Second Web”。

  (2)调试运行,看看两个网站的效果如何?

  ①Web1的展示效果:

  ②Web2的展示效果:

  ③部署到IIS中,分配不同的端口号:这里我选择了Web1:8050,Web2:8060

  (3)总结:在真实环境中,构建Web应用服务器集群的实现是将同一个Web应用程序部署到Web服务器集群中的多个Web服务器上

3.2 下载Nginx并部署到服务器中作为自启动的Windows服务

  (1)到Nginx官网下载Nginx的Windows版本:http://nginx.org/en/download.html(这里我们使用nginx/Windows-1.4.7版本进行实验,本文底部有下载地址)

  (2)解压到磁盘任意目录,例如这里我解压到了:D:\Servers\nginx-1.4.7

  (3)启动、停止和重新加载服务:通过cmd以守护进程方式启动nginx.exe:start nginx.exe,停止服务:nginx -s stop,重新加载配置:nginx -s  reload

  (4)每次以cmd方式启动Nginx服务不符合实际要求,于是我们想到将其注册为Windows服务,并设置为自动启动模式。这里,我们使用一个不错的小程序:“Windows Service Wrapper”,将nginx.exe注册为Windows服务,具体的步凑如下:

  ①下载最新版的 Windows Service Wrapper 程序,比如我下载的名称是 "winsw-1.8-bin.exe"(本文底部有下载地址),然后把它命名成你想要的名字(比如: "nginx-service.exe",当然,你也可以不改名)

  ②将重命名后的 nginx-service.exe 复制到 nginx 的安装目录(比如,我这里是 "D:\Servers\nginx-1.4.7")

  ③在同一个目录下创建一个Windows Service Wrapper 的XML配置文件,名称必须与第一步重命名时使用的名称一致(比如我这里是 "nginx-service.xml",  如果,你没有重命名,则应该是 "winsw-1.8-bin.xml"),这个XML的内容如下:

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>Nginx Service</name>
<description>High Performance Nginx Service</description>
<executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>
<logpath>D:\Servers\nginx-1.4.7\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p D:\Servers\nginx-1.4.7</startargument>
<stopargument>-p D:\Servers\nginx-1.4.7 -s stop</stopargument>
</service>
复制代码

  ④在命令行下执行以下命令,以便将其注册成Windows服务:nginx-service.exe install

  ⑤接下来就可以在Windows服务列表看到Nginx服务了,这里我们可以将其设置为自动启动了:

  (5)总结:在Windows环境中,要对外提供的Windows服务一般都要将其启动类型设置为自动

3.3 修改Nginx核心配置文件nginx.conf

  (1)进程数与每个进程的最大连接数:

•nginx进程数,建议设置为等于CPU总核心数
•单个进程最大连接数,那么该服务器的最大连接数=连接数*进程数

  (2)Nginx的基本配置:

•监听端口一般都为http端口:80;
•域名可以有多个,用空格隔开:例如 server_name www.ha97.com ha97.com;

  (3)负载均衡列表基本配置:

    •location / {}:对aspx后缀的进行负载均衡请求,假如我们要对所有的aspx后缀的文件进行负载均衡时,可以这样写:location ~ .*\.aspx$ {}

    •proxy_pass:请求转向自定义的服务器列表,这里我们将请求都转向标识为http://cuitccol.com的负载均衡服务器列表;

    •在负载均衡服务器列表的配置中,weight是权重,可以根据机器配置定义权重(如果某台服务器的硬件配置十分好,可以处理更多的请求,那么可以为其设置一个比较高的weight;而有一台的服务器的硬件配置比较差,那么可以将前一台的weight配置为weight=2,后一台差的配置为weight=1)。weigth参数表示权值,权值越高被分配到的几率越大;

  (4)总结:最基本的Nginx配置差不多就是上面这些内容,当然仅仅是最基础的配置(详细的配置内容请下载底部的nginx-1.4.7详细查看)

3.4 添加Nginx对于静态文件的缓存配置

  为了提高响应速度,减轻真实服务器的负载,对于静态资源我们可以在反向代理服务器中进行缓存,这也是反向代理服务器的一个重要的作用。

  (1)缓存静态资源之图片文件

  root /nginx-1.4.7/staticresources/image:对于配置中提到的jpg/png等文件均定为到/nginx-1.4.7/staticresources/image文件夹中进行寻找匹配并将文件返回;

  expires 7d:过期时效为7天,静态文件不怎么更新,过期时效可以设大一点,如果频繁更新,则可以设置得小一点;

  TIPS:下面的样式、脚本缓存配置同这里一样,只是定位的文件夹不一样而已,不再赘述。

  (2)缓存静态资源之样式文件

  (3)缓存静态资源之脚本文件

  (4)在nginx服务文件夹中创建静态资源文件夹,并要缓存的静态文件拷贝进去:这里我主要将Web程序中用到的image、css以及js文件拷贝了进去;

  (5)总结:通过配置静态文件的缓存设置,对于这些静态文件的请求可以直接从反向代理服务器中直接返回,而无需再将这些静态资源请求转发到具体的Web服务器进行处理了,可以提高响应速度,减轻真实Web服务器的负载压力

3.5 简单测试Nginx反向代理实现负载均衡效果

  (1)第一次访问http://localhost/Default.aspx时从127.0.0.1:8050处理响应返回结果

  (2)第二次访问http://localhost/Default.aspx时从127.0.0.1:8060处理响应返回结果

  (3)多次访问http://localhost/Default.aspx时的截屏:

学习小结

  在本文中,借助了Nginx这个神器简单地在Windows环境下搭建了一个反向代理服务,并模拟了一个IIS服务器集群的负载均衡效果。从这个DEMO中,我们可以简单地感受到反向代理为我们所做的事情,并体会负载均衡是怎么一回事。但是,在目前大多数的应用中,都会将Nginx部署在Linux服务器中,并且会做一些针对负载均衡的优化配置,这里我们所做的仅仅就是一个小小的使用而已(just修改一下配置文件)。不过,万丈高楼平地起,前期的小小体会,也会帮助我们向后期的深入学习奠定一点点的基础。

  突然在QQ空间里看到了朋友送的礼物,猛然发现今天居然是我的阳历生日,好吧,我祝我自己生日快乐,希望自己在未来的日子中能够做更多的实践,分享更多的内容。当然,如果你觉得本文还可以,那也麻烦点个赞,不要吝啬你的鼠标左键哟。


【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

一、负载均衡:必不可少的基础手段

1.1 找更多的牛来拉车吧

  当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。

古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车

load balance

  在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。

1.2 负载均衡的类型

  负载均衡可以采用硬件设备(例如常常听见的F5),也可以采用软件负载。

  商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软件负载;

  软件负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)。

传送门->关于负载均衡的实现方式类型等介绍请浏览我的另一篇博文:《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

二、初识LVS:Linux Virtual Server

2.1 LVS是神马东西

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

2.2 LVS有神马作用

  LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

  LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。

2.3 LVS的体系结构

  使用LVS架设的服务器集群系统有三个部分组成:

  (1)最前端的负载均衡层,用Load Balancer表示;

  (2)中间的服务器集群层,用Server Array表示;

  (3)最底端的数据共享存储层,用Shared Storage表示;

  在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

传送门->关于体系结构的详细介绍,请浏览南飞蚂蚁的blog:http://ixdba.blog.51cto.com/2895551/552947

2.4 LVS负载均衡机制

  (1)LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

  (2)LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

  ①NAT模式:网络地址转换

NAT

  NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

  ②DR模式:直接路由

DR

  DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

  (3)DR负载均衡模式数据分发过程中不修改IP地址,只修改mac地址,由于实际处理请求的真实物理IP地址和数据请求目的IP地址一致,所以不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。因此,DR模式具有较好的性能,也是目前大型网站使用最广泛的一种负载均衡手段。

三、构建实战:LVS+Keepalived实现负载均衡

3.1 实验结构总览

  (1)本次基于VMware Workstation搭建一个四台Linux(CentOS 6.4)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台为主机,另一台为备机),另外两台作为真实的Web服务器(向外部提供http服务,这里仅仅使用了CentOS默认自带的http服务,没有安装其他的类似Tomcat、Jexus服务)。

  (2)本次实验基于DR负载均衡模式,设置了一个VIP(Virtual IP)为192.168.80.200,用户只需要访问这个IP地址即可获得网页服务。其中,负载均衡主机为192.168.80.100,备机为192.168.80.101。Web服务器A为192.168.80.102,Web服务器B为192.168.80.103。

3.2 基础准备工作

  以下工作针对所有服务器,也就是说要在四台服务器中都要进行配置:

  (1)绑定静态IP地址

  命令模式下可以执行setup命令进入设置界面配置静态IP地址;x-window界面下可以右击网络图标配置;配置完成后执行service network restart重新启动网络服务;

  验证:执行命令ifconfig

  (2)设定主机名

  ①修改当前会话中的主机名,执行命令hostname xxxx (这里xxxx为你想要改为的名字)

  ②修改配置文件中的主机名,执行命令vi /etc/sysconfig/network (√一般需要进行此步凑才能永久更改主机名)

  验证:重启系统reboot

  (3)IP地址与主机名的绑定

  执行命令vi /etc/hosts,增加一行内容,如下(下面的从节点以你自己的为主,本实验搭建了两个从节点):

  192.168.80.100 lvs-master

  192.168.80.101 lvs-slave

  #下面是本次试验的两个真实服务器节点

  192.168.80.102 lvs-webserver1

  192.168.80.103 lvs-webserver2

  保存后退出

  验证:ping lvs-master

  (4)关闭防火墙

  ①执行关闭防火墙命令:service iptables stop

      验证:service iptables stauts

  ②执行关闭防火墙自动运行命令:chkconfig iptables off

  验证:chkconfig --list | grep iptables

3.3 配置两台Web服务器

  以下操作需要在角色为Web服务器的两台中进行,不需要在负载均衡服务器中进行操作:

  (1)开启http服务

  命令:service httpd start

  补充:chkconfig httpd on -->将httpd设为自启动服务

  (2)在宿主机访问Web网页,并通过FTP工具上传自定义网页:这里上传一个静态网页,并通过更改其中的html来区别两台Web服务器,以下图所示为例,其中一台显示from 192.168.80.102,而另一台显示from 192.168.80.103;

  (3)编辑realserver脚本文件

  ①进入指定文件夹:cd /etc/init.d/

  ②编辑脚本文件:vim realserver

复制代码
SNS_VIP=192.168.80.200
/etc/rc.d/init.d/functions
case "$1" in
start)ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP/sbin/route add -host $SNS_VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;
stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;
*)echo "Usage: $0 {start|stop}"exit 1
esac
exit 0
复制代码

  这里我们设置虚拟IP为:192.168.80.200

  ③保存脚本文件后更改该文件权限:chmod 755 realserver

  ④开启realserver服务:service realserver start

3.4 配置主负载服务器

  (1)安装Keepalived相关包

yum install -y keepalived

  在CentOS下,通过yum install命令可以很方便地安装软件包,但是前提是你的虚拟机要联网;

  (2)编辑keepalived.conf配置文件

  ①进入keepalived.conf所在目录:cd /etc/keepalived

  ②首先清除掉keepalived原有配置:> keepalived.conf

  ③重新编辑keepalived配置文件:vi keepalived.conf

复制代码
global_defs {  notification_email {  edisonchou@hotmail.com  }  notification_email_from sns-lvs@gmail.com  smtp_server 192.168.80.1  smtp_connection_timeout 30router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}  
vrrp_instance VI_1 {  state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          interface eth1  #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51  #虚拟路由编号,主备要一致priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    advert_int 1  #检查间隔,默认为1sauthentication {  auth_type PASS  auth_pass 1111  }  virtual_ipaddress {  192.168.80.200  #定义虚拟IP(VIP)为192.168.2.33,可多设,每行一个}  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.80.200 80 {  delay_loop 6 # 设置健康检查时间,单位是秒                    lb_algo wrr # 设置负载调度的算法为wlc                   lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   nat_mask 255.255.255.0                persistence_timeout 0          protocol TCP                  real_server 192.168.80.102 80 {  # 指定real server1的IP地址weight 3   # 配置节点权值,数字越大权重越高              TCP_CHECK {  connect_timeout 10         nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }  real_server 192.168.80.103 80 {  # 指定real server2的IP地址weight 3  # 配置节点权值,数字越大权重越高  TCP_CHECK {  connect_timeout 10  nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }  
} 
复制代码

  (3)开启keepalived服务

service keepalived start

3.5 配置从负载服务器

  从负载服务器与主负载服务器大致相同,只是在keepalived的配置文件中需要改以下两处:

  (1)将state由MASTER改为BACKUP

  (2)将priority由100改为99

复制代码
vrrp_instance VI_1 {  state BACKUP # 这里改为BACKUPinterface eth1  virtual_router_id 51  priority 99 # 这里改为99,master优先级是100advert_int 1  authentication {  auth_type PASS  auth_pass 1111  }  virtual_ipaddress {  192.168.80.200  }  
}  
复制代码

3.6 验证性测试

  (1)指定请求的均衡转发:因为两个Web服务器的权重都一样,所以会依次转发给两个Web服务器;

  (2)Web服务器发生故障时:

  ①A发生故障后,只从B获取服务;

  这里模拟192.168.80.102发生故障,暂停其http服务:service httpd stop

  再来看看这时从外部访问VIP时,便会只从192.168.80.103获取网页:

  ②A故障修复后,又从A获取服务;

  这里模拟192.168.80.102修复完成,重启其http服务:service httpd start

  再来看看这时从外部访问VIP,又可以从192.168.80.102获取网页:

  (3)主负载均衡服务器发生故障时,备机立即充当主机角色提供请求转发服务:

  这里模拟192.168.80.100发生故障,暂停其keepalived服务:service keepalived stop

  再来看看这时从外部访问VIP,还是可以正常获取网页:

学习小结

  LVS是目前广为采用的软件负载均衡解决方案,在一些大型企业级系统及互联网系统中应用。本次,简单地了解了一下LVS,并在Linux下搭建了一个小小的测试环境,借助Keepalived实现了一个最小化的负载均衡测试环境。LVS是一个可以工作在网络第四层的负载均衡软件,因此它相对于Nginx一类工作在第七层的负载均衡软件有着无可比拟的性能优势,而且它还是我国的章文嵩博士(现在阿里的副总裁,淘宝的技术专家)作为创始人发起的,现已经成为Linux内核的组成部分。

  当然,目前流行的LVS解决方案中,在Web服务器端也有采用了Nginx+Tomcat这样的搭配类型,静态文件和动态文件分开进行处理,也不失为一种有效的尝试。在以后的日子里,我还会尝试下在Linux下借助Jexus跑ASP.NET MVC项目,试试.NET项目在Linux下的运行效果,希望到时也可以做一些分享。好了,今天就到此停笔。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_848805.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【问底】李平:大型网站的灵魂——性能

在前一篇随笔 大型网站系统架构的演化中&#xff0c;介绍了大型网站的演化过程&#xff0c;期间穿插了一些技术和手段&#xff0c;我们可以从中看出一个大型网站的轮廓&#xff0c;但想要掌握设计开发维护大型网站的技术&#xff0c;需要我们一步一步去研究实践。所以我打算写一…

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

在过去的工作中&#xff0c;徐汉彬从事各类缓存建设和优化&#xff0c;遇到问题无数&#xff0c;从各种各样的问题中&#xff0c;逐渐总结出它们之间的“共性”&#xff0c;而这个“共性”又优雅地遵循“几何分形学”。从几何分形的角度去看待缓存机制&#xff0c;能够更容易和…

10个学习Android开发的网站推荐

作为一个Android 开发者&#xff0c;官网的资料当然不可错过&#xff0c;从设计&#xff0c;培训&#xff0c;指南&#xff0c;文档&#xff0c;都不应该错过&#xff0c;在以后的学习过程中慢慢理解体会。 Android DeveloperAndroid Guides - CodePath CodePath 是国外一个技术…

某大神网站发现2048一枚

在论坛发现2048的C语言的源代码。 真心佩服大神的创作。 复制一起学习。 ////Console2048://C语言写的一个手机游戏2048的控制台版。//作者&#xff1a;0xAA55//QQ&#xff1a;838816058//论坛&#xff1a;www.技术宅的结界.com//2048原版作者&#xff1a;//Gabriele Cirulli…

分分钟搞定Wordpress网站HTTPS升级

序 自从浏览器开始主动提示网站不安全开始&#xff0c;我就一直想找机会把博客站aTechie做一下升级&#xff0c;终于……终于这次找到机会了&#xff08;太懒了&#xff0c;哈哈哈&#xff09;。 关于HTTPS 先用一张图片来直观展现HTTPS的原理 简单的说&#xff0c;HTTPS的…

ecs 对比 本地服务器_阿里云服务器建站、心选建站、定制建站有什么区别,如何选择...

使用阿里云建网站的三种方式购买云服务器手动建站、云速成美站模板建站或者选择阿里云定制建站三种方式&#xff0c;下面为你们分享利用阿里云建立网站的三种方式及优点对比&#xff1a;服务器阿里云建站方法汇总网站使用阿里云建站能够有三种方式&#xff0c;阿里云第一种是购…

JS--网站统计中的数据收集原理及实现

来源&#xff1a;http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访…

某个在线学习网站提交学习进度的方式

没到月底&#xff0c;领导要求我们完成公司网站的学习进度&#xff0c;于是想搞清楚这个在线学习网站更新学习进度的方法&#xff0c;可以快速更新学习进度&#xff0c;算是解决了学习任务的紧迫性。一开始看到一个按键&#xff0c;当学习快结束是&#xff0c;网站会提示”我已…

网站用户登录过程中的cookie的作用

测试一个学习平台项目时&#xff0c;需要验证用户账号是否可以正常登录。使用jmeter工具测试&#xff0c;fiddler辅助查看请求和响应消息。 开始的想法很简单&#xff0c;在登录页面查看到&#xff0c;点击登录按键会出发一个POST请求&#xff0c;想通过jmeter模拟post请求&am…

网站jar包功能分析

agileggfw.agilemgr.jar包引用了HibernateTransactionManager和FreeMarkerViewResolver 还不清楚做什么的 agileggfw.captcha.jar包引用jcaptcha-1.0.jar&#xff0c;作用是生成验证码&#xff1a; JCaptcha 简介 <?xml version"1.0" encoding"UTF-8&qu…

网站引导功能实现

网站新上线一个功能&#xff0c;往往会有一些引导功能&#xff0c;其实很简单&#xff0c;就是一些做好的图片通过css,js控制&#xff0c;拼接在一起。 上一些来自百度网的截图&#xff0c;一看就明白。

每个软件开发人员都应关注的7个网站

1. DEV社区 这是一个伟大的网站&#xff0c;可以随时了解最新技术以及下一轮繁荣。您可以关注自己感兴趣的主题。文章和视频的供稿将根据您的喜好生成。 只需访问网站并搜索您想要探索的技术和概念。您将获得许多相同的文章&#xff0c;视频和播客教程。它的技术新闻版块将使您…

测试基于php的购物网站,基于ThinkPHP开发的购物网站-微淘淘开发笔记

历经半个多月的断断续续的编写&#xff0c;一款基于ThinkPHP的购物网站开发完成并完成了初步的测试检测与修复&#xff0c;这款程序可以称之为到现在为止完全我自己独立编写完成的最大规模的一个 PHP 程序&#xff0c;为其起名叫做微淘淘&#xff0c;随便起的。由于使用的 TP 开…

html页面去空白页,通过Iframe在A网站页面内嵌入空白页面的方式,跨域获取B网站的数据返回给A网站!_html/css_WEB-ITnose...

以下代码只是为演示该方法具体是如何操作的&#xff0c;实际的意义并不大。其实这个方法还可以解决很多方面的跨域操作&#xff0c;以下两点为我工作中遇到的情况&#xff01;比如A系统中打开B系统页面的时候&#xff0c;获取B系统页面高度&#xff0c;A系统中可以动态设置窗口…

程序员本地网站

这道题要求从本地访问&#xff0c;打开burpsuite抓包&#xff0c;加上&#xff1a;X-Forwarded-For: 127.0.0.1 就好了 X-Forwarded-For: 简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请求端真实的IP&#xff0c;只有在通过了HTTP 代理或者负载均衡服务器时才会…

推荐几个正经网站,让你的数据结构和算法学习事半功倍!

前言 相信对于大部分程序员来说&#xff0c;数据结构和算法学起来是比较难的&#xff0c;但是它在工作中又是非常的重要&#xff0c;可以说是开发中的一块基石。 所以为了更好的学习和理解数据结构和算法&#xff0c;当时我是趁着双十一搞活动买了几本算法书&#xff0c;打算一…

AboutDNN网站链接交换图标

重新设计一个AboutDNN.com网站的图标。 标准的88*31像素的图标&#xff1a; 图片地址&#xff1a;http://www.aboutdnn.cn/logo/AboutDNN_com_88_31.gif 图片地址&#xff1a;http://www.aboutdnn.cn/logo/aboutdnn_com_120_30.gif 图片地址&#xff1a;http://www.aboutdnn.cn…

介绍一个不错的图书下载网站-顺便推荐几本书

站长肯定是个程序员&#xff0c;因为注册该网站的时候居然要做一程序题&#xff0c;像面试一样&#xff0c;很有意思。这个网站上几乎有所有计算机方面有点名的著作&#xff0c;而且站长非常勤奋&#xff0c;差不多天天都有新书上传。这个站名叫皮皮书屋&#xff0c;地址&#…

大型高性能网站的十项规则【转】

在我们公司ChinaNetCloud&#xff0c;见 过多种不同类型的网站和系统&#xff0c;有好也有差。其中有些系统拥有良好的服务器/网络架构&#xff0c;并且进行了合理的调整和监控 &#xff1b;然而一般的系统都会有安全和性能上的 问题&#xff0c;不能良好运行&#xff0c;也无法…

linux网站服务

文章目录linux网站服务概念名词网站架构静态站点Apache虚拟主机动态网站部署论坛系统discuz部署博客系统wordpresslinux网站服务 概念 名词 HTML HyperText Markup Language超文本标记语言。网页 使用HTML,PHP,JAVA语言格式书写的文件&#xff0c;网页就是服务器把html文件拷…