zoukankan      html  css  js  c++  java
  • Nginx-Tomcat负载均衡

    Nginx-Tomcat负载均衡

    Java软件开发,在更新版本的时候,往往要重启Tomcat服务;如果资源量少,重启服务几乎是瞬间完成,但是如果资源量大的话,重启会比较慢,影响网站的正常运营。下面介绍一个Nginx配合Tomcat的负载均衡方案,以便实现网站的不断点运营。

     

    1. Servers:

    server_1: 192.168.1.1: Nginx任务分发服务器

    server_2: 192.168.1.2: Tomcat服务器_1

    server_3: 192.168.1.3: Tomcat服务器_2

    2. Nginx服务器的搭建

      Nginx的编译安装,参照:http://www.cnblogs.com/llius/p/5105240.html,在这里就不做介绍;

      配置参数添加(供参考):

     

    user nobody nobody;
    worker_processes 2;   //根据服务器cpu核数修改
    error_log /usr/local/nginx/logs/nginx_error.log crit;   //错误日志,有问题找它
    pid /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    
    events
    {
        use epoll;
        worker_connections 6000;
    }
    
    http
    {
        include mime.types;
        default_type application/octet-stream;
        server_names_hash_bucket_size 3526;
        server_names_hash_max_size 4096;
        log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
        '$host "$request_uri" $status'
        '"$http_referer" "$http_user_agent"';
        sendfile on;
        tcp_nopush on;
        keepalive_timeout 30;
        client_header_timeout 3m;
        client_body_timeout 3m;
        send_timeout 3m;
        connection_pool_size 256;
        client_header_buffer_size 1k;
        large_client_header_buffers 8 4k;
        request_pool_size 4k;
        output_buffers 4 32k;
        postpone_output 1460;
        client_max_body_size 10m;
        client_body_buffer_size 256k;
        client_body_temp_path /usr/local/nginx/client_body_temp;
        proxy_temp_path /usr/local/nginx/proxy_temp;
        fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
        fastcgi_intercept_errors on;
        tcp_nodelay on;
        gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 8k;
        gzip_comp_level 5;
        gzip_http_version 1.1;
        gzip_types text/plain application/x-javascript text/css text/htm application/xml;
        include vhosts/*.conf;    //打开$basedir/conf/vhosts目录里面的配置开关
    
    server
    {
        listen 80;
        server_name localhost;
        index index.html index.htm index.php;
        root /usr/local/nginx/html;   //nginx的默认网页目录,默认是打开index.html
    ## 下面是添加php解析
        location ~ .php$ {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
            fastcgi_index index.php;
    ##下面是解析php的默认目录配置,在这里是:/usr/local/nginx/html
            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
        }
    }
    }
    

     

       上面的配置中,include vhosts/*.conf是非常重要的,它是打开请求分发功能必须的环节,因为我们需要在$basedir/conf/vhosts目录下面建立N个conf文件,来配置我们想要实现的功能。

    3. 禁掉Nginx默认主机

      默认主机禁掉以后,方便进行后面的任务分发,而通过server_1的ip在浏览器访问的时候,得到的返回码全部为403.

    # mkdir /usr/local/nginx/conf/vhosts   //如果没有的话,就创建这个目录,这里nginx的base_dir=/usr/local/nginx
    # cd !$
    # vim default.conf   //写入如下配置
    
    server
      {
    	listen 80 default_server; ## 默认的虚拟主机
    	server_name 123.com;
    	index index.html index.htm index.php;
    	root /tmp/tmp;   //创建这个空目录
    	deny all;
      }
    
    # mkdir -p /tmp/tmp
    # /etc/init.d/nginx restart
    

       如此,以server_1的ip,在浏览器访问的时候,是禁止访问的:

    403 Forbidden
    -----------------------------------------------------------------------------------
    nginx/1.8.0
    

     4. 开启请求分发

    # cd /usr/local/nginx/conf/vhosts
    # vim lb.conf    //写入如下配置
    
    upstream test { ip_hash;  //test为模块名
    server 192.168.1.2:8080;   //默认端口是80,如果web服务器为httpd或者nginx,可以不加:80,直接是ip形式即可
    server 192.168.1.3:8080;   //但是因为是tomcat做web服务器,所以,要指定:8080
    }
    
    server { listen 80;   //这里是nginx监听的端口,是我们代理服务器监听的web端口,自然是:80
    server_name www.lius.com;   //设定的访问域名,键入此可访问到Nginx服务器
    location / {
    proxy_pass http://test/;   //代理到上面提到的test模块
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	}
    }
    

       保存退出后,重启nginx服务,可以实现请求的分发。那么,如何对我们的配置结果进行测试呢?

    5. 测试请求分发功能

      要测试分发功能,需要在Tomcat服务器_1和2上面,做一些配置:

      【1】确定tomcat的默认监听端口是8080, 以为请求分发服务器上面,已经配置了8080.

    # vim /usr/local/tomcat/conf/server.xml
    

      搜索protocol="HTTP/1.1,找到所在行,看看Connector port="8080"是否为8080, 不是的话改为8080.

      【2】新建index.html文件

      在Tomcat服务器_1和2上,分别建立index.html文件,写入不同的内容,如:

    # server_1
    vim /usr/local/tomcat/webapps/ROOT/index.html  //键入11111111
    
    # server_2
    vim /usr/local/tomcat/webapps/ROOT/index.html  //键入22222222
    

       重启两个服务器的tomcat进程;由于tomcat的启动、停止都要用绝对路径或者相对路径,比较繁琐,所以可以用alias的方式,实现简单操作:

    # vim ~/.bashrc   //在alias组里面键入如下内容,当然,alias可以自定义,按照自己的操作习惯
    alias tcstart='/usr/local/tomcat/bin/startup.sh'
    alias tcstop='/usr/local/tomcat/bin/shutdown.sh'
    alias tcrestart='/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh'
    
    # source ~/.bashrc
    

      【3】访问测试:

      首先,在window里面,需要将hosts文件里面,添加我们域名的指向ip:

      打开c:/windows/system32/drivers/etc/hosts, 添加一行:192.168.1.1 www.lius.com,需要管理员权限,用写字板打开可以保存;不行的话,用notpad++,保存会提示切换到管理员模式,可以实现保存。

      然后,在浏览器键入:www.lius.com,在nginx、Tomcat配置文件修改后,服务都重新启动的前提下,刷新我们的浏览器界面,会一直在11111111和22222222之间切换。

      如果我们想让一个服务器承载更多的请求,需要更改Nginx请求分发的权重。那么,如何更改nginx的权重呢?

    # vim /usr/local/nginx/conf/vhosts/lb.conf   //在下面模块做操作
    
    upstream lius {
            server 192.168.1.2:8080 weight=2;
            server 192.168.1.3:8080 weight=1;
    }
    

       配置完要检查一下配置文件是否错误,我们自定义的Nginx启动脚本,可以实现这个功能:

    # /etc/init.d/nginx configtest
    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
    # /etc/init.d/nginx restart

       这样,在请求的时候,两次11111111,一次22222222,循环往复。

  • 相关阅读:
    VS GIT 使用入门---我只是搬运工
    虚拟机安装_1_wincc_matriton
    程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
    程序设计入门—Java语言 第五周编程题 2井字棋(5分)
    JAVA入门 第五周 1多项式
    第四周编程作业 2念整数
    第四周编程作业 1素数和(5分)
    第3周作业第2题 数字和特征
    第3周作业第1题 奇偶个数
    第2周作业第2题信号报告
  • 原文地址:https://www.cnblogs.com/llius/p/5105614.html
Copyright © 2011-2022 走看看