您的位置:首页 > 理论基础 > 计算机网络

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保持一致!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: