一、 jdk 安裝配置
# yum install java-1.8.0-openjdk-devel (依賴的java-1.8.0-openjdk,java-1.8.0-openjdk,headless也會被安裝 ) # alternatives -h # vim /etc/profile.d/java.sh 加入 export JAVA_HOME=/usr
# . /etc/profile.d/java.sh # printenv 查看環境變量
能過rpm包安裝
# wget ftp://172.16.0.1/pub/Sources/7.x86_64/jdk/jdk-8u25-linux-x64.rpm # rpm -ivh jdk-8u25-linux-x64.rpm # rpm -ql jdk1.8.0_25-1.8.0_25-fcs # cd /usr/java/default # vim /etc/profile.d/javad.sh JAVA_HOME=/usr/java/latest PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH # . /etc/profile.d/javad.sh # java -version
tomcat:運行于JDK之上,表現為一個獨立而完整的java進程,可與用戶交互的web服務器
使用Java語言編寫
Tomcat的核心組件:server.xml,其配置的格式為
<Server>
<Serivce>
<connector/>
<connecotr/>
…
<Engine>
<Host>
<Context/>
<Context/>
</Host>
<Host>
…
</Host>
…
</Engine>
</service>
</Server>
說明:頂級組件:Server
服務類組件:Service
連接類組件:http,https,ajp
容器類:Engine,Host,Context
被嵌套類:value,logger,realm,loader,manager
集群類組件:listener,cluster,…
二、tomcat的配置
1、安裝tomcat:
a、二進制格式安裝
# tar xvf apache-tomcat-VERSION.tar.gz -C /usr/local/ # cd /usr/local/ # ln -sv apache-tomcat-VERSION tomcat #vim /etc/profile.d/tomcat.sh export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH # . /etc/profile.d/tomcat.sh
b、yum源安裝
# yum -y install tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps tomcat tomcat-lib
安裝完后可以使用命令
# systemctl start tomcat && ss -tnl
啟動tomcat服務并且查看8080端口是否啟用
在瀏覽器中進行測試 http://172.16.254.248:8080/
2、tomcat程序目錄結構
bin:腳本及啟動時用到的類
conf:配置文件目錄
lib:庫文件,java類庫
logs:日志文件目錄
temp:臨時文件目錄
webapps:webapp的默認目錄
work:工作目錄
3、tomcat的配置文件說明
server.xml:主配置文件
web.xml:每個webapp只有部署后才能被訪問,它的部署方式通過由web.xml進行定義,其存位置為WEB-INF/目錄中,此文件為所有的webapps提供默認配置
context.xml:每個web都可專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,此文件為所有的webapps提供默認配置
tomcat-users.xml:用戶的賬號和文件
catalina.policy:當使用security選項啟動tomcat時,用于為tomcat設置安全策略;
catalina.propreteis:java物定義文件,用于設定類加載器路徑,以及一些與JVM高估相關參數;
logging.properties:日志系統相關的配置
4、tomcat-users.xml配置
vim /etc/tomcat/tomcat-users.xm
l
在<tomcat-users>段中加入以五內容
<role rolename="manager-gui"/> <user username="centos" password="centos" roles="manager-gui"/> <role rolename="admin-gui"/> <user username="centos" password="centos" roles="admin-gui"/>
重啟服務后并重新訪問http://172.16.254.248:8080/
點Server Status、Manager App、 Host Manager時輸入用戶名centos密碼centos進行訪問
5、提供一測試類應用,并冷部署;
#mkdir -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF} # vim /usr/share/tomcat/webapps/test/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title> Test Page </title> </head> <body> <% out.println("hellow world"); %> </body> </html>
重新訪問http://172.16.254.248:8080/test/時會顯示hellow world
6、nginx + tomcat cluster
用nginx 反代兩臺tomcat主機 ,cluster(172.16.254.248[nginx]) ,node1(172.16.251.232[Tomcat A]),node2(172.16.251.74[Tomcat B])
cluster# yum -y install nginx && systemctl start nginx # vim /etc/nginx/nginx.conf
在http段中加入
upstream tomcat { server 172.16.251.232:8080; server 172.16.251.74:8080; }
# vim /etc/nginx/conf.d/default.conf
在location中加入
proxy_pass http://tomcat/;
nod1 # mkdir -pv /usr/share/tomcat/webapps/test/{WEB-INF,classes,lib} # vim /usr/share/tomcat/pwebapps/test/index.jsp <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA.rj.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> nod2 # mkdir -pv /usr/share/tomcat/webapps/test/{WEB-INF,classes,lib} # vim /usr/share/tomcat/pwebapps/test/index.jsp <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatB.rj.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
訪問http://172.16.254.248/test/時效果如果下
7、 httpd(proxy_http_module) + tomcat cluster
cluster#systemctl disable nginx && systemctl stop nginx # yum -y install httpd # vim /etc/httpd/conf.d/tomcat.conf <proxy balancer://tomcat> BalancerMember http://172.16.251.232:8080 BalancerMember http://172.16.251.74:8080 ProxySet lbmethod=byrequests </proxy> <VirtualHost *:80> ServerName www.rj.com ProxyVia On ProxyRequests Off ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / balancer://tomcat/ ProxyPassReverse / balancer://tomcat/ <Location /> Require all granted </Location> </VirtualHost>
訪問http://172.16.254.248/test/時效果如下
啟用balancer管理接口
cluster# vim /etc/httpd/conf.d/balancer-manager.conf <Location /balancer-manager> Sethandler balancer-manager ProxyPass ! Require all granted </Location>
訪問其管理接口http://172.16.254.248/balancer-manager效果如下
8、 httpd(proxy_ajp_module)+tomcat cluster # cp /etc/httpd/conf.d/tomcat.conf /etc/httpd/conf.d/tomcat.conf.bak # vim /etc/httpd/conf.d/tomcat.conf <proxy balancer://tomcat> BalancerMember ajp://172.16.251.232:8009 BalancerMember ajp://172.16.251.74:8009 ProxySet lbmethod=byrequests </proxy> <VirtualHost *:80> ServerName www.rj.com ProxyVia On ProxyRequests Off ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / balancer://tomcat/ ProxyPassReverse / balancer://tomcat/ <Location /> Require all granted </Location> </VirtualHost>
訪問http://172.16.254.248/test/時效果如下
三、常用組件配置
Server:代表tomcat instance, 即表現出一個Java進程:監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例時,需要個改其監聽端口為不同的端口;
service:用于實現將一個或多個connector組件關聯至一個engine組件;
Connector組件
負責接收請求,常見的有三類http/https/ajp:
進入tomcat的請求可分為兩類;
(1)standalone:請求來自于客戶端的反代理服務器:
nginx –> http connector –> tomcat
httpd(proxy_http_module) –> http connector –> tomcat
httpd(proxy_ajp_module) –> ajp connecetor –> tomcat
屬性:
port=”8080″
protocol=”HTTP/1.1″
connectionTimeout=”20000″
address:監聽的IP地址;默認為本機所有可用地址;
maxThreads:最大并發連接數,默認為150;
enableLookups:是否啟用DNS查詢功能;
acceptCount:等待隊列的最大長度;
secure:
sslProtocol:
Engine組件:Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
屬性:
name=
defaultHost=”localhost”
jvmRoute=
Host組件:位于engine內部用于接收請求并進行相應處理的主機或虛擬主機,示例:
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”>
</Host>
常用屬性說明:
(1) appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對路徑;
(2) autoDeploy:在Tomcat處于運行狀態時,將某webapp放置于appBase所定義的目錄中時,是否自動將其部署至tomcat;
示例:
<Host name=”tc1.magedu.com” appBase=”/appdata/webapps” unpackWARs=”true” autoDeploy=”true”>
</Host>
# mkdir -pv /appdata/webapps
# mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF}
提供一個測試頁即可;
四、tomcat cluster 升級為session cluster,使用deltaManager
配置node1,和node2
node1# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA"> <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.32.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.254.130" 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> # scp /etc/tomcat/server.xml 172.16.251.74:/etc/tomcat/server.xml # cp /etc/tomcat/web.xml /var/lib/tomcat/webapps/test/WEB-INF/ # vim /var/lib/tomcat/webapps/test/WEB-INF/web.xml
在 <!-- listings is enabled? [true] -->的后面加入 <distributable/> # scp /var/lib/tomcat/webapps/test/WEB-INF/web.xml 172.16.251.74:/var/lib/tomcat/webapps/test/WEB-INF/ node2# vim /etc/tomcat/server.xml 更改 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB"> address="172.16.251.74" node1,2 #systemctl restart tomcat
進入頁測試http://172.16.254.248/test/
四、cluster將會話保存至memcached中
node1,2需要的操作
將deltaManager的配置還原
# cd /usr/share/tomcat/lib/ # wget ftp://172.16.0.1/pub/Sources/7.x86_64/msm/* && rm -rf memcached-session-manager-tc8-1.8.3.jar # yum -y install memcached libmemcached # systemctl start memcached # sustemctl enable memcached
node1(tomcat1,memcached1)
# memcached 1配置
vim /etc/tomcat/server.xml
修改
<Engine name="Catalina" defaultHost="localhost" jvmRoute="rjTomcat1"> 在Host段中添加 <Context path="/test" docBase="test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.251.232:11211,n2:172.16.251.74:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context> node2(tomcat,memcached2)
# memcached 2配置
<Engine name="Catalina" defaultHost="localhost" jvmRoute="rjTomcat2">
在Host段中添加
<Context path="/test" docBase="test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.251.232:11211,n2:172.16.251.74:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
</Context>
關于tomcat memcached session綁定配置詳解地址
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration#configure-memcached-session-manager-as–context-manager
此時cluster將會話保存于memcached 中
訪問http://172.16.254.248/test/效果如下
五、Tomcat的常用優化配置
(1)內存空間:
/etc/sysyconfig/tomcat
JAVA_OPTS=”-server -Xms -Xmx -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize=”
-server:服務器模型
-Xms:堆內存初始化大?。?nbsp;
-Xmx:堆內存空間上限;
-XX:NewSize=:新生代空間初始化大小 ;
-XX:MaxNewSize=:新生代空間最大值 ;
-XX:PermSize=:持久代空間初始化大小;
-XX:MaxPermSize=:持久代空間最大值;
(2)線程池設置:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”200000″ redirectPort=”8443″ />
常用屬性:
maxThreads:最大線程數;
minSpareThreads:最小空閑線程數;
maxSpareThreads:最大空閑線程數;
acceptCount:等待隊列的最大長度;
URIEnconding:URI地址編碼格式,建議使用UTF-8;
enableLookups:是否啟用dns解析,建議禁用;
compression:是否啟用傳輸壓縮機制,建議”on”;
compressionMinSize:啟用壓縮傳輸的數據流最小值,單位是字節;
compressableMimeType:定義啟用壓縮功能的MIME類型;
text/html,text/xml,text/css,text/javascript
(3)禁用8005端口
<Server port=”-1″ shutdown=”SHUTDOWN”>
Server=”SOME STRING”
(4)隱藏版本信息
<Connector port=”8080″ protocol=”HTTP/1.1″ connection Timeout=”20000″ redirectPort=”8443″ />
Server=”SOME STRING”
原創文章,作者:renjin,如若轉載,請注明出處:http://www.www58058.com/68013
為什么我配置Tomcat的時候,無法保存session信息到memcached中,可以請求下嗎?ps:我是安裝馬哥說的配置的