node1:server1:172.25.44.1 ##配有nginx服务
node2:server2:172.25.44.2 ##没有nginx服务,与server1做以下的配置
测试真机:foundation44:172.25.44.250
实验环境:
getenforce
diabled
iptables off
以下内容先在node1上进行
###node1#####
配置java环境
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java
vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLA×××OOM=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile ##刷新
vim test.java ###建立测试文件
public class test {
public static void main(String[] arge)
{
System.out.println("Hello world") ;
}
}
javac test.java
java test
测试成功
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/ ##解压到/usr/local目录下
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat ##建立软连接方便管理
cd tomcat/webapps/bin
./startup.sh
netstat -antlpe | grep 8080
cd tomcat/webapps/ROOT
vim index.jsp ##原有网页显示脚本
vim test.jsp ##建立测试文件
页面访问172.25.44.1:8080
页面访问172.25.44.1:8080/test.jsp
更改配置
vim /usr/local/lnmp/nginx/conf/nginx.conf
加入语句
location ~ \.jsp$ {
proxy_pass http://172.25.44.1:8080;
}
页面就可直接访问172.25.44.1/test.jsp
负载均衡
vim /usr/local/lnmp/nginx/conf/nginx.conf
http {
upstream westos {
server 172.25.44.1:8080;
server 172.25.44.2:8080;
}
location ~ \.jsp$ {
proxy_pass http://westos;
}
nginx -t ##检测配置文件语法错误
nginx -s reload ##重新加载
负载均衡:
Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。
以下步骤在 node1 与 node2 上实施:
配置node1和node2
node1 172.25.44.1
node2 172.25.44.2
Node已经编译过apache和java配置文件
将已经生成的软连接内的文件远程复制到node2的/usr/local
cd /usr/local/
scp -r java/ tomcat/ 172.25.44.2:/usr/local
在node2中配置环境变量(与node1相同)
cd /usr/local/tomcat
bin/startup.sh ##开启apache
两边都安装memceche
yum install memcache -y
(1).(由于node1之前已经安装过nginx,此步骤目的是添加新的模块)
cd nginx-1.10.1
make clean
rm -fr nginx-1.10.1
tar zxf nginx-1.10.1.tar.gz zxf
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
cd nginx-1.10.1
加入第三方模块nginx-sticky-module,这个模块可以确保同一个用户的访问请求都被发送到同一个tomcat上处理。
./configure --prefix=/usr/local/lnmp/nginx/ --with-http_ssl_module --with-http_stub_status_module --add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
make
make install
vim /usr/local/lnmp/nginx/conf/nginx.conf
http {
upstream westos {
sticky;
server 172.25.44.1:8080;
server 172.25.44.2:8080;
}
nginx -t
nginx -s reolad
#以下为node1和node2都要进行的配置,以node1为例#
(2).
把如下软件包放置到/usr/local/tomcat/lib 目录中
asm-3.2.jar
reflectasm-1.01.jar
kryo-1.04.jar
memcached-session-manager-tc7-1.6.3.jar
spymemcached-2.7.3.jar
kryo-serializers-0.10.jar
minlog-1.2.jar
memcached-session-manager-1.6.3.jar
msm-kryo-serializer-1.6.3.jar
[root@server2 lib]# ls
annotations-api.jar jsp-api.jar tomcat-api.jar
asm-3.2.jar kryo-1.04.jar tomcat-coyote.jar
catalina-ant.jar kryo-serializers-0.10.jar tomcat-dbcp.jar
catalina-ha.jar memcached-session-manager-1.6.3.jar tomcat-i18n-es.jar
catalina.jar memcached-session-manager-tc7-1.6.3.jar tomcat-i18n-fr.jar
catalina-tribes.jar minlog-1.2.jar tomcat-i18n-ja.jar
ecj-4.2.1.jar msm-kryo-serializer-1.6.3.jar tomcat-jdbc.jar
el-api.jar reflectasm-1.01.jar tomcat-util.jar
jasper-el.jar servlet-api.jar
jasper.jar spymemcached-2.7.3.jar
(3).yum install memcached -y
/etc/init.d/memcached start
(4).vim /usr/local/tomcat/conf/content.xml
加入如下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.44.1:11211,n2:172.25.44.2:11211"
failoverNodes="n1" ##在node2上改成n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/> ##将信息存储在n2上,当n2出现问题时,就会转存到n1中
退出保存
重新开启tomcat
bin/startup.sh
tail -f logs/catalina.out ##可查看更新后的配置后的信息
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1] ##证明配置成功
(5).
建立测试页面文件
vim /usrlocal/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>
(6).用页面访问172.25.44.1/test.jsp
通过建立不同的用户信息来检测存储情况
例如
此时服务node1正常运行,所存储的信息保存在n2上,
在真机上测试安装telnet
Telnet 172.25.44.1 11211
信息并没存储在node1上
telnet 172.25.44.2 11211
用户信息都在n2上存储
当node1和n1同时坏掉,
所以即使T1和n1同时down掉,信息也不回丢失。