前言;
为应对访问量大的web请求,单台tomcat 已不能应对突如其来的故障,为不间断的为用户提供服务,我们可以采用nginx+tomcat的方式实现负载均衡的访问控制。当多台tomcat协同工作时,最主要的问题是session如何实现共享,接下来本文就告诉你,如何配置。
环境:
192.168.1.199 nginx 监听80端口
192.168.1.220 memcache 监听11211端口
192.168.1.200 tomcat 1 监听8080
192.168.1.201 tomcat 2 监听8088
一、安装 centos 7 64位版
1、安装centos 7 64位版。我安装的版本是CentOS-7.0-1406-x86_64-DVD.iso
下载地址:http://ftp.yzu.edu.tw/Linux/CentOS/7.0.1406/isos/x86_64/
2、Centos的安装,略。
3、配置网卡
Centos安装完成后,默认网卡未启用,通过修改以下配置文件启用
Vi /etc/sysconfig/network-script/ifcfg-eth0
修改里面的ONBOOT=yes,如果要手动配置静态IP,修改BOOTPROTO=static
然后添加:
IPADDR=ip地址
NETMASK=子网掩码
GATEWAY=网关
DNS1=DNS解析地址。
存盘,重启网卡或服务器;
4、安装相关的工具:
A、安装网络工具相关
yum install net-tools //安装了后,可使用ifconfig一类的工具
B、安装编译相关
yum install gcc-c++ zlib zlib-devel openssl openssl--devel pcre pcre-devel
二、Nginx安装与配置
1、这里直接采用yum 方式安装了。如果是编译方式,请查找相应的文档。
yum install nginx
安装完成后,查看一下安装的位置
Find -name nginx
一般是放在了/etc/nginx
2、配置nginx支持负载
修改配置文件:nginx.conf为如下内容,该文件在/etc/nginx目录下
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#include /etc/nginx/conf.d/*.conf;
keepalive_timeout 0;
#keepalive_timeout 65;
#gzip on;
upstream 192.168.1.199{
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.1.200:8088 weight=3;
server 192.168.1.201:8080 weight=3;
}
server {
listen 80;
server_name 192.168.1.199;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://192.168.1.199;
proxy_redirect default;
}
#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;
#}
}
}
3、启动nginx
直接执行:nginx
停止nginx : nginx -s stop
更多命令,可以nginx -h 查看帮助
三、安装Memcache。
这个比较简单,可以下载一个windows版本的,直接打开执行就可以了。
如果有不会的,请查询相关的资料。
Memcache的默认端口是11211
在本例中,我把memcache安装在了:192.168.1.220上端口为11211
四、配置Tomcat
这里我们采用两个tomcat,如果都部署在不同机器上,请修改sever.xml里的端口,如果部署在同一台机器上,请修改相关的端口, 与NGINX里配置的端口对应上。
用tomcat集成memcache的方式有好几种:
Flexjson-session
Java-session
Javolution-session
Kryo-session
Xstream-session
有说kryo方式效率相对较高一点。这里我们使用kryo-session方式。使用kryo-session方式需要以下的jar包:
1、配置tomcat的contex.xml如下:
将下面的配置,添加到两个tomcat中的contex.xml文件中:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.220:11211"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
2、启动相关应用,顺序为:
Nginx
Memcache
Tomcat
3、编写测试网页,并放到tomcat的应该目录下:
这个放在tomcat 2里:Webapps\ROOT\t.jsp
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID: <h1><%=session.getId()%></h1>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<h1>tomcat 2 <h1/>
这个放在tomcat 1中:Webapps\ROOT\t.jsp
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID: <h1><%=session.getId()%></h1>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<h1>来自tomcat 1 <h1/>
五、看看效果
1、直接访问两个tomcat地址
2、访问nginx监听的地址
再刷新一下
成功,我们发现。sessionID并没有变化,配置成功!
最后再附上,集成了相关session共享的jar包的tomcat,测试通过了的