NGINX + TOMCAT + MEMCACHED实现HTTP负载均衡
2015-07-30 16:15
483 查看
NGINX+ TOMCAT + MEMCACHED实现HTTP负载均衡
1. 组成模块概述
1.1 Nginx
高性能的http和反向代理服务器,其特点是占用内存小,并发性能强,被广泛用于http服务器的负载均衡服务器。
1.2 Tomcat
开源的http服务器
1.3 Memcached
高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。这里用memcached来存储Tomcat0与tomcat1的session值,用于http客户端在tomcat0与tomcat1之间切换时,session共享。
2. 系统框架图
图1. 系统逻辑图
如图1所示为系统框架的逻辑图。该系统逻辑上分4部分,部署与3台服务器上:s0,s1,s2,s3。其对应的ip地址以及系统分别为192.168.100.30(ubuntu12.04),192.168.100.31(xp),192.168.100.32(ubuntu12.04)。
3. 安装与配置
3.1 nginx安装与配置
3.1.1源码安装
下载地址:http://nginx.org/download/
我这里下载的是 nginx-1.7.2.tar.gz,解压后进入目录:
$./configure
$make
$sudo make install
安装成功之后,nginx放置在/usr/local/nginx目录下,主要的配置文件为conf目录下的nginx.conf,nginx的启动文件在sbin目录下的nginx文件。
3.1.2 配置
user root;
worker_processes 4; # 与服务器CPU核数对应
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend { #backend
要与proxy_pass对应
server 192.168.100.32:80 weight=1; # 对应tomcat1
server 192.168.100.31:80 weight=1; # 对应tomcat0
}
server {
listen 80;
server_name 192.168.100.30; # nginx所在的服务器ip地址
location / {
root html;
index index.html index.htm;
proxy_pass http://backend; # 与upstream backend对应
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注:porxy_pass设置的http://backend需要与upstream backend对应
3.1.2 运行
root@master:/usr/local/nginx#./sbin/nginx -c ./conf/nginx.conf
3.2 memcached安装与配置
3.2.1 安装
Memcache用到了libevent这个库,所以还需要安装libevent(如果你的系统已经安装了libevent,可以不用安装)。
1. 安装libevent。
下载libevent-2.0.21-stable.tar.gz
#tar zxvf libevent-2.0.21-stable.tar.gz
#cd libevent-2.0.21-stable
#./configure
#make
#make install
2. 安装memcached
下载memcached-1.4.24.tar.gz
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3. 启动Memcached服务
# sudo memcached -d -m 128 -u root -p 11211-c 256 -P /var/run/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB,
-u是运行Memcache的用户,我这里是root,
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid,
4. 如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
3.3 tomcat安装与配置
3.3.1 安装
略
3.3.2 conf/context.xml配置
在<Context></Context>之间加入如下的内容
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.30:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
主要设置memcached所在的服务器的信息:
n1: memcached服务器服务器节点命名;
192.168.100.30: memcached服务器的ip地址;
11211启动memcache服务器时的侦听端口号。
如果memcached服务器分布于两台服务器上面,可以设置如下:
memcachedNodes="n1:192.168.100.30:11211,n1:192.168.100.32:11211"
3.3.3 添加memcached客户端所需要的jar包
memcached客户端所需要的jar包,放置在tomcat的lib目录下,包含以下jar包:
memcached-session-manager-1.5.1.jar;
memcached-session-manager-tc6-1.5.1.jar;
msm-javolution-serializer-1.5.1.jar;
memcached-2.5.jar;
javolution-5.5.1.jar;
上述jar包可以在网上找到。
注:对tomcat0, 与tomcat1进行上述同样的配置。
4. 测试
分别在tomcat0,tomcat1的webapps/ROOT/目录下面,修改index.jsp:
<html>
<title>welcome totomcat!</title>
<body>
<ahref="inner/index.jsp">abc<a/>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server1!");
%>
</body>
</html>
启动浏览器,地址栏输入http://192.168.100.30,不断刷新,观测结果:
图2. Server2测试结果
图3. Server1测试结果
可见,sessionid保持一致!
1. 组成模块概述
1.1 Nginx
高性能的http和反向代理服务器,其特点是占用内存小,并发性能强,被广泛用于http服务器的负载均衡服务器。
1.2 Tomcat
开源的http服务器
1.3 Memcached
高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。这里用memcached来存储Tomcat0与tomcat1的session值,用于http客户端在tomcat0与tomcat1之间切换时,session共享。
2. 系统框架图
图1. 系统逻辑图
如图1所示为系统框架的逻辑图。该系统逻辑上分4部分,部署与3台服务器上:s0,s1,s2,s3。其对应的ip地址以及系统分别为192.168.100.30(ubuntu12.04),192.168.100.31(xp),192.168.100.32(ubuntu12.04)。
3. 安装与配置
3.1 nginx安装与配置
3.1.1源码安装
下载地址:http://nginx.org/download/
我这里下载的是 nginx-1.7.2.tar.gz,解压后进入目录:
$./configure
$make
$sudo make install
安装成功之后,nginx放置在/usr/local/nginx目录下,主要的配置文件为conf目录下的nginx.conf,nginx的启动文件在sbin目录下的nginx文件。
3.1.2 配置
user root;
worker_processes 4; # 与服务器CPU核数对应
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend { #backend
要与proxy_pass对应
server 192.168.100.32:80 weight=1; # 对应tomcat1
server 192.168.100.31:80 weight=1; # 对应tomcat0
}
server {
listen 80;
server_name 192.168.100.30; # nginx所在的服务器ip地址
location / {
root html;
index index.html index.htm;
proxy_pass http://backend; # 与upstream backend对应
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注:porxy_pass设置的http://backend需要与upstream backend对应
3.1.2 运行
root@master:/usr/local/nginx#./sbin/nginx -c ./conf/nginx.conf
3.2 memcached安装与配置
3.2.1 安装
Memcache用到了libevent这个库,所以还需要安装libevent(如果你的系统已经安装了libevent,可以不用安装)。
1. 安装libevent。
下载libevent-2.0.21-stable.tar.gz
#tar zxvf libevent-2.0.21-stable.tar.gz
#cd libevent-2.0.21-stable
#./configure
#make
#make install
2. 安装memcached
下载memcached-1.4.24.tar.gz
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3. 启动Memcached服务
# sudo memcached -d -m 128 -u root -p 11211-c 256 -P /var/run/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB,
-u是运行Memcache的用户,我这里是root,
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid,
4. 如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
3.3 tomcat安装与配置
3.3.1 安装
略
3.3.2 conf/context.xml配置
在<Context></Context>之间加入如下的内容
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.30:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
主要设置memcached所在的服务器的信息:
n1: memcached服务器服务器节点命名;
192.168.100.30: memcached服务器的ip地址;
11211启动memcache服务器时的侦听端口号。
如果memcached服务器分布于两台服务器上面,可以设置如下:
memcachedNodes="n1:192.168.100.30:11211,n1:192.168.100.32:11211"
3.3.3 添加memcached客户端所需要的jar包
memcached客户端所需要的jar包,放置在tomcat的lib目录下,包含以下jar包:
memcached-session-manager-1.5.1.jar;
memcached-session-manager-tc6-1.5.1.jar;
msm-javolution-serializer-1.5.1.jar;
memcached-2.5.jar;
javolution-5.5.1.jar;
上述jar包可以在网上找到。
注:对tomcat0, 与tomcat1进行上述同样的配置。
4. 测试
分别在tomcat0,tomcat1的webapps/ROOT/目录下面,修改index.jsp:
<html>
<title>welcome totomcat!</title>
<body>
<ahref="inner/index.jsp">abc<a/>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server1!");
%>
</body>
</html>
启动浏览器,地址栏输入http://192.168.100.30,不断刷新,观测结果:
图2. Server2测试结果
图3. Server1测试结果
可见,sessionid保持一致!
相关文章推荐
- 无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用
- http协议详解(转自乔晓松的博客)
- nginx 配置https 环境
- java端连接https注意事项
- Android get/post方式请求网络设置超时
- 推广利器之网络营销
- hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***
- 【HttpClient4.5实训】一.HttpClient4.5模拟浏览器GET请求访问新浪网(非原文教程)
- HTTPS单向认证和双向认证
- 网路总结01-HTTP协议和NSURLConnection
- 微软推送Win10致全球网络负担增大,中国网友表示毫无压力
- 安卓如何控制不会重复请求网络
- Linux网络编程 - 非阻塞connect
- Kubernetes技术分析之网络
- nfs网络文件系统
- 对TCP/IP网络协议的深入浅出归纳 注:浅显易懂的分析
- iOS9.0 网络请求错误解决
- 网络编程系列之六 pcap库拾遗与结构体
- httpWebRequest 文件下载
- 利用HttpWebRequest访问WebApi