作者:历史本轻狂 | 来源:互联网 | 2014-05-28 09:40
1、采用Nginx负载均衡2、memcached共享session3、tomcat集群配置(3台CentOS6)(172.18.188.64):操作系统CentOS6;安装nginx、memcached和tomcat6(172.18.188.76):操作系统CentOS6;安装tomcat6(172.18.188.78
1、采用Nginx
负载均衡
2、
memcached共享session
3、tomcat集群配置(3台CentOS 6)
(172.18.188.64): 操作系统CentOS 6; 安装
nginx、memcached和tomcat 6
(172.18.188.76): 操作系统CentOS 6; 安装tomcat 6
(172.18.188.78): 操作系统CentOS 6; 安装tomcat 6
nginx、memcached、tomcat 6安装省略.
nginx配置如下:
nginx.conf如下:
#运行nginx所在的用户名和用户组
#user root root;
#启动进程数
worker_processes 8;
#全局错误日志及PID文件
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be
opened by this process.
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events
{
use epoll;
worker_connections 65535;
}
#设定http服务器,利用它的
反向代理功能提供负载均衡支持
http
{
#设定mime类型
include mime.types;
default_type application/octet-stream;
include /usr/local/webserver/nginx/conf/proxy.conf;
#charset gb2312;
#设定请求缓冲
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
# fastcgi_connect_timeout 300;
# fastcgi_send_timeout 300;
# fastcgi_read_timeout 300;
# fastcgi_buffer_size 64k;
# fastcgi_buffers 4 64k;
# fastcgi_busy_buffers_size 128k;
# fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain
application/x-Javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr
10m;
###禁止通过ip访问站点
# server{
# server_name _;
# return 404;
# }
upstream tserver {
server 172.18.188.64:8080 weight=1;
server 172.18.188.76:8080 weight=1;
server 172.18.188.78:8080 weight=1;
}
server
{
listen
80;
server_name vmwarehost;
index index.html index.htm index.jsp;
root /home/www/web/ROOT;
#limit_conn crawler
20;
location /
{
proxy_pass http://tserver;
}
location /NginxStatus
{
stub_status on;
access_log off;
}
location ~
.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#定义访问日志的写入格式
log_format access
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /usr/local/webserver/nginx/logs/localhost.log
access;
}
}
proxy.confi配置如下
#!nginx (-)
# proxy.conf
proxy_redirect
off;
proxy_set_header Host
$host;
proxy_set_header
X-Real-IP $remote_addr;
proxy_set_header
X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers
4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
tomcat 6 server.xml配置如下:
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" />
maxHttpHeaderSize="8192" cOnnectionTimeout="20000"
disableUploadTimeout="true" enableLookups="false"
redirectPort="8443" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75" acceptCount="100"
/>
maxHttpHeaderSize="8192"
cOnnectionTimeout="20000"
disableUploadTimeout="true" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" />
channelSendOptiOns="6">
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
address="172.18.188.64"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"
/>
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
resourceName="UserDatabase"/>
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
content.xml配置如下
WEB-INF/web.xml
memcachedNodes="n1:172.18.188.64:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessiOnBackupAsync="false"
sessiOnBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectiOnsForSerialization="false"/>
memcached启动命令:
useradd -s /sbin/nologin memcached
memcached -d -m 2048 -l 172.18.188.64 -p 11211 -u memcached
ngingx启动命令
sbin/nginx
tomcat启动命令(startup.sh)
分别启动memcached nginx tomcat能实现session的简单共享.
按照上面配置Nginx Memcached Tomcat启动运行都没有问题,并且可以实现Session的共享.但是有2个问题
一、Session的共享是基于访问IP的,即在同一台电脑上开2个IE窗口时,获取到Session中内容是相同的,也就是sessionid除了最后面的jvmrout不一样,其他都一样,内容也一样,这样就造成如果2个用户先后在同一台电脑上登录形成session混乱,有没有可能配置成同一ip在不同的ie窗口中不共享session,一个ie窗口对应一个session,而不是一个ip共享一个session.后台的访问依然是由nginx根据weight做分发而不是固定到一台固定的tomcat机器?
二、Memcached 启动是用-m
512发现会有数据丢失而且丢失几率很大,在一个页面上连续不断的刷新时就会发现session中的内容会清空.