win7+nginx+tomcat均衡负载配置

Win7+Nginx+Tomcat负载均衡配置

3台机器模拟测试:192.168.101.23 配置nginx服务;192.168.101.222 配置tomcat1;192.168.101.5 配置tomcat2;

一、 下载Nginxnginx-1.5.8.zip)

下载地址:http//nginx.org/download/nginx-1.5.8.zip

解压到D/serve目录下

如图1所示:


 

è 双击运行nginx.exe,屏幕一闪而过或者在DOS里面敲打命令,如图所示:\


 

可以看到屏幕一闪而过,接下来测试一下是否安装启动成功;

 

à在任务管理器的进程中查看nginx.exe是否启动

 

à若看到该映像名称,证明nginx程序已经启动成功!

这时我们就可以在浏览器中访问:http://localhost

 

à这样我们就成功的搭建了一个nginx服务!!

 

二:分别在另外两台计算机上配置tomcat以及部署项目,这里就简单说一个,另一台类似;

下载安装apache-tomcat-6.0.37.zip,解压目录为:D:/web

配置环境变量参考地址:

http://wenku.baidu.com/link?url=ZFW-uT63qENQgiyOLZc8hkAeXrqvvGqV8eM-Q5yMb79bd_tqNmy-3RcHr1swKFa_FY_p-ofg-qxM6QNkYKLv-d3LbAO3XTXLyW5R9WL5yP3

192.168.101.222上的tomcat配置文件(\bin\server.xml):

<?xml version='1.0' encoding='utf-8'?>

<!--

  Licensed to the Apache Software Foundation (ASF) under one or more

  contributor license agreements.  See the NOTICE file distributed with

  this work for additional information regarding copyright ownership.

  The ASF licenses this file to You under the Apache License, Version 2.0

  (the "License"); you may not use this file except in compliance with

  the License.  You may obtain a copy of the License at

 

      http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License.

-->

<!-- Note:  A "Server" is not itself a "Container", so you may not

     define subcomponents such as "Valves" at this level.

     Documentation at /docs/config/server.html

 -->

<Server port="8006" shutdown="SHUTDOWN">

 

  <!--APR library loader. Documentation at /docs/apr.html -->

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->

  <Listener className="org.apache.catalina.core.JasperListener" />

  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->

  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

 

  <!-- Global JNDI resources

       Documentation at /docs/jndi-resources-howto.html

  -->

  <GlobalNamingResources>

    <!-- Editable user database that can also be used by

         UserDatabaseRealm to authenticate users

    -->

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>

 

  <!-- A "Service" is a collection of one or more "Connectors" that share

       a single "Container" Note:  A "Service" is not itself a "Container", 

       so you may not define subcomponents such as "Valves" at this level.

       Documentation at /docs/config/service.html

   -->

  <Service name="Catalina">

  

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->

    <!--

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 

        maxThreads="150" minSpareThreads="4"/>

    -->

    

    

    <!-- A "Connector" represents an endpoint by which requests are received

         and responses are returned. Documentation at :

         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)

         Java AJP  Connector: /docs/config/ajp.html

         APR (HTTP/AJP) Connector: /docs/apr.html

         Define a non-SSL HTTP/1.1 Connector on port 8080

    -->

    <Connector port="8088" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" URIEncoding="UTF-8"/>

    <!-- A "Connector" using the shared thread pool-->

    <!--

    <Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" />

    -->           

    <!-- Define a SSL HTTP/1.1 Connector on port 8443

         This connector uses the JSSE configuration, when using APR, the 

         connector should be using the OpenSSL style configuration

         described in the APR documentation -->

    <!--

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

    -->

 

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8008" protocol="AJP/1.3" redirectPort="8443" />

 

 

    <!-- An Engine represents the entry point (within Catalina) that processes

         every request.  The Engine implementation for Tomcat stand alone

         analyzes the HTTP headers included with the request, and passes them

         on to the appropriate Host (virtual host).

         Documentation at /docs/config/engine.html -->

 

    <!-- You should set jvmRoute to support load-balancing via AJP ie :

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">         

    --> 

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

 

      <!--For clustering, please take a look at documentation at:

          /docs/cluster-howto.html  (simple how to)

          /docs/config/cluster.html (reference documentation) -->

      <!--

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

      -->        

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
                channelSendOptions="6">
       
                <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                expireSessionsOnShutdown="false" 
                notifyListenersOnReplication="true"/>
        
          <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 

                <Membership className="org.apache.catalina.tribes.membership.McastService"   

                    address="228.0.0.4"  

                    port="45564"  

                    frequency="500"  

                    dropTime="3000"/>  
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"   

                    address="192.168.101.222"  

                    autoBind="100"  

                    port="4001"   

                    selectorTimeout="100"  maxThreads="6"/>  
               <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
                    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>                
              </Sender>  

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 

            </Channel>  
     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>  

           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 

           </Cluster>

 

 

 

      <!-- The request dumper valve dumps useful debugging information about

           the request and response data received and sent by Tomcat.

           Documentation at: /docs/config/valve.html -->

      <!--

      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>

      -->

 

      <!-- This Realm uses the UserDatabase configured in the global JNDI

           resources under the key "UserDatabase".  Any edits

           that are performed against this UserDatabase are immediately

           available for use by the Realm.  -->

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

             resourceName="UserDatabase"/>

 

      <!-- Define the default virtual host

           Note: XML Schema validation will not work with Xerces 2.2.

       -->

<!--

下面是部署项目路径

-->

      <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

<Context path=""  docBase="D:\web\apache-tomcat-6.0.37/webapps/p2b"></Context>

      </Host>

    </Engine>

  </Service>

</Server>

tomcatweb.xml文件中的</web-app>前面加上<distributable/>即可

 

192.168.101.5计算机上的tomcat配置文件:

 

<?xml version='1.0' encoding='utf-8'?>

<!--

  Licensed to the Apache Software Foundation (ASF) under one or more

  contributor license agreements.  See the NOTICE file distributed with

  this work for additional information regarding copyright ownership.

  The ASF licenses this file to You under the Apache License, Version 2.0

  (the "License"); you may not use this file except in compliance with

  the License.  You may obtain a copy of the License at

 

      http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License.

-->

<!-- Note:  A "Server" is not itself a "Container", so you may not

     define subcomponents such as "Valves" at this level.

     Documentation at /docs/config/server.html

 -->

<Server port="8005" shutdown="SHUTDOWN">

 

  <!--APR library loader. Documentation at /docs/apr.html -->

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->

  <Listener className="org.apache.catalina.core.JasperListener" />

  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->

  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

 

  <!-- Global JNDI resources

       Documentation at /docs/jndi-resources-howto.html

  -->

  <GlobalNamingResources>

    <!-- Editable user database that can also be used by

         UserDatabaseRealm to authenticate users

    -->

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>

 

  <!-- A "Service" is a collection of one or more "Connectors" that share

       a single "Container" Note:  A "Service" is not itself a "Container", 

       so you may not define subcomponents such as "Valves" at this level.

       Documentation at /docs/config/service.html

   -->

  <Service name="Catalina">

  

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->

    <!--

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 

        maxThreads="150" minSpareThreads="4"/>

    -->

    

    

    <!-- A "Connector" represents an endpoint by which requests are received

         and responses are returned. Documentation at :

         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)

         Java AJP  Connector: /docs/config/ajp.html

         APR (HTTP/AJP) Connector: /docs/apr.html

         Define a non-SSL HTTP/1.1 Connector on port 8080

    -->

    <Connector port="8081" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" URIEncoding="UTF-8"/>

    <!-- A "Connector" using the shared thread pool-->

    <!--

    <Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443"/>

    -->           

    <!-- Define a SSL HTTP/1.1 Connector on port 8443

         This connector uses the JSSE configuration, when using APR, the 

         connector should be using the OpenSSL style configuration

         described in the APR documentation -->

    <!--

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

    -->

 

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

 

    <!-- An Engine represents the entry point (within Catalina) that processes

         every request.  The Engine implementation for Tomcat stand alone

         analyzes the HTTP headers included with the request, and passes them

         on to the appropriate Host (virtual host).

         Documentation at /docs/config/engine.html -->

 

    <!-- You should set jvmRoute to support load-balancing via AJP ie :

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">         

    --> 

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

 

      <!--For clustering, please take a look at documentation at:

          /docs/cluster-howto.html  (simple how to)

          /docs/config/cluster.html (reference documentation) -->

      <!--

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

      -->        

       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
                channelSendOptions="6">
       
                <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                expireSessionsOnShutdown="false" 
                notifyListenersOnReplication="true"/>
        
          <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 

                <Membership className="org.apache.catalina.tribes.membership.McastService"   

                    address="228.0.0.4"  

                    port="45564"  

                    frequency="500"  

                    dropTime="3000"/>  
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"   

                    address="192.168.101.5"  

                    autoBind="100"  

                    port="4001"   

                    selectorTimeout="100"  maxThreads="6"/>  
               <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
                    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>                
              </Sender>  

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 

            </Channel>  
     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>  

           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 

           </Cluster>

 

      <!-- The request dumper valve dumps useful debugging information about

           the request and response data received and sent by Tomcat.

           Documentation at: /docs/config/valve.html -->

      <!--

      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>

      -->

 

      <!-- This Realm uses the UserDatabase configured in the global JNDI

           resources under the key "UserDatabase".  Any edits

           that are performed against this UserDatabase are immediately

           available for use by the Realm.  -->

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

             resourceName="UserDatabase"/>

 

      <!-- Define the default virtual host

           Note: XML Schema validation will not work with Xerces 2.2.

       -->

      <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

<Context path=""  docBase="D:/apache-tomcat-6.0.37-windows-x86/apache-tomcat-6.0.37/webapps/p2b"></Context>

      </Host>

    </Engine>

  </Service>

</Server>

tomcatweb.xml文件中的</web-app>前面加上<distributable/>即可

三、启动tomcat服务;

  

分别到两个tomcat下直接双击bin\startup.bat启动tomcat,如图所示:

 

 

通过浏览器分别访问两台机器的tomcat,显示项目p2b的主页面,即可说明tomcat配置成功!

 

 

 

 

 

Nginx+Tomcat负载均衡配置这里只需要修改Nginx的配置文件nginx.conf,让它通过tomcat来转发。

Nginx配置文件完成如下:


#使用的用户和组,window下不指定

#user  nobody;

#指定工作衍生进程数(一般等于CPU总和数或总和数的两倍,例如两个四核CPU,则总和数为8)

worker_processes  1;

#指定错误日志文件存放路径,错误日志级别可选项为【debug|info|notice|warn|error|crit

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#指定pid存放路径

#pid        logs/nginx.pid;

 

#工作模式及连接数上限

events {

#使用网络I/O模型,Linux系统推荐使用epoll模型,FreeBSD系统推荐使用kqueue;window下不指定

#允许的连接数

#user epoll;

    worker_connections  100;

}

 

#设定http服务器,利用他的反向代理功能提供负载均衡支持

http {

#设定mime类型

    include       mime.types;

    default_type  application/octet-stream;

#设定日志格式

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    client_header_buffer_size 1k;

    large_client_header_buffers 4 4k;

 

access_log  logs/access.log  main;

#设定access log

    client_header_timeout 3m;

    client_body_timeout 3m;

    send_timeout 3m;

    sendfile        on;

    tcp_nopush     on;

    tcp_nodelay on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

#开启gzip模块

    gzip  on;

    gzip_min_length 1100;

    gzip_buffers 4 8k;

    gzip_types text/plain application/x-javascript text/css application/xml;

    output_buffers 1 32k; 

    postpone_output 1460;

    server_names_hash_bucket_size 128; 

    client_max_body_size 8m;

    fastcgi_connect_timeout 300; 

    fastcgi_send_timeout 300; 

    fastcgi_read_timeout 300; 

    fastcgi_buffer_size 64k; 

    fastcgi_buffers 4 64k; 

    fastcgi_busy_buffers_size 128k; 

    fastcgi_temp_file_write_size 128k; 

    gzip_http_version 1.1; 

    gzip_comp_level 2; 

gzip_vary on;

#设定负载均衡的服务器列表

upstream localhost {

#设定负载均衡的服务器列表

      #ip_hash;

#同一机器在多网情况下,路由切换,ip可能不同 
#weigth参数表示权值,权值越高被分配到的几率越大

      server 192.168.101.222:8088 max_fails=2 fail_timeout=600s;

      server 192.168.101.5:8081 max_fails=2 fail_timeout=600s; 

}

#设定虚拟主机

    server {

        listen       80;

        server_name  localhost;

 

        charset UTF-8;

#设定本虚拟主机的访问日志

        access_log  logs/host.access.log  main;

#对 "/" 启用负载均衡

        location / {

            root   \\192.168.101.222\D:\web\apache-tomcat-6.0.37\webapps;

            index  index.html index.htm index.aspx;

            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;

#允许客户端请求的最大单个文件字节数

client_max_body_size 10m; 

#缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户

            client_body_buffer_size 128k;

#跟后端服务器连接超时时间 发起握手等候响应超时时间

            proxy_connect_timeout 12;

#连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理

            proxy_read_timeout 90;

#代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可

            proxy_send_timeout 90;

#同上 告诉Nginx保存单个用的几个Buffer最大用多大空间

            proxy_buffer_size 4k;

            proxy_buffers 4 32k;

#如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2

            proxy_busy_buffers_size 64k;

#proxy 缓存临时文件的大小

            proxy_temp_file_write_size 64k; 

            proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 

            proxy_max_temp_file_size 128m;

            proxy_pass http://localhost;

        }

        

 

        #error_page  404              /404.html;

 

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

 

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

 

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;

        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

        #    include        fastcgi_params;

        #}

 

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

    }

 

 

    # another virtual host using mix of IP-, name-, and port-based configuration

    #

    #server {

    #    listen       8000;

    #    listen       somename:8080;

    #    server_name  somename  alias  another.alias;

 

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

 

 

    # HTTPS server

    #

    #server {

    #    listen       443 ssl;

    #    server_name  localhost;

 

    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;

 

    #    ssl_session_cache    shared:SSL:1m;

    #    ssl_session_timeout  5m;

 

    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers  on;

 

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

 

}

四、测试 

前提是分别启动两台机器的tomcat,其次启动nginx服务;

192.168.101.23上访问nginx服务器(通过访问http://localhost来实现对192.168.101.222192.168.101.5这两个机器上应用程序的访问,最终实现tomcat的均衡负载)

[1]关闭192.168.101.222上的tomcat服务,访问192.168.101.23上的nginx服务,观察192.168.101.5上的tomcat是否运行;

[2]关闭192.168.101.5上的tomcat服务,访问192.168.101.23上的nginx服务,观察192.168.101.222上的tomcat是否运行;

[3]两个tomcat都启动,访问nginx服务,模拟并发用户n个,观察tomcat的运行情况;

如果[1][2]tomcat都运行就说明搭建nginx代理服务成功,tomcat实现了均衡负载;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值