阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat+Nginx+Memcacheed集群部署

143次阅读
没有评论

共计 11326 个字符,预计需要花费 29 分钟才能阅读完成。

Tomcat+Nginx+Memcacheed 集群部署

主机环境 RedHat6.5 64 位
实验环境 服务端 1 ip172.25.29.1  nginx
服务端 2 ip 172.25.29.2    tomcat+memcached
服务端 3 ip 172.25.29.3    tomcat+memcaceed
安装包  jdk-7u79-linux-x64.tar.gz
 apache-tomcat-7.0.37.tar.gz
 nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
 asm-3.2.jar
 kryo-1.04.jar
 kryo-serializers-0.10.jar
 memcached-session-manager-1.6.3.jar
 memcached-session-manager-tc7-1.6.3.jar
 minlog-1.2.jar
 msm-kryo-serializer-1.6.3.jar
 reflectasm-1.01.jar
 spymemcached-2.7.3.jar
防火墙状态 关闭
 
1.jdk 安装、环境配置及测试服务端 2
1. 解压、作软链接
[root@server2mnt]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/  #解压 jdk
[root@server2mnt]# cd /usr/local/      #切换到解压目录
[root@server2local]# ls
bin  etc games  include  jdk1.7.0_79 lib  lib64  libexec sbin  share  src
[root@server2local]# ln -s jdk1.7.0_79/ Java      #作软链接
[root@server2local]# ll
total44
drwxr-xr-x.2 root root 4096 Jun 28  2011 bin
drwxr-xr-x.2 root root 4096 Jun 28  2011 etc
drwxr-xr-x.2 root root 4096 Jun 28  2011 games
drwxr-xr-x.2 root root 4096 Jun 28  2011 include
lrwxrwxrwx.1 root root  12 Sep 24 10:50 java ->jdk1.7.0_79/    #查看
drwxr-xr-x.8 uucp  143 4096 Apr 11  2015 jdk1.7.0_79
drwxr-xr-x.2 root root 4096 Jun 28  2011 lib
drwxr-xr-x.2 root root 4096 Jun 28  2011 lib64
drwxr-xr-x.2 root root 4096 Jun 28  2011 libexec
drwxr-xr-x.2 root root 4096 Jun 28  2011 sbin
drwxr-xr-x.5 root root 4096 Aug  8 21:38 share
drwxr-xr-x.2 root root 4096 Jun 28  2011 src
2. 将 jdk 添加到环境变量
[root@server2local]# vim /etc/profile   
 79 export JAVA_HOME=/usr/local/java
 80 exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 81 export PATH=$PATH:$JAVA_HOME/bin
[root@server2local]# source /etc/profile
3. 测试
[root@server2local]# echo $JAVA_HOME    #测试添加环境变量是否成功
/usr/local/java
[root@server2local]# echo $CLASSPATH
.:/usr/local/java/lib:/usr/local/java/jre/lib
[root@server2local]# echo $JAVA_HOME   
/usr/local/java
[root@server2local]# cd java      #测试 java 的环境是否配置成功
[root@server2java]# vim test.java    #写个简单的测试页
  1 public class test{
  2        public static void main(String[] args)
  3        {
  4                System.out.println(“Helloworld!”);
  5        }
  6 }
[root@server2java]# javac test.java    #链接生成 test.class 文件
[root@server2mnt]# java test    #执行
Helloworld!
 
2.tomcat 的安装服务端 2
1. 解压、作软链接
[root@server2mnt]# tar zxf apache-tomcat-7.0.8.tar.gz -C /usr/local/  #解压
[root@server2mnt]# cd /usr/local/
[root@server2local]# ls
apache-tomcat-7.0.8  etc  include  jdk1.7.0_79  lib64  sbin  src
bin                  games  java    lib          libexec  share
[root@server2local]# ln -s apache-tomcat-7.0.8/ tomcat  #作软链接
[root@server2local]# ll
total48
drwxr-xr-x.9 root root 4096 Sep 24 11:11 apache-tomcat-7.0.8
drwxr-xr-x.2 root root 4096 Jun 28  2011 bin
drwxr-xr-x.2 root root 4096 Jun 28  2011 etc
drwxr-xr-x.2 root root 4096 Jun 28  2011 games
drwxr-xr-x.2 root root 4096 Jun 28  2011 include
lrwxrwxrwx.1 root root  12 Sep 24 10:50 java ->jdk1.7.0_79/
drwxr-xr-x.8 uucp  143 4096 Sep 24 11:02 jdk1.7.0_79
drwxr-xr-x.2 root root 4096 Jun 28  2011 lib
drwxr-xr-x.2 root root 4096 Jun 28  2011 lib64
drwxr-xr-x.2 root root 4096 Jun 28  2011 libexec
drwxr-xr-x.2 root root 4096 Jun 28  2011 sbin
drwxr-xr-x.5 root root 4096 Aug  8 21:38 share
drwxr-xr-x.2 root root 4096 Jun 28  2011 src
lrwxrwxrwx.1 root root  20 Sep 24 11:12 tomcat-> apache-tomcat-7.0.8/    #查看
[root@server2local]# cd tomcat/bin
[root@server2bin]# ./startup.sh    #开启 tomcat
 
2. 测试
[root@server2bin]#cd ..
[root@server2tomcat]# vim webapps/ROOT/test.jsp    #写测试仪页
  1 server2-The Time is <%=newjava.util.Date()%>
# 测试 172.25.29.2:8080

Tomcat+Nginx+Memcacheed 集群部署

172.25.29.2:8080/test.jsp

Tomcat+Nginx+Memcacheed 集群部署

在服务端 3 上进行同样的配置也可以用 scp 把服务端 2 上 java 和 tomcat 目录传过去如下
[root@server2local]# scp -r java/ tomcat/ 172.25.29.3:/usr/local/
在进行系统环境里加上 java 的配置启动 tomcat 即可
 
3.Nginx 添加 sticky  (服务端 1)
1.nginx 负载均衡已经配置好了
在前面的博客里已经写过 nginx 源码安装这里就不再重复了也可以参考前面的博客
[root@server1~]# cd /usr/local/lnmp/nginx/conf 
[root@server1conf]# vim nginx.conf
 20    upstream wen {
 21                server 172.25.29.2:8080;    #轮询机制
 22                server 172.25.29.3:8080;
 23        }
 49        location / {
 50            root  html;
 51            index  index.html index.jspindex.php index.htm;  #默认发布目录
 52        }
 
 68        location ~ \.jsp$ {
 69            proxy_pass  http://wen;
 70        }
[root@server1conf]# nginx -t    #检测
nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1conf]# nginx -s reload    #刷新
测试 172.25.29.1

Tomcat+Nginx+Memcacheed 集群部署
 
172.25.29.1/test.jsp

Tomcat+Nginx+Memcacheed 集群部署

刷新之后

Tomcat+Nginx+Memcacheed 集群部署

也就是 server2 和 server3 相互交替
 
2. 改变负载均衡机制为 sticky
由于 nginx 是轮询机制如果在访问页面如填写信息时突然卡住刷新之后就会跳到另一个 server 上就得重新开始填写。但是 Nginx 里有很多算法其中的 ip_hash 也可以防止这些问题。使用 ip_hash 有一个问题是当客户端和服务器之间使用 cdn 内容分发系统高速缓存时客户端的访问到达 cdn 由 cdn 访问服务器识别的 ip 是 cdn 的 ip 那么将集中于访问后台的一台服务器 (x 相当于 DDOS 攻击) 会加速服务器的损坏。那么为了防止这些问题就有用下面的算法 sticky 不是 nginx 里自带的 nginx-sticky-module 为 nginx 的第三方模块, 使 nginx 支持 sticky 模式, 所以需要将包加入配置、重新编译、安装 nginx
 
1. 重新源码安装 nginx 添加一个模块
[root@server1local]# nginx -s stop      #关闭 nginx
[root@server1mnt]# tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz #解压
[root@server1mnt]# ls
nginx-1.8.1.tar.gz
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
 
[root@server1nginx-1.8.1]# make clean    #清除上一次的缓存文件
rm-rf Makefile objs
[root@server1nginx-1.10.1]# ./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
[root@server1nginx-1.8.1]# make    #编译、链接
[root@server1nginx-1.8.1]# make install  #安装
[root@server1nginx-1.8.1]#cd /usr/local/lnmp/nginx/conf
[root@server1conf]# vim nginx.conf
 18        upstream westos{
 19                sticky;    #使用 sticky
 20                server 172.25.29.2:8080;
 21                server 172.25.29.3:8080;
[root@server1local]# nginx -t  #检测 nginx 文件里是否有错误
nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1local]# nginx  #启动
2. 测试
测试 172.25.29.1/test.jsp

Tomcat+Nginx+Memcacheed 集群部署

刷新之后结果不变还是

Tomcat+Nginx+Memcacheed 集群部署
 
4 交叉存储避免单点故障添加 memcached 服务端 2
配置好之后如果一台服务器宕机了那么这台服务器正在运行的业务将直接结束正在存储的数据丢失。为了防止这些问题 Tomcat1 将 session 存储到 Tomcat2 的 memcached 中当 Tomcat2 的 memcached 不可用时 Tomcat1 将 session 存储到自己的 memcached 上 Tomcat2 则正好相反。使用这种配置就避免了单点故障。
1. 安装、开启 memcached、写测试页
[root@server2ROOT]# yum install -y memcached      #安装 memcached
[root@server2ROOT]# /etc/init.d/memcached start      #开启 memcached
Startingmemcached:                                        [OK]
[root@server2tomcat]# bin/shutdown.sh  #关闭 Tomcat
[root@server2ROOT]# vim test.jsp    #写一个 jsp 的测试页面
  1 <%@ page contentType=”text/html;charset=GBK” %>
  2 <%@ page import=”java.util.*”%>
  3<html><head><title>Cluster AppTest</title></head>
  4 <body>
  5 Server Info:
  6 <%
  7 out.println(request.getLocalAddr() + “: ” + request.getLocalPort()+”<br>”);%    >
  8 <%
  9 out.println(“<br> ID ” + session.getId()+”<br>”);
 10 String dataName =request.getParameter(“dataName”);
 11 if (dataName != null &&dataName.length() > 0) {
 12 String dataValue =request.getParameter(“dataValue”);
 13 session.setAttribute(dataName, dataValue);
 14 }
 15 out.print(“<b>Sessionlist</b>”);
 16 Enumeration e =session.getAttributeNames();
 17 while (e.hasMoreElements()) {
 18 String name = (String)e.nextElement();
 19 String value =session.getAttribute(name).toString();
 20 out.println(name + ” = ” +value+”<br>”);
 21 System.out.println(name + ” = “+ value);
 22 }
 23 %>
 24 <form action=”test.jsp”method=”POST”>
 25 name:<input type=text size=20name=”dataName”>
 26 <br>
 27 key:<input type=text size=20name=”dataValue”>
 28 <br>
 29 <input type=submit>
 30 </form>
 31 </body>
 32 </html>

[root@server2ROOT]# cd /usr/local/tomcat/lib
[root@server2mnt]# ls /mnt/update/      #先前下载好的包
asm-3.2.jar                              minlog-1.2.jar
kryo-1.04.jar                          msm-kryo-serializer-1.6.3.jar
kryo-serializers-0.10.jar                reflectasm-1.01.jar
memcached-session-manager-1.6.3.jar      spymemcached-2.7.3.jar
memcached-session-manager-tc7-1.6.3.jar
[root@server2mnt]# cd /usr/local/tomcat/lib/
[root@server2lib]# mv /mnt/update/* .    #将包移动到指定路径
[root@server2lib]# ls
annotations-api.jar                memcached-session-manager-tc7-1.6.3.jar
asm-3.2.jar                          minlog-1.2.jar
catalina-ant.jar                    msm-kryo-serializer-1.6.3.jar
catalina-ha.jar                      reflectasm-1.01.jar
catalina.jar                        servlet-api.jar
catalina-tribes.jar                  spymemcached-2.7.3.jar
ecj-4.2.1.jar                        tomcat-api.jar
el-api.jar                          tomcat-coyote.jar
jasper-el.jar                        tomcat-dbcp.jar
jasper.jar                          tomcat-i18n-es.jar
jsp-api.jar                          tomcat-i18n-fr.jar
kryo-1.04.jar                        tomcat-i18n-ja.jar
kryo-serializers-0.10.jar            tomcat-jdbc.jar
memcached-session-manager-1.6.3.jar  tomcat-util.jar
[root@server2lib]# cd ..
UsingCATALINA_BASE:  /usr/local/tomcat
UsingCATALINA_HOME:  /usr/local/tomcat
UsingCATALINA_TMPDIR: /usr/local/tomcat/temp
UsingJRE_HOME:        /usr/local/java
UsingCLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@server2tomcat]# vim conf/context.xml    #添加节点及节点失效后该怎么存储
 34 <ManagerclassName=”de.javakaffee.web.msm.MemcachedBackupSessionManager”
 35memcachedNodes=”n1:172.25.29.2:11211,n2:172.25.29.3:11211″    #结点
 36 failoverNodes=”n1″          #当 n2 失效时存储到 n1 上
 37requestUriIgnorePattern=”.*\.(ico|png|gif|jpg|css|js)$”
 38transcoderFactoryClass=”de.javakaffee.web.msm.serializer.kryo.KryoTranscoderF    actory”
 39 />
[root@server2tomcat]# bin/startup.sh  #开启 Tomcat
服务端 3 和服务端 2 的配置基本相同唯一不同的是上面提到的 /usr/local/tomcat/conf/context.xml 里的 36 行把“n1”改成“n2”可以用 scp 传过去再做修改。
 
2. 测试
测试 172.25.29.1/test.jsp

Tomcat+Nginx+Memcacheed 集群部署

添加用户

Tomcat+Nginx+Memcacheed 集群部署

添加完成

Tomcat+Nginx+Memcacheed 集群部署

添加 3 个用户

Tomcat+Nginx+Memcacheed 集群部署

Tomcat+Nginx+Memcacheed 集群部署

[root@server2tomcat]# tail -f logs/catalina.out      #查看日志
Sep28, 2016 11:39:53 PM de.javakaffee.web.msm.serializer.kryo.KryoTranscoder<init>
INFO:Starting with initialBufferSize 102400 and maxBufferSize 2048000
Sep28, 2016 11:39:53 PM de.javakaffee.web.msm.MemcachedSessionServicestartInternal
INFO:MemcachedSessionService finished initialization, sticky true, operation timeout1000, with node ids [n2] and failover node ids [n1]
Sep28, 2016 11:39:53 PM org.apache.coyote.AbstractProtocol start
INFO:Starting ProtocolHandler [“http-bio-8080”]
Sep28, 2016 11:39:53 PM org.apache.coyote.AbstractProtocol start
INFO:Starting ProtocolHandler [“ajp-bio-8009”]
Sep28, 2016 11:39:53 PM org.apache.catalina.startup.Catalina start
INFO:Server startup in 1921 ms
user1= 111
user2= 222
user1= 111          #上面创建的用户
user2= 222
user1= 111
user3= 333
^C
[root@server2tomcat]# telnet 172.25.29.3 11211  #远程登陆服务端 3 查看是否是否写进入 11211 是 memcached 的端口号
Trying172.25.29.3…
Connectedto 172.25.29.3.
Escapecharacter is ‘^]’.
get50B9BAB1CBB21C9BF884CC3613560752-n2  #get 后面的是上面截图里的 ID
VALUE50B9BAB1CBB21C9BF884CC3613560752-n2 2048 125
[1]WWqt2Wqt01WqtWqt#50B9BAB1CBB21C9BF884CC3613560752-n2
user2
222user1
111user3
333      #大概可以看出来添加的用户
END
quit
Connectionclosed by foreign host.
 
[root@server2tomcat]# bin/shutdown.sh  #关闭 Tomcat1
UsingCATALINA_BASE:  /usr/local/tomcat
UsingCATALINA_HOME:  /usr/local/tomcat
UsingCATALINA_TMPDIR: /usr/local/tomcat/temp
UsingJRE_HOME:        /usr/local/java
UsingCLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
 
当关闭 Tomcat1 续输入数据时并没有中断而是跳到 Tomcat2 上且数据并未丢失

Tomcat+Nginx+Memcacheed 集群部署

[root@server2tomcat]# telnet 172.25.29.3 11211    #远程登陆服务端 3
Trying172.25.29.3…
Connectedto 172.25.29.3.
Escapecharacter is ‘^]’.
get50B9BAB1CBB21C9BF884CC3613560752-n2
VALUE50B9BAB1CBB21C9BF884CC3613560752-n2 2048 137
[1]WWqt2Wqu01WquWqu4#50B9BAB1CBB21C9BF884CC3613560752-n2

——————————————————————————–
user2  222user1  111user4  444user3  333  #大概可以看到数据还是写入服务端 3
END
quit
Connectionclosed by foreign host.

更多 Tomcat 相关教程见以下内容

CentOS 6.6 下安装配置 Tomcat 环境  http://www.linuxidc.com/Linux/2015-08/122234.htm

RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目  http://www.linuxidc.com/Linux/2015-02/113528.htm 

Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签)  http://www.linuxidc.com/Linux/2015-02/113062.htm 

Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm 

Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm 

CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm 

CentOS 6.5 下安装 Tomcat  http://www.linuxidc.com/Linux/2015-01/111415.htm 

Tomcat 中 session 的管理机制  http://www.linuxidc.com/Linux/2016-09/135072.htm

Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/135984tm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计11326字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中