nginx tomcat7 memcache设置服务器负载均衡,session共享

在网上有好多例子,我挨个试了试,但是都是不行

http://www.oschina.net/question/1014681_107718

这个写的不错,按照他的配置基本上不出问题,但是包的引用还是不太对,

http://www.linuxidc.com/Linux/2012-09/71264.htm这个是用的kryo序列化的,但是也不是很对,现在我写下自己的配置

第一步,编写bat文件,方便启动关闭服务器

@echo off
rem 当前bat的作用
 
echo ==================begin========================
 
cls 
SET NGINX_PATH=G:
SET NGINX_DIR=G:\SA\nginx-0.8.39\nginx-0.8.39\
SET COBAR_PATH=G:
SET COBAR_DIR=G:\SA\cobar-server-1.2.7\cobar-server-1.2.7\bin\
SET MEMCACHE_PATH=G:
SET MEMCACHE_DIR=G:\memcached-1.2.1-win32\
SET TC1_PATH=E:
SET TC1_DIR=E:\软件\Java\apache-tomcat-7.0.39-windows-x86\apache-tomcat-7.0.39\bin\
SET TC2_PATH=E:
SET TC2_DIR=E:\软件\Java\apache-tomcat-7.0.39-windows-x86 - 2\apache-tomcat-7.0.39\bin\
color 0a 
TITLE   管理程序  
 
CLS 
 
 
:MENU 
 
ECHO. * nginx 进程list *  
tasklist|findstr /i "nginx.exe"
 
ECHO. 
    ECHO.  [1] 启动Nginx  
    ECHO.  [2] 关闭Nginx  
    ECHO.  [3] 重启Nginx  
    ECHO.  [4] 退 出
    ECHO.  [5] 启动cobar
    ECHO.  [6] 启动memcache     
    ECHO.  [7] 启动tc1
    ECHO.  [8] 启动tc2   
ECHO. 
 
ECHO.请输入选择项目的序号:
set /p ID=
    IF "%id%"=="1" GOTO start 
    IF "%id%"=="2" GOTO stop 
    IF "%id%"=="3" GOTO restart 
    IF "%id%"=="5" GOTO cobar 
    IF "%id%"=="6" GOTO memcache 
    IF "%id%"=="7" GOTO tc1
    IF "%id%"=="8" GOTO tc2 
    IF "%id%"=="4" EXIT
PAUSE 
 
:start 
    call :startNginx
    GOTO MENU
 
:stop 
    call :shutdownNginx
    GOTO MENU
 
:restart 
    call :shutdownNginx
    call :startNginx
    GOTO MENU
 
:shutdownNginx
    ECHO. 
    ECHO.关闭Nginx...... 
    taskkill /F /IM nginx.exe > nul
    ECHO.OK,关闭所有nginx 进程
    goto :eof


:cobar
    call :startcobar
    GOTO MENU
:tc1
    call :starttc1
    GOTO MENU
:tc2
    call :starttc2
    GOTO MENU

:memcache 
    call :startmemcache
    GOTO MENU

:startmemcache
    ECHO. 
    ECHO.启动Cobar...... 
    IF NOT EXIST "%MEMCACHE_DIR%"memcached.exe ECHO "%MEMCACHE_DIR%memcached.exe"不存在 
 
    %MEMCACHE_PATH% 
 
    cd "%MEMCACHE_DIR%" 
 
    IF EXIST "%MEMCACHE_DIR%memcached.exe" (
        echo "start '' memcached.exe"
        start "" memcached.exe -d start
    )
    ECHO.OK
    goto :eof


:startcobar
    ECHO. 
    ECHO.启动Cobar...... 
    IF NOT EXIST "%COBAR_DIR%"startup.bat ECHO "%COBAR_DIR%startup.bat"不存在 
 
    %COBAR_PATH% 
 
    cd "%COBAR_DIR%" 
 
    IF EXIST "%COBAR_DIR%startup.bat" (
        echo "start '' startup.bat"
        start "" startup.bat
    )
    ECHO.OK
    goto :eof


:starttc1
    ECHO. 
    ECHO.启动tc...... 
    IF NOT EXIST "%TC1_DIR%"startup.bat ECHO "%TC1_DIR%startup.bat"不存在 
 
    %TC1_PATH% 
 
    cd "%TC1_DIR%" 
 
    IF EXIST "%TC1_DIR%startup.bat" (
        echo "start '' startup.bat"
        start "" startup.bat
    )
    ECHO.OK
    goto :eof
 
:starttc2
    ECHO. 
    ECHO.启动tc...... 
    IF NOT EXIST "%TC2_DIR%"startup.bat ECHO "%TC2_DIR%startup.bat"不存在 
 
    %TC2_PATH% 
 
    cd "%TC2_DIR%" 
 
    IF EXIST "%TC2_DIR%startup.bat" (
        echo "start '' startup.bat"
        start "" startup.bat
    )
    ECHO.OK
    goto :eof


:startNginx
    ECHO. 
    ECHO.启动Nginx...... 
    IF NOT EXIST "%NGINX_DIR%nginx.exe" ECHO "%NGINX_DIR%nginx.exe"不存在 
 
    %NGINX_PATH% 
 
    cd "%NGINX_DIR%" 
 
    IF EXIST "%NGINX_DIR%nginx.exe" (
        echo "start '' nginx.exe"
        start "" nginx.exe
    )
    ECHO.OK
    goto :eof

配置好后可以快速的启动关闭,不需要总是翻文件夹

2,装好nginx,tomcat7,memcached,这些的安装方法网上都有。

3,配置tomcat,主要是修改另一个tomcat的端口和设置session,

端口修改主要是一下三处

 <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

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

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

这三个端口修改完后启动tomcat试试,如果不出问题就继续配置session

在context.xml里添加

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   
    memcachedNodes="n1:localhost:11211"   
     
    sessionBackupAsync="false"   
    sessionBackupTimeout="100"   
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   
    copyCollectionsForSerialization="false"   
    />   

然后再lib文件夹下添加一下jar包

msm-javolution-serializer-jodatime-1.3.0.jar

msm-javolution-serializer-cglib-1.3.0.jar

spymemcached-2.8.4.jar

msm-javolution-serializer-1.6.3.jar

javolution-5.4.3.1.jar

memcached-session-manager-1.6.3.jar

memcached-session-manager-tc7-1.6.3.jar

如果用的是tomcat6,memcached-session-manager-tc7-1.6.3.jar这个要换位memcached-session-manager-tc6-1.6.3.jar

spymemcached-2.8.4.jar这个包有点blog没有引用,用的是memcached.jar但是我测试时发现会出下面的错误

 java.lang.NoSuchMethodError: 
net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture;

后来换为spymemcached-2.8.4.jar包就不再报错

4.nginx配置
 upstream web_server {
                #ip_hash;
                   server localhost:8080  ;

                   server localhost:8088  ;

                  

         }

配置两个tomcat服务器,当然也可以设置权重
具体的参数意思可以参考下面的blog

 server {
        listen       9007;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
         
         
         location ~ .*\.(jsp|do)?$ { 
            proxy_set_header Host $http_host; 
            proxy_redirect     off; 
            proxy_pass         http://web_server; 
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
        } 
 
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { 
            #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 
            proxy_next_upstream http_502 http_504 error timeout invalid_header; 
 
          
            proxy_cache_valid 200 304 1h;           #对不同的HTTP状态码设置不同的缓存时间 
            proxy_cache_valid 301 302 5m; 
            proxy_cache_valid any 1m; 
            proxy_set_header  Host $host; 
            proxy_set_header  X-Real-IP  $remote_addr; 
            proxy_set_header X-Forwarded-For $remote_addr; 
            proxy_set_header Accept-Encoding "";  #(或是后台服务器关闭gzip),这样这台机器才不会缓存被压缩的文件,造成乱码 
            proxy_ignore_headers "Cache-Control" "Expires"; #这段配置加上后,proxy_cache就能支持后台设定的expires。 
            proxy_pass http://web_server; 
            expires  15m; 
        } 
 
        location / { 
            proxy_set_header Host $http_host; 
            proxy_redirect     off; 
            proxy_pass         http://web_server; 
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
			  
        } 

具体的配置如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值