Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 822|回复: 0

实现 Nginx+Tomcat+Memcached+Session 负载

[复制链接]

238

主题

288

帖子

1925

积分

超级版主

Rank: 8Rank: 8

积分
1925
QQ
发表于 2015-3-18 14:31:04 | 显示全部楼层 |阅读模式
本帖最后由 My-shiguang 于 2015-3-18 14:32 编辑

一、系统规划:

IPHostnamejvmRouteservice
192.168.0.4test1tomcat1Nginx
192.168.0.52test2tomcat2Memcached

二、安装Nginx 及 Memcached
Nginx 安装方法:
cd /tmp/src

wget http://www.minunix.com/docs/web/openssl-1.0.1c.tar.gz

Wget http://www.minunix.com/docs/web/pcre-8.31.tar.gz

wget http://www.minunix.com/docs/web/zlib-1.2.7.tar.gz

wget http://www.minunix.com/docs/web/nginx-1.2.8.tar.gz

wget http://www.minunix.com/docs/web/ ... vm-route-0.1.tar.gz
tar xf openssl-1.0.1c.tar.gz && tar xf pcre-8.31.tar.gz && tar xf zlib-1.2.7.tar.gz
tar xf nginx-upstream-jvm-route-0.1.tar.gz
tar xf nginx-1.2.8.tar.gz
cd nginx-1.2.8
patch -p0 < ../nginx-upstream-jvm-route-0.1/jvm_route.patch
#  ./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-select_module \
--with-poll_module  \
--with-http_sub_module \
--with-http_ssl_module \
--with-md5=/usr/lib64 \
--with-sha1=/usr/lib64  \
--pid-path=/usr/local/nginx/var/run/nginx.pid  \
--with-pcre=/tmp/src/pcre-8.31 \
--with-zlib=/tmp/src/zlib-1.2.7 \
--with-openssl=/tmp/src/openssl-1.0.1c \
--add-module=../nginx_upstream_jvm_route/
#make
#make install

Memcached 安装:
cd /tmp/src
wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.1/libevent-2.1.3-alpha.tar.gz
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
tar xf libevent-2.1.3-alpha.tar.gz
cd libevent-2.1.3-alpha
./configure --prefix=/usr/local/libevent
make
make install
useradd -M -s /sbin/nologin memcached
cd ../ && tar xf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
make install
ln -sv /usr/local/memcached/bin/memcached  /usr/local/bin/

三、安装tomcat环境:
mkdir -p /tmp/src  && cd /tmp/src

1. 下载软件包:
uname -r 检查系统内核信息
x86_64 请下载
wget  http://docs.minunix.com/web/jdk-6u35-linux-x64.bin
i386系列 请下载
wget  http://docs.minunix.com/web/jdk-6u35-linux-i586.bin
chmod +x jdk-6u35-linux-x64.bin
注:作者系统为X86_64 ,所以以x86_64 演示,步骤都一样的!
2. 安装jdk
安装必备组件:  yum -y install glibc-*
./ jdk-6u35-linux-x64.bin
(注:此处可能会出现以下问题:
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
此问题是因为您没有安装glibc-* ,只需要安装glibc 即可解决,
yum -y install glibc*  )
上面命令执行完之后会在当前目录生成jdk1.6.0_35 目录 , 拷贝当前目录到/usr/local 目录下面, 并配置JAVA环境变量
/bin/cp -rf jdk1.6.0_35 /usr/local/jdk
vim /etc/profile.d/java.sh \\\输入下列内容
##java_home
JAVA_HOME="/usr/local/jdk"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH=".:$PATH:$JAVA_HOME/bin"
CATALINA_HOME="/usr/local/tomcat"
export JAVA_HOME CATALINA_HOME
###保存退出,并执行下面的命令使配置生效
source /etc/profile.d/java.sh
java -version \\\检查java版本
若当前版本为1.6.0_35就说明安装正确, 若不是请检查系统是否已经安装java ,若安装请卸载之! 若其他问题请检查安装步骤及文件路径
3. 安装tomcat
若jdk 已经正确安装, 请执行以下命令!! :
cd /tmp/src && wget http://www.minunix.com/docs/web/apache-tomcat-6.0.36.zip
tar xf apache-tomcat-6.0.36.zip
/bin/cp -rf apache-tomcat-6.0.36  /usr/local/tomcat
4. 下载memcached-session-manager.tar.gz
cd /tmp/src
wget http://www.minunix.com/docs/web/memcached-session-manager.tar.gz
tar xf memcached-session-manager.tar.gz
cd memcached-session-manager
/bin/cp -rf ./*  /usr/local/tomcat/lib/

转载请注明原文出处:http://www.minunix.com/2013/05/tomcatmemcachedsession/    作者:MinUnix
5. 修改tomcat 配置文件:
<1> server.xml (均在192.168.0.4 上操作, 另外一台操作类似)
cd /usr/local/tomcat/conf && vim server.xml
修改以下内容 :
在<Connector port=”8080”…. redirectPort=”8443”/> 中 的最后部分加入设置tomcat为UTF-8 编码: <Connector port="8080"  protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
取消 <Engine ….> 的注释 , 并修改为:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
\\\ 在192.168.0.52 上修改jvmRoute=”tomcat2”
找到Host 标签中的 appBase="webapps" , 并将其修改为 appBase="/var/www/test"
<2>  context.xml
修改tomcat的配置文件context.xml,调整成新的session存储方式,在配置文件中<Context>标签内加入以下代码:
vim context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.0.52:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
<3> logging.properties
在tomcat/conf/logging.properties文件中添加de.javakaffee.web.msm.level=FINE,就可以在catalina.out的日志中看到详细的session存取情况。

四、配置Nginx :
cd /usr/local/nginx/conf
vim nginx.conf

user  nginx nginx;
worker_processes  1;
pid        logs/nginx.pid;

events {
use epoll;
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
tcp_nopush     on;
keepalive_timeout  35;

gzip  on;
gzip_types   text/javascript text/plain text/css application/xml application/x-javascript;
gzip_disable    "MSIE [1-6]\.(?!.*SV1)";
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Connection Close;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 1024;
upstream minunix.com {
server 192.168.0.4:8080  srun_id=tomcat1;
server 192.168.0.52:8080 srun_id=tomcat2;
ip_hash;
jvm_route $cookie_JSESSIONID|sessionid reverse;
}

server {
listen       80;
server_name  localhost;
root /var/www;
index index.jsp index.html index.htm;

charset utf-8;
#access_log  logs/host.access.log  main;

location / {
proxy_pass http://minunix.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
client_max_body_size 0;
}

#error_page  404              /404.html;
error_page   500 502 503 504  /50x.html;
location = /50x.html {
#            root   html;
}
}
}

五、编辑网页文件:
mkdir -p /var/www/test/ROOT WEB-INF
cd /var/www/test/ROOT
vim index.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster Test</title></head>
<body>
192.168.0.4  \\\ 另外一台改写为其IP 192.168.0.52
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getId());
out.println("<br> SESSION ID:" + session.getId()+"<br>");
%>
</body>
</html>
vim WEB-INF/web.xml
<web-app xmlns=http://java.sun.com/xml/ns/j2ee
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
version="2.4">
<display-name>TomcatDemo</display-name>
<distributable/>
\\\ 注: 每个项目都需要在WEB-INF目录下的web.xml 中添加此行
</web-app>

六、启动Nginx 、Tomcat :
chmod +x /usr/local/tomcat/bin/*.sh \\ 添加可执行权限
sh /usr/local/tomcat/bin/startup.sh  \\启动tomcat
/usr/local/nginx/sbin/nginx –t   \\ 若无错误提示,即可启动nginx
/usr/local/nginx/sbin/nginx   \\启动nginx
memcached -d -m 512 -u memcached
memcached 默认启动后监听的端口是11211

七、访问nginx 页面测试:
http://192.168.0.4/index.jsp
kill 其中一台tomcat,查看页面输出session 信息有无变化,若无变化,证明您已完成tomcat 负载 session 会话保持实验;若有问题请详细查看程序日志文件!



感谢原著作者的大力分享http://www.minunix.com/2013/05/tomcatmemcachedsession/


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2020-2-18 02:17 , Processed in 0.025272 second(s), 12 queries , Redis On.

快速回复 返回顶部 返回列表