一 软件安装
1》 安装nginx (参考http://blog.csdn.net/liaomin416100569/article/details/72897641)
2》 安装jdk(参考http://blog.csdn.net/liaomin416100569/article/details/6671692)
3》 安装tomcat 下载tar.gz包解压即可
4》安装memcache
yum -y install memcached
使用telnet ip 11211 端口
输入常用命令(参考http://www.runoob.com/memcached/memcached-tutorial.html)
- set t 0 0 3 --表示添加一个键 t 参数1标志 参数2 超时时间 0永不超时 参数3表示字节数
- boy --键对应的值
- STORED --STORED表示成功存储 --ERROR表示失败
- get t --获取键对应的值
- VALUE t 0 3
- boy
- END
- delete t --删除键 flush_all可以清空所有
- DELETED
- get t
- END
- --查看所有的键值对
- stats items
- STAT items:1:number 1
- --参数 1表示上面列出的 items:1 参数2表示列出100个键值对
- stats cachedump 1 100
5》安装redis(http://blog.csdn.net/liaomin416100569/article/details/53432963)
二 软件配置
1》nginx+tomcat+memcached集群
场景假设 nginx服务器为 192.168.58.132 端口 80 memcached安装在 192.168.58.132上 端口11211
tomcat1 192.168.58.132 8888 tomcat2 192.168.58.133::8888
步骤1:nginx负责负载均衡转发
nginx保证成功安装
配置负载均衡使用nginx的代理模块 具体参考 tengine官网配置(http://tengine.taobao.org/document_cn/http_upstream_check_cn.html)
找到 nginx/conf/nginx.conf 配置
- http {
- upstream cluster1 {
- # 配置后端tomcat服务器的ip和端口
- server 192.168.58.133:8888;
- server 192.168.58.132:8888;
- #黏性session
- session_sticky;
- #interval检测后端服务器的时间3000
- #rise=2表示连续两次连接后端服务器表示存活
- #fall=5表示连续5次连接后端服务器失败表示后端tomcat挂了
- #timeout=1000 表示连接超时时间
- check interval=3000 rise=2 fall=5 timeout=1000 type=http;
- #发送一个HEAD请求
- check_http_send "HEAD / HTTP/1.0\r\n\r\n";
- #返回 2和3开头的响应码表示成功
- check_http_expect_alive http_2xx http_3xx;
- }
- server {
- listen 80;
- location / {
- proxy_pass http://cluster1;
- }
- #开始状态监控 网页服务器
- location /status {
- check_status;
- }
- }
- }
重新加载nginx service nginx reload
访问 http://192.168.58.132/status(这里两台后端tomcat都未安装所有 显示红色背景 fall count表示重连失败的次数
rise counts表示成功的次数 如果成功 会显示白色背景
)
步骤2:tomcat部署应用 【考虑session的一致性问题】
在132下解压tomcat
在webapps/ROOT新建一个 my.jsp 内容如下
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title><%= application.getServerInfo() %></title>
- </head>
- <body>
- 当前的session <%=session.getId()%>
- 当前主机 <%=request.getLocalAddr()%>
- </body>
可以在132配置好tomcat后 将tomcat拷贝到 131
比如132执行命令 scp -r /root/tomcat/tomcat_memcached [email protected]:/root/tomcat
启动两台tomcat /bin/startup.sh tomcat启动的8888端口 nginx启动的是80 访问nginx
访问 http://192.168.58.132/my.jsp 此时发现session一直在变
原因是 nginx可能第一次将请求转发给 132tomcat 此时session存储在 132上
第二次请求可能转发给 133 133 tomcat不存在cookie中带的sessionid会重新创建一个 新的session
第三次请求可能转发给132 发生和第二次请求相同的情况
步骤3:memcached用于存储session 所有tomcat访问memcache获取session
将session的存储放在公共的地方 不管访问哪台服务器都在memcache存取session
tomcat需要配置 memcached session manager功能 需要加载该功能的jar包
maven地址(自行到maven.aliyun.com/nexus搜索memcached-session-manager-tcX X为6或者7后者8是tomcat版本 我这里用tomcat6 )
- <!-- http://maven.aliyun.com/nexus/#nexus-search;quick~memcached-session-manager-tc6-->
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>memcached-session-manager-tc6</artifactId>
- <version>2.1.1</version>
- </dependency>
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>msm-kryo-serializer</artifactId>
- <version>2.1.1</version>
- </dependency>
将该jar包拷贝到 132的tomcat/lib目录下
修改tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="localhost">
修改为 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat132"> 用于在产生session是加上后缀
133的配置加上jvmRoute="tomcat133" 即可
打开132和133 conf/context.xml
分别在Context节点下添加
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="n1:192.168.58.132:11211"
- sticky="false"
- sessionBackupAsync="false"
- requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
- />
这里 msm-kryo-serializer 用于存储session到memcache中de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory在这个库中
启动后http://192.168.58.132/my.jsp 获取到session后无论nginx转发到哪台机器session都是相同的
比如(通过sessionid的后缀知道 第一次访问jsp就是访问的tomcat132):
当前的session ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 当前主机 192.168.58.133
当前的session ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 当前主机 192.168.58.132
连接 memcached
telnet 192.168.58.132 11211
stats items #查看到最后一次创建的number是 5
stats cachedump 5 100 查询 5号number的最近100条可以看到 创建了一个item ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 99字节
ITEM ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 [99 b; 1497001937 s]
2》nginx+tomcat+redis集群
场景假设 nginx服务器为 192.168.58.132 端口 80 redis安装在 192.168.58.130上 端口11211
tomcat1 192.168.58.132 8888 tomcat2 192.168.58.133::8888
步骤1:nginx负责负载均衡转发
同memcache的配置步骤2:tomcat部署应用 【考虑session的一致性问题】
同memcache的配置
步骤3:redis用于存储session 所有tomcat访问redis获取session
获取tomcat-redis-session-manager 搜http://maven.aliyun.com/nexus/#nexus-search;quick~tomcat-redis-session-manager获取
- <dependency>
- <groupId>com.bluejeans</groupId>
- <artifactId>tomcat-redis-session-manager</artifactId>
- <version>2.0.0</version>
- </dependency> 将获取的jar包丢入tomcat/lib 同memcached
tomcat的context.xml配置
- <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
- <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
- host="192.168.58.130"
- port="6379"
- database="0"
- maxInactiveInterval="60" />
测试过程同memcache
特此声明:此文章来自于:http://blog.csdn.net/liaomin416100569/article/details/72953938