Java
j2me 用在智能平台,例如手机等
j2se 用在桌面平台,个人PC桌面应用
j2ee 中间件,用于web服务,相当于apache,nginx
上层应用 java
j2ee平台 tomcat
数据库 mysql,oracle
常用中间件:
tomcat
resin
jboss
weblogic
WebSpare
jdk
java的开发库
例子1:搭建tomcat,运行简单应用
1、安装jdk
# ./jdk-6u18-ea-bin-b02-linux-i586-09_sep_2009.bin
# mv jdk1.6.0_18 /usr/local/java
2、安装tomcat
# tar xvf apache-tomcat-6.0.16.tar.gz
# mv apache-tomcat-6.0.16 /usr/local/tomcat
3、设定jdk环境变量
# cd /usr/local/tomcat/
# vim bin/catalina.sh
export JAVA_HOME="/usr/local/java"
启动
# ./bin/startup.sh
默认监听8080端口
部署一个简单应用:
1、修改监听端口为80
# vim /usr/local/tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1" 《--8080改成80
connectionTimeout="20000"
redirectPort="8443" />
2、设定管理帐号
# vim /usr/local/tomcat/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="123" roles="manager,admin"/>
</tomcat-users>
重启tomcat
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
默认已经部署的应用:
/ webapps/ROOT
webapps/ROOT/WEB-INF/web.xml <--该java web应用的配置文件
/docs webapps/docs
/examples webapps/examples
...
简单部署一个应用
http://1.1.1.128/upl/
网站根目录webapps/upl/
# mkdir upl
# cp -r ROOT/WEB-INF/ ./upl/
# vim upl/index.jsp
<html>
<head>
<title>Just Test</title>
</head>
<body>
<center><h1> <%=new java.util.Date()%> </h1></center>
</body>
</html>
例子2:部署一个jsp+mysql的论坛
jsprun论坛:jsprun6.0.0_UTF8.zip
部署之后,访问的路径是http://1.1.1.128/bbs <--- webapps/bbs
1、解压论坛代码
# unzip jsprun6.0.0_UTF8.zip
# mv upload/ /usr/local/tomcat/webapps/bbs
2、设定论坛使用mysql数据的相关信息
建库、授权
3、修改论坛的配置文件,设定数据库的连接信息
# vim bbs/config.properties
dbhost = localhost <---根据实际情况修改
dbport=3306
dbuser = jsprun
dbpw = 123
dbname = jsprun
4、向导安装
http://1.1.1.128/bbs/install.jsp
==================================================
例子3:使用mod-jk搭建tomcat集群,实现负载均衡
调度器
|
|-------------|
tomcat1 tomcat2
常用的调度器:
lvs
nginx
haproxy
apache:
http_proxy 技术非常旧,效率和性能都很慢,基于http协议的反向代理
ajp_proxy 性能有所提升,使用的ajp协议。
mod-jk 使用ajp协议,但是性能是最好。
1、选择一个apache节点作为调度器
# yum install httpd httpd-devel -y
2、安装mod-jk
tomcat-connectors-1.2.31-src.tar.gz
# cd /usr/src/tomcat-connectors-1.2.31-src/native/
# ./configure --with-apxs=/usr/sbin/apxs && make && make install
3、配置mod-jk
# cp /usr/src/tomcat-connectors-1.2.31-src/conf/{uriworkermap.properties,workers.properties,httpd-jk.conf} /etc/httpd/conf.d/
# cd /etc/httpd/conf.d/
编辑主配置文件
# vim httpd-jk.conf
JkWorkersFile conf.d/workers.properties
JkMountFile conf.d/uriworkermap.properties
SetEnvIf REQUEST_URI "\.(htm|html|css|gif|jpg|js)$" no-jk
定义调度器的属性
# vim workers.properties
worker.balancer.balance_workers=node1 <---名字随意,但必须和后端tomcat有联系
worker.node1.reference=worker.template
worker.node1.host=1.1.1.128 《---
worker.node1.port=8009 《----
worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=1.1.1.129 《----
worker.node2.port=8009 《----
定义动静分离:哪些请求留给apache调度直接处理,哪些请求留给后端tomcat节点处理
# vim uriworkermap.properties
/examples/*=balancer 《--指定目录交给mod-jk使用balancer调度到后端节点
/manager/*=balancer
/*.jsp=balancer
重启apache
二、配置后端tomcat节点
1、两个后端节点都部署好tomcat环境
2、设定tomcat关于ajp的配置
node1:
# vim /usr/local/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="localhost">
修改:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
名字必须和mod-jk设定成员的名字一样
node2:
同上,名字不一样而已
3、启动
验证:
# lsof -i:8009
三、实现动静分离
把一些静态文件同步到前端apache的网站根目录 ,因为静态文件根据设定,是直接交给apache处理
设计验证动静分离的实验:
在apache网站根目录 建立 index.html ,内容随意,只要跟后端tomcat节点不一样
http://1.1.1.130/index.html <---前端apache ip
http://1.1.1.128/index.html <---后端tomcat ip
设计验证mod-jk调度jsp页面的实验:
分别在两个tomcat节点建立测试页面test.jsp,代码如下:
index_测试页面.jsp
# scp index_测试页面.jsp 1.1.1.128:/usr/local/tomcat/webapps/ROOT/test.jsp
# scp index_测试页面.jsp 1.1.1.129:/usr/local/tomcat/webapps/ROOT/test.jsp
默认会话跟踪,只要客户端被调度到一个节点,同一个会话,后续所有访问都会调度到同一个后端节点。
取消会话跟踪,如果想实现会话同步,就必须让后端节点session信息复制:
1、取消mod-jk的会话跟踪
# vim /etc/httpd/conf.d/workers.properties
worker.balancer.sticky_session=0 <---- 取消跟踪
重启apache
2、修改后端节点,实现会话同步,缺点:浪费内存,性能降低。
# vim /usr/local/tomcat/conf/server.xml
找到<Engine .... >下面添加
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" 《---可以修改自己的IP
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
3、修改应用的设置,让应用产生的会话同步到其他节点
# vim WEB-INF/web.xml
<distributable/> 《---添加一行
</web-app>
重启tomcat服务