linux安装tomcat8.0,nginx+tomcat+memcached集群

linux安装tomcat8.0,nginx+tomcat+memcached集群

名词
jdk (jre,jvm)       (跑任何java程序或软件,都需要先安装jdk)
j2ee javaee  Enterprise Edition
j2se    javase  Standard Edition
j2me    javame  Micro Edition
中间件


j2ee平台由一整套服务,应用程序接口和协议规范组成

Java 2 Platform,Enterprise Edition

tomcat  (apache软件基金会)
jboss wildfly  (redhat)
weblogic  (oracle)
websphere  (IBM)
resin  (CAUCHO)


tomcat   

apache + tomcat 

官网地址:
http://tomcat.apache.org/

JDK  (java   development  kit)  ,JDK是整个JAVA的核心,包括了JAVA运行环境,JAVA工具和基础类库等。

软件包下载:
https://yunpan.cn/c67bN2w6A8MZL 
访问密码 a459

tomcat8.0.20的安装过程

1,安装jdk

准备:
关闭selinux【略】
关闭防火墙
/etc/init.d/iptables stop

# java -version  --查看本机默认使用的java版本,这个是本机rpm版的,我下面使用的是新下载的java版本
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)


2,解压安装新版本jdk

tar xf jdk-8u45-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk1.8.0_45/  /usr/local/java/

3,解压安装新版本tomcat

tar xf apache-tomcat-8.0.20.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.0.20/ /usr/local/tomcat


4,tomcat的环境变量的定义

定义在单个tomcat的启动和关闭程序里

vim /usr/local/tomcat/bin/startup.sh
vim /usr/local/tomcat/bin/shutdown.sh

把startup.sh和shutdown.sh这两个脚本里的最前面(但要在#!/bin/bash下在)加上下面一段

export JAVA_HOME=/usr/local/java
export TOMCAT_HOME=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CLASS_PATH=$JAVA_HOME/bin/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tool.jar
export PATH=$PATH:/usr/local/java/bin:/usr/local/tomcat/bin


启动方法:

/usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
lsof -i:8080  --端口还是8080
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    4224 root   44u  IPv6  40596      0t0  TCP *:webcache (LISTEN)

使用firefox访问
http://IP:8080


关闭方法
/usr/local/tomcat/bin/shutdown.sh

家目录路径:
/usr/local/tomcat/webapps/ROOT/

————————————-

修改监听端口

# vim /usr/local/tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"  --把8080改成80的话重启后就监听80
               connectionTimeout="20000"
               redirectPort="8443" />

–测试后再改回8080端口


————————————-

测试页面:

# mkdir /usr/local/tomcat/webapps/abc
# vim /usr/local/tomcat/webapps/abc/time.jsp
<html>
<body>
<center>
<H1><%=new java.util.Date()%></H1>
</center>
</body>
</html>
http://IP:8080/abc/time.jsp


=====================================================================

安装完tomcat后,就可以将开发的java应用装上进行测试了
因为java开发的开源应用非常少,并且很多不支持较新版本的tomcat,我们这里又是实验环境,所以这里简单安装一个jspxcms让大家看下效果

一个开源的java cms系统jspxcms(java内容管理系统)

软件包:
jspxcms-5.2.4-release.zip


步骤:
1,解压jspxcms

rm /usr/local/tomcat/webapps/ROOT/*  -rf   --解压之前先删除原来家目录里的文件
unzip jspxcms-5.2.4-release.zip -d /usr/local/tomcat/webapps/

2,去mysql建一个库,进行授权

# yum install mysql* -y
 # /etc/init.d/mysqld  restart
# mysql
 mysql> create database jspxcms;
 Query OK, 1 row affected (0.00 sec)
mysql> grant all on jspxcms.* to 'li'@'localhost' identified by '123';
 Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;

3,使用firefox的下面路径按照它的步骤进行安装
http://IP:8080/

4,重启tomcat后,再使用下面路径访问就可以了

/usr/local/tomcat/bin/shutdown.sh
 /usr/local/tomcat/bin/startup.sh 

 前台访问地址:
http://IP:8080/
后台访问地址:(需要admin用户和其密码登录才有权限)
http://IP:8080/cmscp/index.do


=====================================================================

上面讨论的是单机的tomcat加应用的做法,那么如果负载和并发大,那么单机会顶不住压力,下面就讨论架构做法

apache跑静态页面速度快且稳定,不可以跑java程序
tomcat也可以跑静态页面,但速度较慢,可以跑java程序

所以就有了apache+tomcat的整合应用(动静分离)

        client(DNS轮循)
   apache1  apache2
        mod_jk
   tomcat1 tomcat2
         client
        lvs主 lvs备
   apache1  apache2
        mod_jk
   tomcat1 tomcat2


     

方法有:
1,apache+tomcat+mod_jk+session复制 (对于现在来说,相对较老的方案)
2,nginx+tomcat+msm(memcached-session-manager) (现在的流行方案)

      client
         |
         |  DNS轮循,反向代理(squid,nginx等),LVS
         |
       nginx1 nginx2
       tomcat1 tomcat2


=====================================================================

下面就配置nginx+tomcat+msm(memcachedsessionmanager)做综合应用


由于http是无状态的协议,你访问了页面A,然后在访问B,http无法确定这2个访问来自一个人,因此要用cookie或session来跟踪用户,根据授权和用户身份来显示不同的页面。

比如用户A登陆了,那么能看到自己的个人信息,而B没登陆,无法看到个人信息。
还有A可能在购物,把商品放入购物车,此时B也有这个过程,你无法确定A,B的身份和购物信息,所以需要一个session ID来维持这个过程。

cookie是服务器发给客户端,并且保持在客户端的一个文件,里面包含了用户的访问信息(账户密码等),可以手动删除或设置有效期,在下次访问的时候,会返给服务器。

注意:cookie可以被禁用,所以要想其他办法,这就是session。

比如:你去商场购物,商场会给你办一张会员卡,下次你来出示该卡,会有打折优惠.该卡可以自己保存(cookie),或是商场代为保管,由于会员太多,个人需要保存卡号信息(session ID)。


——————————————————–


一、Session Replication 方式管理 (session复制)

        简介:将一台机器上的Session数据广播复制到集群中其余机器上

        使用场景:机器较少,网络流量较小

        优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问

        缺点:广播式复制到其余机器有一定廷时,带来一定网络开销


二、Session Sticky 方式管理

        简介:即粘性Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上

        使用场景:机器数适中、对稳定性要求不是非常苛刻

        优点:实现简单、配置方便、没有额外网络开销

        缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障


三、缓存集中式管理

       简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息

       使用场景:集群中机器数多、网络环境复杂

       优点:可靠性好

       缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入


—————————————————

关于session的讨论

方法大概有:

一,用cookies

二,用nginx里的ip_hash,做成类似sticky session(粘贴会话在一台服务器上)的做法

upstream tomcat {
  ip_hash;
  server 192.168.1.128:8080 weight=1;
  server 192.168.1.129:8080 weight=1;
 }


优点:配置简单,方便
缺点:可能会造成负载不均衡


三,如果是使用tomcat,可以使用tomcat的组播功能(session复制)

缺点:难配置,组播会影响整个架构性

四,利用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能,可通过http://code.google.com/p/nginx-upstream-jvm-route/downloads/list获取。


五,memcache来共享session(memcached-session-manager)


   我client


  张三  李四
  tomcat1  tomcat2


       王五memcached

==========================================


下图中:
10.1.1.0/24网络我模拟外网(这里我用vmware的桥接网络来模拟)
192.168.1.0/24网络我模拟内网(这里我用vmware的vmnet1网络来模拟)
 


nginx做反向加解析静态页面
tomcat解析java动态程序

    client  10.1.1.9
       |
       | 10.1.1.10
            nginx
       |     192.168.1.127
       |
     |----------|
    tomcat1          tomcat2
  192.168.1.128     192.168.1.129
            |                     |
         |----------------------|
                       |
                       |
        192.168.1.130  【memcached服务器】


实验前准备:
1,主机名三步绑定
192.168.1.127 nginx.cluster.com
192.168.1.128 tomcat1.cluster.com
192.168.1.129 tomcat2.cluster.com
192.168.1.130 memcached.cluster.com

2,时间同步
3,关闭iptables,selinux
4,配置yum


第一步:
1,在192.168.1.127上安装nginx

# yum install pcre-devel -y
 # useradd -r -d /dev/null -s /bin/false nginx  --我这里建立一个用户来跑nginx,不做也可以,它默认是用daemon用户来跑
# id nginx  --nginx的uid,gid无所谓是多少
uid=517(nginx) gid=518(nginx) groups=518(nginx)
 # tar xf nginx-1.8.0.tar.gz -C /usr/src/
 # cd /usr/src/nginx-1.8.0/
 # ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module  --with-http_stub_status_module
 # make ;make install

 

2,配置nginx

# cat /usr/local/nginx/conf/nginx.conf
 user  nginx nginx;
 worker_processes  8;
 error_log  logs/error.log  info;
 pid        logs/nginx.pid;
events {
     worker_connections  65535;
     use epoll;
 }
 http {
     include       mime.types;
     default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile        on;
     keepalive_timeout  65;
upstream tomcat {
  server 192.168.1.128:8080 weight=1;
  server 192.168.1.129:8080 weight=1;
 }
    server {
         listen       80;
         server_name  10.1.1.10;
  root /nginxroot/;
  index index.jsp index.html;
         access_log  logs/host.access.log  main;
 location ~ .*\.jsp$ {
      proxy_pass   http://tomcat;
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;
  }
    }
 }
 # mkdir /nginxroot/
 # ulimit -SHn 65535
 # /usr/local/nginx/sbin/nginx
 # lsof -i:80

第二步:
在192.168.1.128和192.168.1.129上安装两台tomcat(过程省略,建议tomcat重新安装,因为如果前面tomcat安装了jspxcms这个应用的话,会对后面的测试造成影响)


tomcat1和tomcat2上把下面的软件包都scp到/usr/local/tomcat/lib/目录下

# ls 笔记目录/program/tomcat_soft/msm/   –这些软件包是针对tomcat8的,如果你是tomcat6或者tomcat7你需要自行网上下载
asm-3.2.jar                              msm-kryo-serializer-1.8.1.jar
kryo-1.04.jar                            reflectasm-1.01.jar
memcached-session-manager-1.8.1.jar      serializers-0.11.jar
memcached-session-manager-tc8-1.8.1.jar  spymemcached-2.11.1.jar
minlog-1.2.jar

第三步:
在tomcat1和tomcat2上操作

# vim /usr/local/tomcat/conf/context.xml  (在此文件的<Context>和</Context>里面加上下面一段)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   memcachedNodes="n1:192.168.1.130:11211"    --这里的ip为memcached服务器的IP,如果有多个memcached服务器,用逗号隔开
  lockingMode="auto"
   sticky="false"
   requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
   sessionBackupAsync= "false"
   sessionBackupTimeout= "100"
   copyCollectionsForSerialization="true"
   transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
并把两台tomcat分别启动(如果你先前启动了要重启)
 # /usr/local/tomcat/bin/shutdown.sh
 # /usr/local/tomcat/bin/startup.sh
 # lsof -i:8080


第四步:
在192.168.1.130上安装并启动memcached
软件包在  笔记目录/program/lnmp_soft/

# tar xf libevent-1.4.11-stable.tar.gz -C /usr/src/
 # cd /usr/src/libevent-1.4.11-stable/
# ./configure ;make ;make install
# tar xf memcached-1.4.22.tar.gz -C /usr/src/
 # cd /usr/src/memcached-1.4.22/
# ./configure --with-libevent=/usr/local/ ;make ;make install
 # /usr/local/bin/memcached -d -m 100 -u root
 # lsof -i:11211


第五步:
我这里nginx,tomcat1,tomcat2是合起来做一个应用,所以它们的家目录里的内容应该是一样的,如何让一个应用内容在它们那里一致?
方法1:远程实时rsync同步
方法2:共享存储或分布式存储(后面课程会讲,但现在也可以使用nfs来模拟共享存储)


在nginx的家目录/nginxroot/里,并且在tomcat1和tomcat2的家目录/usr/local/tomcat/webapps/ROOT/里建立一个测试文件(如果有nfs做共享存储,则只需要建立一次就可以了)

# vim session.jsp
 SessionID:<%=session.getId()%> <BR>
 SessionIP:<%=request.getServerName()%> <BR>
 SessionPort:<%=request.getServerPort()%>

第六步:
确认nginx和tomcat1和tomcat2和memcached都是启动状态,客户端使用firefox来测试


测试一:
http://10.1.1.10/session.jsp  –不断F5刷新,sessionID是不变的


elinks -dump http://10.1.1.10/session.jsp –不要使用这种方式来测,这样测试session id是会变的(elinks不能像firefox那样存放session id),但也会存储到memcache中


在memcache服务器上进行下面的操作

# echo "stats cachedump 3 0" | nc 192.168.1.130 11211 > /tmp/session.txt
 # cat /tmp/session.txt |head -1 --导出的第一行的session ID就等于上面页面刷新时的session id,说明session id确实存放在memcache里
ITEM validity:A8F853F36B9931DD5ADF51DFB806A0CF-n1 [20 b; 1442225217 s]


测试二:
分别把tomcat1和tomcat2里的第三步做的加到/usr/local/tomcat/conf/context.xml这个文件里的一段给注释掉,重启tomcat,再做上面的测试


http://10.1.1.10/session.jsp  –不断F5刷新,sessionID是会变化的

在memcache服务器上进行下面的操作
# echo “stats cachedump 3 0” | nc 192.168.1.130 11211 > /tmp/session.txt
# cat /tmp/session.txt   –这次不会记录与firefox页面刷的session ID,说明session ID没有记录到memcache里


=====================================================================

拓展架构:

    client  10.1.1.9
     DNS轮循(同一域名轮循解析成两个nginx的公网IP)
       |
   10.1.1.10   | 10.1.1.11
    nginx1   nginx2
   192.168.1.126   |     192.168.1.127
                   |
     |----------| tomcat1          tomcat2
  192.168.1.128     192.168.1.129
                       |        |
        |----------------------|
             |
             |
             |
         |----------------------|
      memcached1  |   memcached2
   192.168.1.130  |    192.168.1.131
                  |
                  |
                  |
   mysql集群+分布式存储(或nfs模拟)


===================================


有兴趣可以去查一下一些老的做法如:session 复制,mod_jk等

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇