一. nginx  优缺点

    请参考 

 二. 开发工具  tomcat 2个   、redis、nginx 及 jar

    nginx下载地址

 

    tomcat-redis-session-manager-1.2-tomcat-7.jar

    jedis-2.2.0.jar

    commons-pool-1.6.jar

三. 配置

    

大致的整个配置的架构:

 

 

     

java环境中redis怎么做负载均衡_nginx tomcat redis

在这个图中,nginx做为反向代理,将客户请求根据权重随机分配给三台tomcat服务器,redis做为三台tomcat的共享session数据服务器。

   1.tomcat

        (1)准备三个tomcat容器

        (2)分别修改三台 tomcat 的  目录下的 config/server.xml 中的端口号(修改端口号防止端口冲突,可以实现三台tomcat在一台服务器上同时启动),要修改三个位置  的 port ,端口号不能相同,建议 8080以后的端口

       

java环境中redis怎么做负载均衡_负载均衡_02

   

       

java环境中redis怎么做负载均衡_负载均衡_03

     

java环境中redis怎么做负载均衡_java环境中redis怎么做负载均衡_04

 (3)分别修改 三个tomcat 文件夹下   context.xml

    在<context></context>中加入

    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>

    <Manager className="com.radiadesign.catalina.session.RedisSessionManager" database="0"        host="192.168.0.117" maxInactiveInterval="60" port="6379"/>

用于和redis建立链接,注意   host是 redis 的访问地址  databse指的是redis的库名

(4) 将上文中提到的三个jar 分别放到 三个tomcat 目录下的lib目录中,这个地方jar文件的版本有可能会有冲突,配置的时候需要多尝试。我这里的版本如下,是验证过可以使用的,通过maven的库都可以下载到。

2. redis 配置(若reids 和 三个tomcat 在同一台主机上,则不需要进行redis的配置),

我是将redis服务器和其中一个tomcat  放在了同一台服务器上,另外两个tomcat放置在另一台服务器上。修改redis目录下的redis.windows.conf 文件。 redis   bind默认绑定本机 127.0.0.1 如果要使另一台服务器的tomcat也能访问就修改 bind 地址  ,地址为redis 服务器的ip地址。注意 此处的ip地址应和 上文tomcat context.xml中加入这段代码中的 host的ip地址相同。

  

java环境中redis怎么做负载均衡_动静分离_05

  

java环境中redis怎么做负载均衡_nginx tomcat redis_06

redis.windows.conf修改后 下文会提到redis的启动方式

3.nginx配置

   打开nginx目录下的 nginx_config.xml 修改其中的配置

java环境中redis怎么做负载均衡_nginx tomcat redis_07

 

java环境中redis怎么做负载均衡_java环境中redis怎么做负载均衡_08

    在访问静态文件时 ,已jsp页面为例

原来的访问路径是

<script type="text/javascript" src="<%=basePath%>/pc_back/jquery-easyui-1.5/locale/easyui-lang-zh_CN.js"></script>

添加静态代理后

<script type="text/javascript" src="/jquery-easyui-1.5/locale/easyui-lang-zh_CN.js"></script>

附上完整配置


 


server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        
        location ~ \.(jsp|do)$ {
        	proxy_next_upstream http_502 http_504 error timeout invalid_header;
   			proxy_pass http://myServer;
    		# 真实的客户端IP
    		proxy_set_header   X-Real-IP        $remote_addr; 
    		# 请求头中Host信息
    		proxy_set_header   Host             $host; 
   			# 代理路由信息,此处取IP有安全隐患
    		proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    		# 真实的用户访问协议
    		proxy_set_header   X-Forwarded-Proto $scheme;

            client_max_body_size    10m; 
            client_body_buffer_size 128k; 
            #proxy_connect_timeout   90; 
            #proxy_send_timeout      90; 
            #proxy_read_timeout      90; 
            proxy_buffer_size       4k; 
            proxy_buffers           4 32k; 
            proxy_busy_buffers_size 64k; 
            proxy_temp_file_write_size 64k;
        }
        location ~\.(html|htm|gif|jpg|bmp|png|js|css){
        	root E:static\pc_back;
        	#expires 30d;
        }
        #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;
    #    }
    #}

}

四.工具启动和项目访问

       启动建议 先启动redis(启动redis和要通过命令启动,让redis启动时读取redis.windows.conf文件的配置)、再启动  tomcat、最后启动nginx。

     window 窗口命令 进入redis  -config目录 输入   redis-server.exe redis.windows.conf 启动redis.

    

       所有配置完成,工具启动后。访问项目时直接访问 nginx代理服务器所在的服务器地址 +端口 (默认80)+项目名