您的位置:首页 > 数据库 > Memcache

nginx-1.4.2+tomcat6+memcache做服务器集群以及session共享

2013-09-24 11:59 555 查看
简介

使用nginx做分发器,tomcat6做服务器,使用memcached实现session共享

1.搭建环境:windows

2.准备:

<1>下载nginx-1.4.2,解压到E:\server\nginx文件夹下

<2>下载tomcat6 解压到E:\server\tomcat文件夹下,tomcat准备两个tomcat 分别命名tomcat6-1,tomcat6-2

<3>下载memcache-win32.zip 解压到E:\server\memcache文件夹下

<4>下载jdk6 安装好之后配置环境变量 保证tomcat可以运行正常

<5>下载一下jar包房到tomcat的lib目录下

@1:couchbase-client-1.1.9.jar

@2:javolution-5.4.3.1.jar

@3:memcached-2.6.jar

@4:memcached-session-manager-1.6.5.jar

@5:memcached-session-manager-tc6-1.6.5.jar

@6:msm-javolution-serializer-1.6.5.jar

@7:msm-kryo-serializer-1.6.5.jar

@8:msm-xstream-serializer-1.6.5.jar

@9:spymemcached-2.8.12.jar

3.配置

<1>nginx配置

@1:打开文件E:\server\nginx\conf\nginx.conf

@2:修改为如下即可

#user nobody;

worker_processes 4;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 2048;

}

http {

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"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

upstream 127.0.0.1{

server 127.0.0.1:8080;

server 127.0.0.1:8081;

}

server {

listen 8888;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

proxy_pass http://127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;

client_max_body_size 100m;

}

#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;

#}

}

}

注意: worker_processes 4;此处数值一般为cpu个数

worker_connections 2048;此处的数值为连接数

upstream 127.0.0.1{

server 127.0.0.1:8080;

server 127.0.0.1:8081;

}

此处的127.0.0.1可以改为域名,里边的参数 server配置需要集群的服务器的IP和端口,此处都为本机所以IP直接配成127.0.0.1,端口不能相同,当然如果这

这两个服务器不在同一台电脑上那么端口是可以相同的,如果是在同一台电脑上那么端口必然不能相同。

listen 8888;此处为分发器nginx的端口,默认是80端口,如果被占用可以修改为别的端口 此处修改为8888

proxy_pass http://127.0.0.1;此处的127.0.0.1与upstream后边的127.0.0.1相同,当然可以同时修改为域名,页面访问的时候可以使用http://域名:端口/项目
来访问

<2>tomcate配置

@1:tomcat6-1配置如下:修改conf\server.xml

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



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



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

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

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

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

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





<GlobalNamingResources>



<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>





<Service name="Catalina">



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

connectionTimeout="20000"

redirectPort="8443" />



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

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





<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat6-1">







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



<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="auto"

port="4000"



autoBind="100"



selectorTimeout="5000"



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=""/>



<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>



<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"



tempDir="/tmp/war-temp/"



deployDir="/tmp/war-deploy/"



watchDir="/tmp/war-listen/"



watchEnabled="false"/>



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



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



</Cluster>



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

resourceName="UserDatabase"/>



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

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="" path="" reloadable="true" >

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"



memcachedNodes="n1:localhost:11211"



requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"



sessionBackupAsync="false"



sessionBackupTimeout="100"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

copyCollectionsForSerialization="false"

/>

</Context>

</Host>

</Engine>

</Service>

</Server>

@2:tomcat6-2配置如下:修改conf\server.xml

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



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



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

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

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

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

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



<GlobalNamingResources>



<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>





<Service name="Catalina">



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

connectionTimeout="20000"

redirectPort="8443" />



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



<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat6-2">

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



channelSendOptions="8">



<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="auto"



port="4001"

autoBind="100"



selectorTimeout="5000"



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=""/>



<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>



<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"



tempDir="/tmp/war-temp/"



deployDir="/tmp/war-deploy/"



watchDir="/tmp/war-listen/"



watchEnabled="false"/>



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



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



</Cluster>





<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 docBase="" path="" reloadable="true" >

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"



memcachedNodes="n1:localhost:11211"



requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"



sessionBackupAsync="false"



sessionBackupTimeout="100"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

copyCollectionsForSerialization="false"

/>

</Context>

</Host>

</Engine>

</Service>

</Server>

提示:其实tomcat6-1和tomcat6-2的配置基本相同,唯一的区别就是两个server.xml文件中的各个端口不能相同,因为都在同一台机器上当然端口不能相同,值得注意的是

cluster标签中的端口也不能相同,配置的时候一定要留意,还有memcachedNodes="n1:localhost:11211"这句话,这个的意思就是memcached节点信息的配置,从

格式上来看n1代表memcached节点1,localhost实际上配置的是memcached节点的IP,11211配置的是memcached节点的端口,多个节点要以空格隔开,其他

格式相同,注意在同一台机器上端口也是不能相同的 配置的时候要留心

3.启动和测试

<1>启动memcached服务,可以到E:\server\memcache文件夹下双击memcached.exe即可

<2>启动nginx,可以到E:\server\nginx文件夹下双击nginx.exe即可

<3>在E:\server\tomcat文件夹下的两个tomcat的webapps下新建文件夹test,在test文件夹下新建index.jsp,在index.jsp的body中加入以下代码

<%



//HttpSession session = request.getSession(true);



System.out.println(session.getId());



out.println("<br> SESSION ID:" + session.getId()+"<br>");



// 如果有新的请求,则添加session属性



String name = request.getParameter("name");



if (name != null && name.length() > 0) {

String value = request.getParameter("value");

session.setAttribute(name, value);

}



out.print("<b>Session List:</b>");

Enumeration<String> names = session.getAttributeNames();

while (names.hasMoreElements()) {

String sname = names.nextElement();

String value = session.getAttribute(sname).toString();

out.println( sname + " = " + value+"<br>");

System.out.println( sname + " = " + value);

}

%>

保存之后,启动tomcat6-1和tomcat6-2(双击bin文件夹下的startup.bat),然后再浏览器中输入http://127.0.0.1:test/index不断的刷新页面,页面上的sessionID是一样的,但是使用的tomcat名字会变化(即tomcat6-1和tomcat6-2交替调用),此时简单的框架已经搭建成功,session也成功共享

首次搭建,比较简单,不懂得还很多,若有瑕疵支出请多多包涵,小弟愿悉听高人指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐