-- 名词 jdk (jre,jvm) j2ee j2se j2me 中间件 j2ee平台由一整套服务,应用程序接口和协议规范组成 Java 2 Platform,Enterprise Edition tomcat (apache软件基金会) weblogic (oracle) jboss wildfly  (redhat) websphere (IBM) resin (CAUCHO) tomcat apache + tomcat 官网地址: http://tomcat.apache.org/ JDK (java development kit) ,JDK是整个JAVA的核心,包括了JAVA运行环境,JAVA工具和基础类库等。 tomcat apache + tomcat 官网地址: http://tomcat.apache.org/ JDK (java development kit) ,JDK是整个JAVA的核心,包括了JAVA运行环境,JAVA工具和基础类库等。 软件包 笔记目录/tomcat_soft/ tomcat8.0.20的安装过程 1,安装jdk # 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 tomcat的环境变量的定义 一种是定义在全局里;如果装有多个JDK的话,定义全局会冲突 vim /etc/profile source /etc/profile 另一种是定义在单个tomcat的启动和关闭程序里,建议使用这种 /usr/local/tomcat/bin/startup.sh /usr/local/tomcat/bin/shutdown.sh 把startup.sh和shutdown.sh这两个脚本里的最前面加上下面一段 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 --测试后再改回8080端口 --------------------------------------- 目录布署 # mkdir /usr/local/tomcat/webapps/abc --把abc目录与ROOT同级或者是在ROOT的下一级都是可行的 # vim /usr/local/tomcat/webapps/abc/time.jsp

<%=new java.util.Date()%>

---------------------------------------------------------- 安装jsprun linux + apache + php + mysql linux + nginx + php(fastcgi) + mysql linux + tomcat + jsp + mysql 软件包: mysql-connector-java-5.1.8.tar.gz --mysql与java连接 JspRun_v6.0.0_UTF8.zip --jsprun论坛 解压jsprun论坛程序包,放到$TOMCAT_HOME/webapps/jsprun/ # unzip JspRun_v6.0.0_UTF8.zip -d /usr/local/tomcat/webapps/ --如果你想直接访问域名后(如http://www.xxx.com/)就能访问到你的网站,就把webapps/ROOT干掉,再把jsprun重命名成ROOT就可以了; --我这里不干掉webapps/ROOT,那么我们就要用http://www.xxx.com/jsprun的路径来访问了 mv /usr/local/tomcat/webapps/JspRun\!_6.0.0_UTF8/ /usr/local/tomcat/webapps/jsprun/ # cd /usr/local/tomcat/webapps/jsprun/ # mv upload/* . # rm upload/ -rf 解压mysql与java连接工具包 # tar xvf mysql-connector-java-5.1.8.tar.gz -C /usr/src/ 解压后,分别把连接工具拷到JAVA目录和tomcat的网页目录 # cp /usr/src/mysql-connector-java-5.1.8/mysql-connector-java-5.1.8-bin.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/ # cp /usr/src/mysql-connector-java-5.1.8/mysql-connector-java-5.1.8-bin.jar /usr/local/tomcat/webapps/jsprun/WEB-INF/ # yum install mysql* -y # /etc/init.d/mysqld start # mysql mysql> create database bbs; mysql> grant all on bbs.* to 'bbs'@'localhost' identified by '123'; mysql> flush privileges; # vim /usr/local/tomcat/webapps/jsprun/config.properties dbhost = localhost --修改数据库地址 dbport=3306 --端口 dbuser = bbs --连接用户名 dbpw = 123 --密码 dbname = bbs --库名 pconnect = 0 tablepre = jrun_ database = mysql dbcharset = charset = utf8 headercharset = 0 tplrefresh = 1 version=5.1 # /usr/local/tomcat/bin/startup.sh --启动tomcat 使用下面的URL去访问,进入到jsprun论坛的中文安装界面; http://10.1.1.36:8080/jsprun/install.jsp --注意这里后面的install.jsp也自己输出来 然后就按照图形安装步骤一直安装就可以了 --安装完后,主页可以访问,可以注册和登陆。但是不能发帖,后台进去后也没有任何功能显示(应该还是版本比较老,和现在新的java版本不兼容的问题) ================================================================== 上把讨论的是单机的tomcat加应用的做法,那么如果负载和并发大,那么单机会顶不住压力,下面就讨论架构做法 apache跑静态页面速度快且稳定,不可以跑java程序 tomcat也可以跑静态页面,但速度较慢,可以跑java程序 所以就有了apache+tomcat的整合应用(动静分离) 方法有: 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(memcached-session-manager)做综合应用 关于session的讨论 方法大概有: 一,用cookies 二,用nginx里的ip_hash,做成类似sticky session(粘贴会话在一台服务器上)的做法 upstream tomcat { ip_hash; server 1.1.1.128:8080 weight=1; server 1.1.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 王五memcached 张三 李四 tomcat1 tomcat2 下图中: 10.1.1.0/24网络我模拟外网(这里我用vmware的桥接网络来模拟) 1.1.1.0/24网络我模拟内网(这里我用vmware的hostonly网络来模拟) nginx做反向加解析静态页面 tomcat解析java动态程序 client 10.1.1.35 | | 10.1.1.36 nginx | 1.1.1.127 | |----------| tomcat1 tomcat2 1.1.1.128 1.1.1.129 | | |----------------------| | | 1.1.1.130 memcached服务器 实验前准备: 1,主机名三步绑定 2,时间同步 3,关闭iptables,selinux 4,配置yum 第一步: 1,在1.1.1.127上安装nginx 软件包在 笔记目录/program/lnmp_soft/ 安装过程参考上一次课的笔记,这里省略 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 65534; 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 1.1.1.128:8080 weight=1; server 1.1.1.129:8080 weight=1; } server { listen 80; server_name 10.1.1.36; 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 第二步: 在1.1.1.128和1.1.1.129上安装两台tomcat(过程省略) tomcat1和tomcat2上把下面的软件包都scp到/usr/local/tomcat/lib/目录下 # ls 笔记目录/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 (在此文件的里面加上下面一段) 并把两台tomcat分别启动(如果你先前启动了要重启) # /usr/local/tomcat/bin/shutdown.sh # /usr/local/tomcat/bin/startup.sh # lsof -i:8080 第四步: 在1.1.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()%>
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%> 第六步: 确认nginx和tomcat1和tomcat2和memcached都是启动状态,客户端使用firefox来测试 测试一: http://10.1.1.36/session.jsp --不断F5刷新,sessionID是不变的 elinks -dump http://10.1.1.36/session.jsp --不要使用这种方式来测,因为这样每次是一个新的连接,session id是会变的,但也会存储到memcache中 在memcache服务器上进行下面的操作 # echo "stats cachedump 3 0" | nc 1.1.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.36/session.jsp --不断F5刷新,sessionID是会变化的 在memcache服务器上进行下面的操作 # echo "stats cachedump 3 0" | nc 1.1.1.130 11211 > /tmp/session.txt # cat /tmp/session.txt --这次不会记录与firefox页面刷的session ID,说明session ID没有记录到memcache里 ======================================================= --上面的实验测试了tomcat集群并解决了session同步的问题,但并没有上应用 client 10.1.1.35 | | 10.1.1.36 nginx | 1.1.1.127 | |----------| tomcat1 tomcat2 1.1.1.128 1.1.1.129 | | |----------------------| | | 1.1.1.130 memcached服务器,nfs,mysql 在上面的基础上再继续做 1,在1.1.1.130上使用NFS做共享存储 做一个NFS把jsprun给共享出去 # mkdir /jsprun # unzip JspRun_v6.0.0_UTF8.zip -d /jsprun/ # cd /jsprun # mv JspRun\!_6.0.0_UTF8/upload/* . # rm JspRun\!_6.0.0_UTF8/ -rf # vim /etc/exports /jsprun *(rw,no_root_squash) # /etc/init.d/rpcbind restart # /etc/init.d/nfs restart 2,在nginx上挂载 先重启rpcbind服务 # /etc/init.d/rpcbind restart 再挂载 # mount -t nfs -o vers=3 1.1.1.130:/jsprun /nginxroot/ 在tomcat1和tomcat2上挂载 # mount -t nfs -o vers=3 1.1.1.130:/jsprun /usr/local/tomcat/webapps/ROOT/ --上面做完,那么nginx和tomcat所有人的家目录都使用的是NFS共享存储上的,因为使用的是同一个存储,所以数据绝对一致 3,在1.1.1.130上安装mysql数据库,并授权 # yum install mysql* -y # /etc/init.d/mysqld restart # mysql mysql> create database jsprun; mysql> grant all on jsprun.* to 'li'@'1.1.1.128' identified by '123'; mysql> grant all on jsprun.* to 'li'@'1.1.1.129' identified by '123'; mysql> flush privileges; 4,安装jsprun 在nginx或tomcat1或tomcat2上安装jsprun 我这里在tomcat1上安装 http://1.1.1.128:8080/install.jsp ===================================================================== 课后扩展: client 10.1.1.35 DNS轮循(同一域名轮循解析成两个nginx的公网IP) | 10.1.1.36 | 10.1.1.37 nginx1 nginx2 1.1.1.126 | 1.1.1.127 | |----------| tomcat1 tomcat2 1.1.1.128 1.1.1.129 | | |----------------------| | | | |----------------------| memcached1 | memcached2 1.1.1.130 | 1.1.1.131 | | | mysql集群+分布式存储(或nfs模拟) =================================== 有兴趣可以去查一下一些老的做法如:session 复制,mod_jk等