server1:172.25.45.1 安装tomcat和memcached,做调度器,使用nginx
server4:172.25.45.4 安装tomcat和memcached
一、安装jdk
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
1、下载解压源码,设定链接(当jdk更新时,更新链接即可)
tar zxf jdk-7u70-linux-x64.tar.gz -C /usr/local
cd /usr/local
ln -s jdk.7.0_79/ java
2.添加环境变量
vim /etc/profile ###编写全局变量
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
加载后查看是否成功
echo $PATH
echo $JAVA_HOME
echo $CLASSPATH
3.java测试
vim test.java
public class test
{
public static void main(String[] args)
{ System.out.println("Hello World!");
}
}
javac test.java ##编译
java test ##运行脚本
二、安装 tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,Tomcat 技术先进、性能稳定,而且免费
1、解压源码,设定链接(当tomcat更新时,更新链接即可)
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local/
ls
ln -s apache-tomcat-7.0.37/ tomcat
ll
2.启动tomcat
cd tomcat/
ls
/bin/startip.sh ##开启tomcat服务
netstat -antlp | grep:8080 ##查看启动端口,tomcat端口为8080
网页测试:
172.25.45.1:8080
3.编写tomcat默认访问目录
cd webapps/ROOT/
vim test.jsp
server1-the time is:<%=new java.util.Date() %>
4.修改nginx配置文件,当访问.jsp文件时,自动跳转(保证主页的完整性,修改nginx的默认发布目录)
vim /usr/local/lnmp/nginx/conf/nginx.conf
nginx -s reload
网页测试:
172.25.45.1/index.jsp
vim /usr/local/lnmp/nginx/conf/nginx.conf
nginx -s reload
网页测试:
172.25.45.1/index.jsp
网页测试:
172.25.45.1:8080/test.jsp
三、在server1上编译安装配置nginx
tar zxf nginx-1.10.1.tar.gz
cd nginx-1.10.1
vim src/core/nginx.h
vim auto/cc/gcc
1·nginx编译
yum install gcc gcc-c++ openssl-devel pcre-devel -y
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/usr/local/nginx-sticky-module-ng
make && make install
cd /usr/local/lnmp/nginx/sbin
./nginx -t
./nginx
./nginx -s reload
2·做软链接
cd /usr/local/lnmp/nginx/sbin
ln -s /usr/local/lnmp/nginx/sbin/nginx /sbin/ ##做软链接
vim /usr/local/lnmp/nginx/conf/nginx.conf
./nginx -t ##检测
./nginx
页面访问:172.25.45.1
四、tomcat负载均衡
在server4中搭建tomcat:
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
tar zxf apache-tomcat-7.0.90.tar.gz -C /usr/local/
vim /etc/profile
source /etc/profile
cd /usr/local/
ln -s jdk1.7.0_79/ java
ln -s apache-tomcat-7.0.90/ tomcat
java ##检测语法
javac ##检测语法
cd /usr/local/tomcat/
bin/startup.sh ###启动tomcat
网页访问:172.25.45.4:8080
cd /usr/local/tomcat/webapps/ROOT/
cd usr/local/tomcat/webapps /ROOT
vim test.jsp
server4-The time is:<%=new java.util.Date()%>
网页访问:172.25.45.1/test.jsp,会产生轮询
五、在nginx中添加sticky算法模块,使tomcat中的数据能够得到缓存,不至于一添加就覆盖
sticky算法(比ip_hash更优化) cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发行者。 Sticky就是基于cookie的一种负载均衡解决方案, 通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。 请求来了,服务器发个cookie,并说:下次来带上,直接来找我。 Sticky工作原理 Sticky是nginx的一个模块,通过分发和识别cookie, 来使同一个客户端的请求落在同一台服务器上
在server1中:
cd /usr/local/tomcat/webapps/ROOT
vim 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>
scp test.jsp server4:/usr/local/tomcat/webapps/ROOT/
cd /usr/local/tomcat/logs/
cat catalina.out ##查看日志
nginx -s stop ###先关闭之前的nginx
编写配置文件
##如果添加sticky算法之后刷新nginx服务出现错误 则说明编译nginx时没有加nginx-sticky-module-ng模块 则需要重新编译并加上此模块 加此模块需要安装包nginx-sticky-module-ng.tar.gz
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
17 http {
18 upstream tomcat{
19 sticky; ###将sticky写入nginx配置文件
20 server 172.25.3.1:8080;
21 server 172.25.3.5:8080;
22 }
23 include mime.types;
24 default_type application/octet-stream;
nginx -s reload ###重新加载
nginx ###打开nginx
session不共享的情况:
session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
录入的文件会保存,但是时哪台服务器写入的,则会保存在哪个tomcat中
cd /usr/local/tomcat/logs
cat catalina.out
实现session共享
在server1中:
yum install memcached -y ###安装memcache,并且打开
/etc/init.d/memcached start
cd /usr/local/tomcat/conf/
vim context.xml ###编辑配置文件,内容如下
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n5:172.25.45.1:11211,n1:172.25.45.4:11211"
36 failoverNodes="n1"
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoder Factory"
39 />
在server4中:
yum install memcached -y ###安装memcache,并且打开
/etc/init.d/memcached start
cd /usr/local/tomcat/conf/
vim context.xml
然后将jar包所有文件放入/usr/local/tomcat/lib中,记住要删除memcache的6版本
yum install telnet -y (在server1和server4中分别安装)
telnet localhost 11211 ###查看session中存的数据
在server4中做和server1相同的配置,即上面的步骤
测试结果如下图: session会话在n2即server4上
如果server4的memcached(/etc/init.d/memcached stop)坏掉,那么session会来到server5上:
当server1的tomcat关闭之后 server info 可以看到tomcat服务跳到了server4上
当两个tomcat都挂掉之后,之前缓存在node2(server4)上的session依然在