wolong 发表于 2016-12-28 07:33:34

nginx + msm 负载均衡及session共享fro windows

一 准备工作    
A 下载nginx for windows   
http://nginx.org/en/download.html
B 下载memcache-session-manager
http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
C 下载memcached for windows
   http://splinedancer.com/memcached-win32/
其它:jdk1.6 ,tomcat7
二 安装及配置: 
nginx 安装非常简单,解压直接动行就行了,注意使用英文目录
 修改配置文件nginx\conf\nginx.conf
1. 找到内容http{
在它的上面加入如下内容:

upstream192.168.0.92 {
ip_hash; #ip_hash策略将同一IP的所有请求都转发到同一应用服务器
server   192.168.0.92:8092;
server   192.168.0.93:8092;
}

2. 找到

server {
listen       80;
server_namelocalhost;
#charset koi8-r;
#access_loglogs/host.access.logmain;
location / {
root   html;
indexindex.html index.htm;
}
把内容更改如下:

server {
listen       80;
server_name192.168.0.92;
#charset koi8-r;
#access_loglogs/host.access.logmain;
location / {
#root   html;
#indexindex.html index.htm;
proxy_pass http://192.168.0.92;
proxy_redirect default;   
proxy_connect_timeout 10;
}

注意分号与注释
3. 接下来可以布置个web工程测试一下
三 memcached 安装
1.下载以后复制到通常安装程序的地方,我这里是d:\Program Files\memcache,复制好以后执行以下命令:
memcached.exe-d install
2. 运行 memcached.exe -d start
停止 ...................... -d stop/shutdown
3. java 环境的测试
  新建一个java工程 引入java_memcached-release_1.6.jar包
  新建TestMemcached.java

package com.rabbit.memcached;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
*
* @author hackpro
* @date 2013-2-21 下午4:02:07
* @email renntrabbit@foxmail.com
*/
public class TestMemcached {
public static void main(String[] args) {
/* 初始化SockIOPool,管理memcached的连接池 */
String[] servers = { "192.168.0.92:11211" };
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setFailover(true);
pool.setInitConn(10);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setAliveCheck(true);
pool.initialize();
/* 建立MemcachedClient实例 */
MemCachedClient memCachedClient = new MemCachedClient();
for (int i = 0; i < 10; i++) {
/* 将对象加入到memcached缓存 */
boolean success = memCachedClient.set("" + i, "Hello!");
/* 从memcached缓存中按key值取对象 */
String result = (String) memCachedClient.get("" + i);
System.out.println(String.format("set( %d ): %s", i, success));
System.out.println(String.format("get( %d ): %s", i, result));
}
}
}
   
控制台输入正常
]四 memchched-session-manger 与tomcat7 的配置
 官网有很详细的配置,这里我就得意的写一下我的配置和中间遇到的问题
1. 添加相关的java包 tomcat../lib/

2013-02-1916:34            43,398 asm-3.2.jar
2013-02-1916:30            94,830 kryo-1.04.jar
2013-02-2010:34            60,575 kryo-serializers-0.10.jar
2013-02-1920:01         127,689 memcached-session-manager-1.6.1.jar
2013-02-1920:00            10,531 memcached-session-manager-tc7-1.6.1.jar
2013-02-1916:33             4,879 minlog-1.2.jar
2013-02-1920:02            23,491 msm-kryo-serializer-1.6.1.jar
2013-02-1916:30            11,615 reflectasm-1.01.jar
2013-02-1916:11         407,912 spymemcached-2.7.3.jar

我在测试的时候少加了kryo-1.04.jar包,折腾了一天
还有要注意tomcat6/7是使用不同的包,可能早期的版没有做区分
2. 添加修改tomcat7../conf/context.xml,网上说修改service.xml 也可以

context.xml
<Context>
...
<Manager
className= "de.javakaffee.web.msm.MemcachedBackupSessionManager"   
memcachedNodes= "n1:192.168.0.92:11211"   
sticky="false"   
lockingMode="auto"   
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"   
sessionBackupAsync= "false"   
copyCollectionsForSerialization="true"   
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"   
/>
</Context>

如果在上面的文中加入
sessionBackupTimeout="0"
memcachedProtocol="binary"
可能会出不能登录的情况,如果出现了,请记得删除..
五 参数 
memcachedNodes (required)
memcached节点:此属性应该包含所有运行的memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>,多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"。
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。

failoverNodes (optional, must not be used for non-sticky sessions)
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。

username (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证。

password (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。

memcachedProtocol (since 1.3, optional, default text)
定义memcached协议,默认使用text文本

sticky (since 1.4.0, optional, default true)
定义session方式为黏性或非黏性,默认为true

lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)
只有非黏性session才使用,默认值为none
·none: 从不对session进行锁定
·all: session将一直被锁定,知道请求结束
·auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
·uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
requestUriIgnorePattern (optional)

sessionBackupAsync (optional, default true)

backupThreadCount (since 1.3, optional, default number-of-cpu-cores)

sessionBackupTimeout (optional, default 100)

operationTimeout (since 1.6.0, optional, default 1000)

sessionAttributeFilter (since 1.5.0, optional)

transcoderFactoryClass (since 1.1, optional, default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)
序列化接口实现:
·Java serialization: de.javakaffee.web.msm.JavaSerializationTranscoderFactory
·Kryo based serialization: de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
·Javolution based serialization: de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory
·XStream based serialization: de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory

copyCollectionsForSerialization (since 1.1, optional, default false)

customConverter (since 1.2, optional)

enableStatistics (since 1.2, optional, default true)

enabled (since 1.4.0, optional, default true)
页: [1]
查看完整版本: nginx + msm 负载均衡及session共享fro windows