1. 程式人生 > >Tomcat介紹、安裝配置以及簡單的實現Tomcat負載均衡

Tomcat介紹、安裝配置以及簡單的實現Tomcat負載均衡

              Tomcat介紹、安裝配置以及簡單的實現Tomcat負載均衡

-----------------------------------------------------------------------------------------------------------------------------------------------

壓測工具:JMeter

一、軟體架構模式

1、分層架構:表現層,業務層,持久層,資料庫層

2、事件驅動架構:分散式異構架構,高度解耦,大型應用場景

3、微核心架構:外掛式架構,各種功能以外掛形式對接到核心上

4、微服務架構:整體系統功能中每一項功能,只要功能能夠單獨呼叫,每個功能就做成一個單元。基於API REST-based,application REST-based,中心化訊息

5、基於空間的架構:雲架構

二、webapp容器

tomcat,jetty,resin

jboss

websphere,weblogic

三、Java相關

1、tomcat由java程式編寫,是為了更好支援其它java而編寫的,比如說jsp(java server page)

2、java程式語言,是一種企業級應用程式

JDK:java development kit,java的開發工具

JRE:java執行開發環境,JVM+標準庫組成

JVM:java虛擬機器

openjdk:開源社群版jdk

3、tomcat是隻實現了java2EE的JSP和servlet,配置上的關鍵識別符號是catalina

4、JDK 6就是JDK 1.6版,JDK 6u1就是JDK 1.6版本第一次升級

四、tomcat相關

1、埠使用

使用8080埠,http協議,tomcat user

使用8443埠,https協議

使用8009埠,ajp協議,在http做反向代理時候使用

ajp:apache jserv protocol

2、.do和.jsp檔案傳遞給tomcat處理

3、動+靜結合:LNMT或者LAMT

五、JDK的部署

1、tomcat的執行之前需要部署JDK

2、Oracle JDK的部署

oracle網站進入後下載

image.png

image.png

rpm -ivh jdk-8u191-linux-x64.rpm

解壓縮後進入目錄

image.png

default/bin/下有很多指令碼,如果想使用這些指令碼,需要新增環境變數

vim /etc/profile.d/java.sh

JAVA_HOME=/usr/java/latest

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

image.png

image.png

完成後,java -version就可以顯示

image.png

3、Open JDK的部署

yum info all java*

yum -y install java-1.8.0-openjdk-devel

4、alternatives,同一程式多版本並存時候選擇預設版本

六、tomcat的安裝

1、二進位制安裝

image.png

(1)wget http://URL或者下載

tar xf apache-tomcat-xxx.tar.gz -C /usr/local

cd /usr/local

ln -sv apache-tomcat-xxx tomcat

image.png

(2)配置檔案:目錄下/conf/server.xml

(3)配置啟動過程

useradd tomcat -s /sbin/nologin

cd tomcat/

chown -R :tomcat ./*

chown -R tomcat logs/ temp/ work/

chmod g+rx conf/

vim /etc/profile.d/tomcat.sh

CATALINA_BASE=/usr/local/tomcat

PATH=$CATALINA_BASE/bin:$PATH

export CATALINA_BASE PATH

exec bash

catalina.sh start後啟動

image.png

訪問8080埠頁面就出來了

image.png

2、第二種安裝

yum -y install tomcat tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps

安裝好後systemctl start tomcat

注:後三個tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps為應用程式,不需要可以不裝

七、jsp相關

1、.jsp ->Jasper -> .java ->javac ->.class

.jsp通過Jasper翻譯為.java,再編譯為javac,最後轉換成.class類檔案

<h1>Test Page</h1>

<%language=java

...

%>

八、tomcat的目錄結構

1、目錄說明

bin:指令碼,及啟動時用到的類;

conf:配置檔案目錄;

lib:庫檔案,Java類庫,jar;

logs:日誌檔案目錄;

temp:臨時檔案目錄;

webapps:webapp的預設目錄;

work:工作目錄;

2、rpm包安裝的程式環境:

配置檔案目錄:/etc/tomcat

主配置檔案:server.xml

工作目錄webapps預設存放位置:/var/lib/tomcat/webapps/

    examples

    manager

    host-manager

    docs

    Unit File:tomcat.service

環境配置檔案:/etc/sysconfig/tomcat

當/var/lib/tomcat/webapps/ROOT/test/index.jsp,訪問對應host:8080/test就是訪問的該目錄

image.png

3、tomcat的配置檔案構成:

    (1)server.xml:主配置檔案;

    (2)web.xml:每個webapp只有“部署”後才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此檔案為所有的webapps提供預設部署相關的配置;

    (3)context.xml:每個webapp都可以專用的配置檔案,它通常由專用的配置檔案context.xml來定義,其存放位置為WEB-INF/目錄中;此檔案為所有的webapps提供預設配置;

    (4)tomcat-users.xml:使用者認證的賬號和密碼檔案;

    (5)catalina.policy:當使用-security選項啟動tomcat時,用於為tomcat設定安全策略(除非有特別配置上的需要,否則不建議使用-security選項);

    (6)catalina.properties:Java屬性的定義檔案,用於設定類載入器路徑,以及一些與JVM調優相關引數;

    (7)logging.properties:日誌系統相關的配置; log4j

九、tomcat配置檔案

1、tomcat配置結構

server {

service {

conntor { } ----》一個service中可以多個conntor對應一個engine

engine { ----》每個service只能有一個engine

host { } ----》engine中可以有多個host

host {

context { }

}

}

}

}

2、Tomcat的核心元件:server.xml

<Server>

        <Service>

            <connector/>

            <connector/>

            ...

        <Engine>

            <Host>

                <Context/>

                <Context/>

                    ...

            </Host>

            <Host>

                ...

            </Host>

                ...

        </Engine>

    </Service>

</Server>

每一個元件都由一個Java“類”實現,這些元件大體可分為以下幾個型別:

頂級元件:Server

    服務類元件:Service

    聯結器元件:http, https, ajp(apache jserv protocol)

    容器類:Engine, Host, Context

    被巢狀類:valve(對使用者的請求過濾), logger, realm, loader, manager, ...

    叢集類元件:listener, cluster, ...

九、WebApp的組織架構

1、JSP WebAPP的組織結構:

/: webapps的根目錄

    (1)index.jsp, index.html:主頁;

    (2)WEB-INF/:當前webapp的私有資源路徑;通常用於儲存當前webapp的web.xml和context.xml配置檔案;

    (3)META-INF/:類似於WEB-INF/;

    (4)classes/:類檔案,當前webapp所提供的類;

    (5)lib/:類檔案,當前webapp所提供的類,被打包為jar格式;

2、webapp歸檔格式:

.war:webapp

.jar:EJB的類打包檔案;

.rar:資源介面卡類打包檔案;

.ear:企業級webapp;

3、部署(deploy)webapp的相關操作:

    (1)deploy:將webapp的原始檔放置於目標目錄(網頁程式檔案存放目錄),配置tomcat伺服器能夠基於web.xml和context.xml檔案中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM;

    (2)部署有兩種方式:

自動部署:auto deploy

手動部署:

冷部署:把webapp複製到指定的位置,而後才啟動tomcat;

熱部署:在不停止tomcat的前提下進行部署;

部署工具:manager、ant指令碼、tcd(tomcat client deployer)等;

undeploy:反部署,停止webapp,並從tomcat例項上解除安裝webapp;

start:啟動處於停止狀態的webapp;

stop:停止webapp,不再向使用者提供服務;其類依然在jvm上;

redeploy:重新部署;

(3)手動提供一測試類應用,並冷部署:

# mkidr  -pv  /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}

建立檔案/usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

    <head>

        <title>Test Page</title>

    </head>

    <body>

        <% out.println("hello world");

        %>

    </body>

</html>

十、tomcat的兩個管理應用:

manager:管理webapps應用程式

host-manager:管理虛擬主機

1、manager:管理webapps應用程式

image.png

如果登入這兩個應用,需要去配置目錄tomcat-users.xml裡編輯

二進位制目錄在tomcat/conf/下

rpm包安裝在/etc/tomcat/tomcat.conf

image.png

更改後重啟tomcat,之後可以點選進入Manager App

image.png

2、host-manager:管理虛擬主機

image.png

image.png

十一、tomcat的常用元件配置:

1、Server:代表tomcat instance,即表現出的一個java程序;監聽在8005埠,只接收“SHUTDOWN”。各server監聽的埠不能相同,因此,在同一物理主機啟動多個例項時,需要修改其監聽埠為不同的埠;

image.png

注意:server.xml不要讓其他使用者有讀許可權,chmod o= /etc/tomcat/server.xml

2、Service:用於實現將一個或多個connector元件關聯至一個engine元件;

3、Connector元件:端點,定義tomcat所監聽的地址和埠,不屬於任何host,而屬於整個tomcat

負責接收請求,常見的有三類http/https/ajp;

進入tomcat的請求可分為兩類:

(1)standalone : 請求來自於客戶端瀏覽器;

(2)由其它的web server反代:來自前端的反代伺服器;

        nginx --> http connector --> tomcat

        httpd(proxy_http_module) --> http connector --> tomcat

        httpd(proxy_ajp_module) --> ajp connector --> tomcat

        httpd(mod_jk) --> ajp connector --> tomcat

屬性:

    port="8080"

    protocol="HTTP/1.1"

    connectionTimeout="20000"

    address:監聽的IP地址;預設為本機所有可用地址;

    maxThreads:最大併發連線數,預設為200;

    enableLookups:是否啟用DNS查詢功能;

    acceptCount:等待佇列的最大長度;

    secure:

    sslProtocol:

image.png

4、Engine元件:Servlet例項,即servlet引擎,其內部可以一個或多個host元件來定義站點; 通常需要通過defaultHost屬性來定義預設的虛擬主機;

屬性:

    name=

    defaultHost="localhost"

    jvmRoute=

5、Host元件:位於engine內部用於接收請求並進行相應處理的主機或虛擬主機,示例:

<Host name="localhost"  appBase="webapps"

    unpackWARs="true" autoDeploy="true">

</Host>

Webapp ARchives

常用屬性說明:

    (1)appBase:此Host的webapps的預設存放目錄,指存放非歸檔的web應用程式的目錄或歸檔的WAR檔案目錄路徑,類似於apache的/var/×××w/html;如果使用的是相對路徑,則是相對於$CATALINA_BASE變數的相對路徑;

    (2)unpackWARs,是否自動解壓

    (3)autoDeploy:自動部署,在Tomcat處於執行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat;,生產環境中不建議自動部署,關閉該功能

示例:部署tomcat

安裝好openjdk、tomcat後,我們如果想要建立一個其它的工作目錄來存放以後的專案,首先在配置檔案server.xml中有

image.png

其次,手動建立目錄

mkdir /app/webapps/ROOT/{classes,lib,WEB-INF}

mkdir /app/webapps/test-0.1/{classes,lib,WEB-INF}

vim /app/webapps/test-0.1/index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

    <head>

        <title>Test Page</title>

    </head>

    <body>

        <% out.println("hello world");

        %>

    </body>

</html>

之後由你自己決定是否要虛擬主機的主頁,如果要,拷貝預設目錄下ROOT目錄的內容到手建目錄下ROOT。如果需要Manager App和Host Manager,還需要將host-manager和manager兩個目錄一併拷貝至此

為了便於做灰度釋出,可以在工作目錄/app/webapps為目錄做軟連結

ln -sv test-0.1 test

最後形成的tree形圖為

image.png

結果圖

image.png

image.png 

灰度釋出示例:

image.pngimage.png

6、Context元件:

示例:

<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>

綜合示例:

<Host name="node1.magedu.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="node1_access" suffix=".log"

            pattern="%h %l %u %t &quot;%r&quot; %s %b" />

<Context path="/test" docBase="test" reloadable="">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

        prefix="node1_test_access_" suffix=".log"

        pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Context>

</Host>

image.png

7、Valve元件:

valve,閥門,控制組件

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log" suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html

image.png

訪問下a.chen.com

image.png

Valve存在多種型別:

定義訪問日誌:org.apache.catalina.valves.AccessLogValve

       定義訪問控制:org.apache.catalina.valves.RemoteAddrValve

舉例:兩種方式

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67" />

<Valve className="org.apache.catalina.valves.RemoteCIDRValve" deny="172.16.100.67/16" />

注意:tomcat只支援基於主機名的虛擬主機,不支援IP地址

十一、App Manager

1、例項列表

image.png

2、圖形介面熱部署

image.png

十二、tomcat的反向代理

1、NT架構中,nginx將.jsp和.do格式代理給tomcat

LNMT:Linux Nginx MySQL Tomcat

Client (http) --> nginx (reverse proxy)(http) --> tomcat  (http connector)

location / {

    proxy_pass http://tc1.magedu.com:8080;

}

location ~* \.(jsp|do)$ {

    proxy_pass http://tc1.magedu.com:8080;

}

image.png

這麼寫入後nginx反代不能進入Manager App或者Host Manager,需要更進一步的定義規則通過rewrite進入

image.png

2、AT架構

       (1)LAMT:Linux Apache(httpd) MySQL Tomcat

httpd的代理模組:

proxy_module

proxy_http_module:適配http協議客戶端;

proxy_ajp_module:適配ajp協議客戶端;

Client (http) --> httpd (proxy_http_module)(http) --> tomcat  (http connector)

Client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat  (ajp connector)

Client (http) --> httpd (mod_jk)(ajp) --> tomcat  (ajp connector)

(2)proxy_http_module代理配置示例:

<VirtualHost *:80>

    ServerName  a.chen.com

    ProxyRequests Off

    ProxyVia  On

    ProxyPreserveHost On

<Proxy *>

    Require all granted

</Proxy>

    ProxyPass / http://a.chen.com:8080/

    ProxyPa***everse / http://a.chen.com:8080/

<Location />

    Require all granted

</Location>

</VirtualHost>


<LocationMatch "\.(jsp|do)$>

    ProxyPass / http://a.chen.com:8080/

</LocationMatch>

 image.png

結果

image.png

http反代可以進入Manager App或者Host Manager

(3)proxy_ajp_module代理配置示例:

                <VirtualHost *:80>

                    ServerName a.chen.com

                    ProxyRequests Off

                    ProxyVia On

                    ProxyPreserveHost On

                    <Proxy *>

                        Require all granted

                    </Proxy>

                        ProxyPass / ajp://a.chen.com:8009/

                        ProxyPa***everse / ajp://a.chen.com:8009/

                    <Location />

                       Require all granted

                    </Location>

                </VirtualHost>

image.png

同樣可以進入Manager App或者Host Manager

image.png

十三、keepalived實現nginx對tomcat的負載均衡排程

1、準備nginx一主一從排程器,兩臺的/etc/nginx/nginx.conf都是這麼寫

image.png

配置這兩臺主機的keepalived.conf

image.png

2、準備兩臺tomcat主機

192.168.239.72和192.168.239.73

配置nginx.conf頁面

image.png

3、測試

image.png