apache+tomcat安裝配置

1、tomcat環境結構/原理
JDK(java sdk) java的開發工具包
--|JAVA基礎API: .java源程序編譯成.class字節碼文件
   --|JAVA編譯器(jre):jre調用JVM將.class字節碼文件編譯成機器可識別執行的程序(執行java程序)
   --|JVM:java虛擬機,有獨立的控制器,內存域…..
   --|大量的java工具
JVM堆內存(java對象的活動空間)
   --|永久存儲區:存儲JVM本身的類和方法對象
   --|新生區(JVM生成的所在新對象放在新生區中,類的誕生、成長、消亡的區域)
       ----|伊甸區Eden space:類被new出來
       ----|倖存區Survivor space 
           ------|survivor 0區
           ------|Survivor 1區
   --|老年區:一旦對象經歷了必定數量和垃圾收集循環後,便進入此區域。
JVM垃圾回收過程:
當伊甸園的空間用完時,程序又須要建立對象,JVM的垃圾回收器將對伊甸園區進行垃圾回收,將伊甸園區中的再也不被其餘對象所引用的對象進行銷燬。而後將伊甸園中的剩餘對象移動到倖存0區。若倖存0區也滿了,再對該區進行垃圾回收,而後移動到1區。那若是1區也滿了呢?再移動到老年區。php

原理:
1. JVM垃圾回收機制與GC性能調優
垃圾回收主要是對新生區與老年區塊內存進行回收。
1)GC流程:
[older generation][survivor 1][survivor 2][eden]
Young generation=eden + survivor
當Eden區滿觸發young GCyoung GC去掉一部分沒用的object,把老的還被引用的object發到survivor裏,等下幾回GC後,survivor再放到old裏面當old滿觸發full GC(很消耗內存),把old,young裏大部分垃圾回收掉,這個時候用戶線和都會被block.
2)性能調優:
JVM堆的大小決定了GC的運行時間。若是JVM堆的大小超過必定的限度,那麼GC的運行時間會很長。
對象生存的時間越長,GC須要的回收時間也越長,影響了回收速度。
大多數對象都是短命的,因此,最好能讓這些對象的生存期在GC的一次運行週期內
應用程序中,創建與釋放對象的速度決定了垃圾收集的頻率
若是GC一次運行週期超過3-5秒,這會很影響應用程序的運行,若是能夠,應該減小JVM堆的大小了。
前輩經驗之談:一般狀況下,JVM堆的大小應爲物理內存的80%。
2. Apache與tomcat的整合
Apache只支持靜態網頁,tomcat是支持java程序的容器,自己能夠作web server可是在處理靜態頁面時沒有apache迅速。
Apache2.2版本後,出現的兩種鏈接器http-proxy和proxy-ajp模塊,apache的proxy(代理)模塊能夠實現雙向代理,鏈接器的實現原理:
http-proxy模塊:只需打開tomcat的http功能,而後用apache的proxy代理功能將動態請求交給tomcat處理,而靜態數據交給apache自身就能夠了
proxy-ajp模塊:是專門爲tomcat整合所開發的,經過ajp協議專門代理對tomcat的請求.前端

2、環境安裝(apache+tomcat+jdk)
源碼安裝包統一存放路徑:/usr/local/src/…
必備安裝包:
apche:   http://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.2.24.tar.gz
TOMCAT: http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.tar.gz
JDK:     http://download.chinaunix.net/down.php?id=33932&ResourceID=61&site=1java

按需可選包:
memcache:
https://github.com/downloads/libevent/libevent/libevent-2.0.13-stable.tar.gz
http://memcached.org/   memcached-1.4.15.tar.gz
apache-ant:
http://archive.apache.org/dist/ant/binaries/apache-ant-1.6.5-bin.tar.gzlinux

一、apache安裝:略
二、jdk,tomcat包安裝直接解壓,解壓目錄路徑添加至環境變量中便可.
# cd /usr/local/src/
# chmod +x jdk-6u26-dlj-linux-amd64.bin
# ./jdk-6u26-dlj-linux-amd64.bin 
# cd jdk1.6.0_26/
# mkdir -p /usr/local/java
# mv jdk1.6.0_26 ../java/
# vi /etc/profile         添加環境變量
  #add java enviroment varaible
  export JAVA_HOME=/usr/local/java/jdk1.6.0_26
  export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bingit

# source /etc/profile
# java --version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
若是出錯解決以下:
# cd jdk1.6.0_26/lib/
# unpack200 tools.pack tools.jar
# cd ../jre/lib/
# unpack200 rt.pack rt.jar
# java -version
  java version "1.6.0_26"
  Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
  Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
查看驗證:
# echo $JAVA_HOME
  /usr/local/java/jdk1.6.0_26
# echo $PATH
  /usr/local/java/jdk1.6.0_26/bin:/usr/local/java/jdk1.6.0_26/jre/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bingithub

#tar -zxvf apache-tomcat-6.0.36.tar.gz
#mv apache-tomcat-6.0.36 /usr/local/tomcat
[root@localhost tomcat]# ./bin/startup.sh     直接執行tomcat啓動腳本
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/jdk1.6.0_26
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jarweb


問題總結:
Could not find the main class: nagement.jmxremote.ssl=false. 
環境變量問題,定義類,lib下可能沒取到:
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$TOMCAT_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/libapache

3、配置文件
apache與tomcat整合
一、apache配置說明: httpd.conf
apache與tomcat整合經過apache的proxy模塊, Apache經過ajp協議與tomcat進行通訊,ip地址和端口惟一肯定了tomcat節點和配置的ajp接受端口。
ProxyPreserveHost on
ProxyPass /sso  balancer://sso lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://sso/>
    BalancerMember ajp://127.0.0.1:8009/sso loadfactor=1
</proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPa***everse / http://127.0.0.1:8080/bootstrap

二、tomcat配置說明: /usr/local/tomcat/conf/server.xml後端

#鏈接器所監聽的端口,http協議接受用戶的請求及相關參數
<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="800" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" redirectPort="8443" acceptCount="10000" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

#鏈接器所監聽的端口, AJP協議只能夠接受前端apache服務器的請求
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" minSpareThreads="25" maxSpareThreads="200" acceptCount="10000" enableLookups="false" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
# Tomcat 虛擬目錄的設置
<Context path="/sso" reloadable="true" docBase="/var/www/sso" allowLinking="true"/>
三、添加tomcat管理用戶
<role rolename="manager"/>
  <role rolename="tomcat"/>
      <user username="xxx" password="xxx" roles="tomcat,manager"/>
</tomcat-users>

四、測試
直接訪問:http://iphttp://ip/sso測試

 

 

========================proxypass說明=====================================

##################### httpd.conf ######################
     Apache Module mod_proxy_balancer
官網樣例:
Before we dive into the technical details, here's an example of how you might use mod_proxy_balancer to provide load balancing between two back-end servers:

<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80
BalancerMember http://192.168.1.51:80
</Proxy>
ProxyPass /test balancer://mycluster
-------------------------------------------
實例:
ProxyPass /center  balancer://center lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://center/>
    BalancerMember ajp://127.0.0.1:8009/center loadfactor=1
</proxy>
ProxyPass /service  balancer://service lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://service/>
    BalancerMember ajp://127.0.0.1:8009/service loadfactor=1
</proxy>

ProxyPass /ps  balancer://ps lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://ps/>
    BalancerMember ajp://127.0.0.1:8009/ps loadfactor=1
</proxy>
將對http://localhost/ps/***的本地請求內部轉換成到ajp://127.0.0.1:8009/ps/***
若是代理的指令類型以balancer://開頭那麼會建立一個虛擬工做單元,並不直接和後端服務器通信。它負責對一些「真正」的工做單元進行管理。
這種狀況下能夠給虛擬工做單元添加一系列額外參數。
以下:
參數        默認值         描述
lbmethod   byrequests      選擇均衡器的負載均衡方式。能夠是byrequests,進行加權請求計數,或者是bytraffic,進行加權流量字節計數均衡。默認按請求數。
stickysession            均衡器粘連會話名稱。該值經常會被設置爲相似JSESSIONID或者PHPSESSIONID之類的值,他依賴於支持會話的後端應用服務器。
若是後端服務器使用不一樣的cookie名稱或者URL編碼的ID(像servlet容器),使用|來分開他們。第一個部分針對cookie,第二個針對路徑。  
loadfactor    1         工做單元負載係數。用於BalancerMember。它是一個1到100之間的數字,用於定義應用於該工做單元的正規化權重負載

########################### tomcat ########################

-------------------------------------------
conf/server.xml

<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="800" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" redirectPort="8443" acceptCount="10000" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

<Connector port="8009" protocol="AJP/1.3" minSpareThreads="25" maxSpareThreads="200" acceptCount="10000" enableLookups="false" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

<Context path="/center" reloadable="true" docBase="/applications/center" allowLinking="true"/><Context path="/ps" reloadable="true" docBase="/applications/ps" allowLinking="true"/>參數說明:path:指定訪問該Web應用的URL入口docBase:指定Web應用的文件路徑,能夠給定絕對路徑,也能夠給定相對於<Host>的appBase屬性的相對路徑reloadable:若是這個屬性設爲true,tomcat服務器在運行狀態下會監視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動,若是監測到有class文件被更新的,服務器會自動從新加載Web應用

相關文章
相關標籤/搜索