nginx + tomcat + memcached 负载均衡动静分离技术
来源:互联网 发布:ubuntu分区工具 编辑:程序博客网 时间:2024/06/15 04:09
环境: redhat6.5
所需软件: nginx tomcat memcached
安装包:
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
apache-tomcat-7.0.37.tar.gz
jdk-7u79-linux-x64.tar.gz
nginx-1.10.1.tar.gz
memcached.x86_64
安装包下载:
http://www.nginx.org
http://code.google.com/p/memcached-session-manager/
机器:
因为是在自己电脑上模拟的,开了两台虚拟机
server1: 172.25.12.1 nginx memcached tomcat
server2: 172.25.12.2 memcached tomcat
安装:
1.安装memcahed:
yum install memcached -y
/etc/init.d/memcached start
memcached 默认开启11211 端口:
netstat -anple | grep :11211
2.tomcat安装与配置:
tomcat的安装需要java环境,所以先配置java环境
tar zxf jdk-7u79-linux-x64.tar.gz
mv jdk1.7.0_79/ /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java
配置java环境变量
vim /etc/profile
在里面添加下面几行
export JAVA_HOME=/usr/local/java export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/binsource /etc/profile
JAVA_HOME 后跟上面jdk解压目录
我将解压包移到/usr/local下 并创建了名为java的软连接,所以写/usr/local/java
查看路径:
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
which java
which javac
环境配好之后就开始安装tomcat:
tar zxf apache-tomcat-7.0.37.tar.gz
mv apache-tomcat-7.0.37 /usr/local/
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat
ll
cd tomcat/
在网上下载下面几个包,放到lib下(不用解压):
启动tomcat:
bin/startup.sh
查看8080端口,tomcat默认占用8080端口:
netstat -anplt | grep :8080
tomcat默认发布目录:
webapps/ROOT/
cd /usr/local/tomcat/webapps/ROOT/
vim test.jsp
在浏览器访问 localhost:8080/test.jsp 测试tomcat
出现以下界面就说明安装成功:
配置tomcat:
vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.12.1:11211,n2:172.25.12.2:11211"failoverNodes="n1" ##在server2 上设置为n2 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/></Context>
两个节点:
n1:172.25.12.1:11211
n2:172.25.12.2:11211
代表两个memcache服务
T1代表 server1 上的tomcat
T2代表 server2 上的tomcat
M1代表 server1 上的 memcache
M2代表 server2 上的 memcache
T1的session存到M2上
T2的session存到M1上
当T1出问题后,T2接管T1的工作,从M2里读取T1的工作数据
当M2出问题,T1就把缓存存到M1上
避免单点故障
3.nginx的安装与配置:
ginx-sticky-module 为 nginx 的第三方模块,使 nginx 支持 sticky 模式,所谓 sticky 模式就是指同一个用户的访问请求都被发送到同一个 tomcat 实例上处理。
解压nginx的第三方模块sticky并获取它的解压路径:
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
cd nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
pwd
解压并安装nginx(源码编译):
tar zxf nginx-1.10.1.tar.gz
cd nginx-1.10.1
cd auto/cc
vim gcc
将debug注释掉,提高编译速度
178 # debug 179 #CFLAGS="$CFLAGS -g"
./configure 编译 后跟参数
安装目录
–prefix=/usr/local/lnmp/nginx
默认模块
–with-http_ssl_module
–with-http_stub_status_module
添加模块(sticky模块,后跟第三方模块解压路径)
–add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
编译时要在解压目录里执行 ./configure 与相关参数
make
make install
安装完毕.
跳到nginx配置文件目录:
cd /usr/local/lnmp/nginx/conf/
编辑配置文件:
vim nginx.conf
18 http {##在Http下添加策略 test 这个策略是调用tomcat(tomcat默认端口为8080) 19 upstream test{ 20 sticky; 21 server 172.25.12.2:8080; 22 server 172.25.12.1:8080; 23 }##在server下添加 jsp 页面处理策略 只要是jsp页面,就跳到 test策略##tomcat善于处理动态页面,将所有jsp页面全部交给tomcat去处理,实现动静分离 70 location ~ \.jsp$ { 71 proxy_pass http://test; 72 } ##添加server策略 当访问 www.test.org 时跳到test策略 157 server { 158 listen 80; 159 server_name www.test.org; 160 161 location / { 162 proxy_pass http://test; 163 } 164 }
检测nginx配置文件有没有差错
nginx -t
重启nginx
nginx -s reload
测试:
测试界面:
写到tomcat发布目录下,每个节点都要写
/usr/local/tomcat/webapps/ROOT/test.jsp
<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %><html><head><title>Cluster App Test</title></head><body>Server Info:<%out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%><%out.println("<br> ID " + session.getId()+"<br>");String dataName = request.getParameter("dataName");if (dataName != null && dataName.length() > 0) {String dataValue = request.getParameter("dataValue");session.setAttribute(dataName, dataValue);}out.print("<b>Session list</b>");Enumeration e = session.getAttributeNames();while (e.hasMoreElements()) {String name = (String)e.nextElement();String value = session.getAttribute(name).toString();out.println( name + " = " + value+"<br>");System.out.println( name + " = " + value);}%><form action="test.jsp" method="POST">name:<input type=text size=20 name="dataName"><br>key:<input type=text size=20 name="dataValue"><br><input type=submit></form></body></html>
打开浏览器访问 http://www.test.org/test.jsp
不同的主机访问时会调度到不同的 tomcat 实例上处理
来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。
在访问 http://www.test.org/test.jsp 时,会调用 nginx ,通过配置文件里写的策略,去进行相关的访问.
注意:
如果访问不到 www.test.org 看有没有在本地 /etc/hosts 文件里加域名解析
格式:
ip domain1,domian2 ...
此处ip为有装有nginx服务器的ip domain 写 www.test.org
- nginx + tomcat + memcached 负载均衡动静分离技术
- nginx+tomcat+memcached 实现负载均衡 。动静分离。session共享
- Nginx+Tomcat负载均衡、动静分离
- nginx+tomcat负载均衡、动静分离
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 实现动静分离负载均衡
- Nginx+Tomcat 动静分离实现负载均衡
- Nginx+Tomcat 动静分离实现负载均衡
- Nginx + Tomcat 动静分离实现负载均衡
- Nginx+Tomcat 实现动静分离、负载均衡
- 判断当前访问的设备是否是移动设备
- h5 25
- 快速排序算法
- jdbc-连接池的简单使用
- (99)蓝图数组
- nginx + tomcat + memcached 负载均衡动静分离技术
- 如何让hive支持多字符分割列
- h5 26
- 2-23
- h5 27
- 交换大法 全排列
- 写微博授权时遇到的麻烦2之签名问题
- (100)数组节点
- 七、多线程(未完.待更)