CentOS 7 tomcat 7.0.54 的功能實現及詳解

一、 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/

。。。1.png

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進行訪問

00002.png

。。。3.png

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/時效果如果下 

。。。nginx1.png

。。。nginx2.png

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/時效果如下 

。。。httpd1.png

。。。httpd2.png

啟用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效果如下

。。。balancer.png

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/時效果如下

。。。httpdajp1.png

。。。httpdajp2.png

三、常用組件配置

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/

seestion 。。。。。。.png

seestion 。。。。。。2.png

四、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/效果如下 

。。。memcached bd1.png

。。。memcached bd2.png

五、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

(0)
renjinrenjin
上一篇 2014-05-22
下一篇 2014-08-13

相關推薦

  • Linux基礎學習總結(二)

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 常用基礎命令:cd、pwd、mkdir、touch 查看:cat,more,less,tail,head,tac 復制:cp 移動:mv 刪除:rm 創建:touch 元數據屬性:stat 查看內容類型:file 二、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及…

    Linux干貨 2016-09-24
  • 2016-08-18作業

    斐波那契數列 fibonacciSequenceFun.sh #!/bin/bash function fibonacci_sequence {   if [ $1 -eq 0 ]; then     echo 0      elif [ $1 -eq 1 ]; then    …

    Linux干貨 2016-09-19
  • puppet部署多臺服務器

    利用puppet實現自動化部署 配置前準備:   圖中:藍線表示各個服務器之間通信      紅線表示puppetmaster主機向各個agent主機部署信道 A主機puppet-master主機:192.168.126.129 B主機做兩種服務:keepalived高性能和nginx反代  &nb…

    2017-07-23
  • 零距離接觸軟RAID0和RAID5以及邏輯卷LVM

    一、創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄 1、首先手動給虛擬機添加兩塊硬盤 2、添加硬盤后,無需關機,直接讓內核掃描添加的磁盤 [root@centos6 ~]# echo '- – -' >&nbsp…

    Linux干貨 2016-09-01
  • 數組的基本應用

                                   數組 變量:存儲單個元素的內存空間v 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。v 數組名和索引 索引:編號從0…

    Linux干貨 2016-08-24
  • day6總結

    主要內容: useradd與usermod對比 groupadd與groupmod對比 passwd與chage對比 gpasswd與groupmems對比 切換用戶 chown與chgrp用法 一般權限與特殊權限 chmod用法   useradd創建用戶的初始信息存放在/etc/login.defs和/etc//default/useradd文…

    系統運維 2016-08-08

評論列表(1條)

  • yhy1271927580
    yhy1271927580 2017-05-01 12:42

    為什么我配置Tomcat的時候,無法保存session信息到memcached中,可以請求下嗎?ps:我是安裝馬哥說的配置的

欧美性久久久久