linux 负载均衡 nginx反向代理 tomcat web服务器

我的实验环境:
Ubuntu 14  64位
tomcat 6 
jdk1.7

请看效果图
第一次访问地址:

这里写图片描述

第二次访问同样的地址:

这里写图片描述

首先我们先介绍负载均衡:负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行。(百度百科)

其实说白了就是均衡分发请求,减轻服务器的压力,让多个服务器同时按一定策略的处理用户请求。

优点:提高服务器工作效率,减轻服务器压力。提高处理响应速度,分担压力等,网络负载均衡对外只需提供一个IP地址(或域名),一个服务器宕机不影响其他服务器。

缺点:所有的请求通过负载均衡服务器,因此,负载均衡器上的任何故障都将导致整个站点的崩溃。

负载均衡实现的几种方法:
1. HTTP重定向

当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。通过重定向,来达到“负载均衡”的目标。
这个重定向非常容易实现,并且可以自定义各种策略。但是,它在大规模访问量下,性能不佳。而且,给用户的体验也不好,实际请求发生重定向,增加了网络延时。

2. 反向代理负载均衡(小成本经常用的)

反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中转的角色。因为它工作在HTTP层(应用层),也就是网络七层结构中的第七层,因此也被称为“七层负载均衡”。可以做反向代理的软件很多,比较常见的一种是Nginx。
Nginx是一种非常灵活的反向代理软件,可以自由定制化转发策略,分配服务器流量的权重等。但是反向代理软件中有一个常见的问题,就是Web服务器存储的session数据,因为一般负载均衡的策略都是随机分配请求的。同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题。
解决方案主要有两种:

配置反向代理的转发规则,让同一个用户的请求一定落到同一台机器上(通过分析cookie),复杂的转发规则将会消耗更多的CPU,也增加了代理服务器的负担。

将session这类的信息,专门用某个独立服务来存储,例如redis/memchache,这个方案是比较推荐的。

3 IP负载均衡

IP负载均衡服务是工作在网络层(修改IP)和传输层(修改端口,第四层),比起工作在应用层(第七层)性能要高出非常多。原理是,他是对IP层的数据包的IP地址和端口信息进行修改,达到负载均衡的目的。这种方式,也被称为“四层负载均衡”。

在负载均衡服务器收到客户端的IP包的时候,会修改IP包的目标IP地址或端口,然后原封不动地投递到内部网络中,数据包会流入到实际Web服务器。实际服务器处理完成后,又会将数据包投递回给负载均衡服务器,它再修改目标IP地址为用户IP地址,最终回到客户端。 这种方式叫LVS-NAT。

4 DNS负载均衡

DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。
这种负载均衡策略,配置简单,性能极佳。但是,不能自由定义规则,而且,变更被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题。

当然还有很多其他的负载均衡策略和方法,什么阿里的LVS,什么GSLB,什么要钱的啊,网上很多。我们初期不要管那么多,只要试着搭着负载均衡的环境并且理解其中的原理就可以了。
一般小公司或者小项目用的比较多的就是七层负载均衡,也就是用反向代理软件实现负载均衡,这其中用的比较多的就是用nginx(nginx也可以用来处理静态资源的请求,让动态资源由tomcat服务器处理),用它来实现反向代理。

准备搭建开始:

nginx  只要一个服务器有就可以了,负载均衡位置 192.168.26.13080。

web   192.168.26.1308080
web1  192.168.26.1298080
web2  192.168.26.1328080

注:你也可以用tomcat 开三个端口,这样一个linux也可以实现。

一、
我在web 这个服务器上安装了nginx,作为负载均衡和web服务器。web1和web2 安装了tomcat ,端口都是8080。
二、安装nginx

在安装Nginx之前,需要先安装gcc、 openssl、 pcre和zlib软件库,这些貌似在Ubuntu下有些就不需要安装的,根据你自己的需要进行安装。

演示一下安装pcre库,PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正规表达式库,这个就是为之后的地址重新,location匹配啊等,让nginx支持正则

cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz
tar -zxvf pcre-8.21.tar.gz
cd pcre-8.21
./configure
make
make install

nginx的安装

对于nginx的版本,看个人喜好来安装,我装的是1.9.9
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.9.tar.gz
添加相应的用户 useradd www 名字可以自己随意起,不过为了接地气用www
解压nginx的包 tar -xvzf nginx-1.9.9.tar.gz
cd nginx-1.9.9/
编译安装 注意这里的user要和之前创建的用户名称相对应

cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar -zxvf nginx-1.9.9.tar.gz
cd nginx-1.9.9
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/src/pcre-8.21 --user=www --group=www --with-http_stub_status_module
make
make install

注意–with-pcre指向的pcre的源码路径

如果要安装zlib的话也是这样,添加个–with-zlib,后面加个源码路径

其实看你缺少什么就去安装对应的软件库,gcc,openssl,zlib 好像是我用python的时候安装的,有点时候你的操作系统有就不用安装了,看你报什么错吧。如果报错可以去下面的博客看看,或者百度。
http://blog.csdn.net/LW_GHY/article/details/52895201?locationNum=2&fps=1

安装完毕 通过 /usr/local/nginx/sbin/nginx -t 测试nginx的安装是否成功

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

三、nginx配置文件

user  www www;
worker_processes  1;

#error_log  logs/error.log;
error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    fastcgi_intercept_errors on;
  charset  utf-8;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 4k;
  large_client_header_buffers 4 32k;
  client_max_body_size 300m;
  sendfile on;
  tcp_nopush  on;

  keepalive_timeout 60;

  tcp_nodelay on;
  client_body_buffer_size  512k;

  proxy_connect_timeout    5;
  proxy_read_timeout       60;
  proxy_send_timeout       5;
  proxy_buffer_size        16k;
  proxy_buffers            4 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers  4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

    #access_log  logs/access.log  main;

    #keepalive_timeout  0;

    #gzip  on;
#这个是你需要重定向到的服务器IP和端口地址
    upstream myserver {  
        #weigth参数表示权值,权值越高被分配到的几率越大 
        #server 192.168.26.130:80 weight=5;  
        server 192.168.26.129:8080 weight=5; 
        server 192.168.26.132:8080 weight=5;
    }   

#这是nginx 监听的端口和地址
    server {
        listen       80;
        server_name  localhost;
    index index.jsp index.html index.htm;
#发布目录/data/www  
        root /data/www;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
#对 "/" 启用负载均衡  
        location / {
            #root   html;
            #index  index.html index.htm;

            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #以这种格式来使用后端的web服务器
            proxy_pass http://myserver;   
        }

请看结果图
第一次访问地址:

这里写图片描述

第二次访问同样的地址:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值