1、tomcat運行環境css
tomcat是JAVA虛擬機上的運行的一個程序,因此在安裝tomcat以前須要安裝JAVA的運行環境,tomcat是用來接收並相應用戶的請求html
JVM:將全部系統上的不一樣接口所有轉換成統一的編程接口,從而實現一次編譯處處運行前端
JRE:包含一些庫文件和啓動代碼的工具環境,包含JVMjava
JDK:完整的基本環境,包含調試工具nginx
JSP:根據客戶端的不一樣,將代碼在服務器段執行並將結果返回給客戶端
git
軟件包安裝github
yum安裝,直接根據依賴關係安裝所須要的jsp和servlet兩個所須要的組件
web
[root@centos7 ~]# yum install -y java-1.8.0-openjdk-devel
官方下載二進制包,直接解壓便可使用,默認在/usr/java/目錄下數據庫
2、tomcat的安裝apache
yum安裝,光盤倉庫就有,因此直接安裝便可
[root@centos7 ~]# yum install -y tomcat
官方下載軟件包,在官方下載,須要將全部者和全部組更改成root,其中temp,work,logs,將屬主和屬組更改成tomcat,conf目錄須要有讀寫權限,目錄下的文件須要有讀權限,
3、tomcat配置說明
各個配置文件做用相關說明
server.xml:主配置文件,主要用來設置server,connector,service,engine,host,context等相關組件的配置
web.xml:部署描述文件,每一個應用只有在部署後才能夠被訪問,他的部署方式通常有web.xml進行定義,其存放位置爲WEB-INF目錄中
context.xml:每一個應用都有專用的配置文件,其存放位置爲META-INF目錄下
tomcat-user.xml:用戶認證用戶名和密碼,啓動時裝入內存,在啓動後,在使用用戶名和密碼直接從內存中查找,不會在文件中查找即只要更改用戶名就須要從新啓動服務方可生效
catalina.policy:當前使用-security選項啓動tomcat時,用於tomcat設置安全策略
catalina.properties:java屬性的定義文件,用於設定類加載器路徑,以及JVM調優相關參數
logging.properties:日誌系統相關配置
server.xml配置文件各主要組件相關說明
server:類,服務器進程
service:connector和engine之間創建關聯的相關組件
connector:鏈接器,用來接受用戶請求,也能夠用來構建相應報文,所支持的協議有http,https,ajp(tomcat獨有協議須要搭配httpd服務實現)
engine:引擎,用來運行jsp代碼,也能夠稱之爲容器
host:虛擬主機,用來在同一個service中構建多個可被訪問的url地址
context:在同一個host中構建多個uri目錄,默認若是不更換原有的目錄,則不須要指定就能夠被訪問
<server> <service> <connector /> <connector /> <engine> <host> <context /> <context /> </host> <host> </host> </engine> </service> </server>
JSP應用組織結構
index.jsp:主頁
WEB-INF:當前應用的私有資源路徑,一般存儲web.xml和context.xml配置文件
META-INF:做用相似於WEB-INF
classes:類文件,當前應用所提供的類,被打包成jar格式的文件
lib:類文件,
4、tomcat基於httpd的反向代理
這裏是基於httpd2.4版本實現的反向代理
準備工做:在配置文件中指定servername須要在hosts文件中指定對應的IP地址才能夠解析,或者DNS能夠解析
步驟1
proxy_http_module代理配置示例: <VirtualHost *:80> ServerName www.test.com ProxyRequests Off #關閉正向正向代理 ProxyVia On #修改響應報文,是否添加via報文,顯示被代理的服務器主機名 ProxyPreserveHost On #保留客戶端響應首部主機名報文,代理者只有一個主機,被代理者有兩個主機的時候須要添加該選項 <Proxy *> #受權 Require all granted </Proxy> ProxyPass / http://www.test.com:8080/ #代理後端,/必須帶,若映射直接在後面添加便可 ProxyPa***everse / http://www.test.com:8080/ #若被重定向,是否也代理到後端 <Location /> #受權 Require all granted </Location> </VirtualHost>
步驟2
在後端tomcat上配置一臺tomcat,而且添加一個host配置便可
<Host name=" appBase="/app/web" unpackWARs="true" autoDeploy="true"> </Host>
5、tomcat會話基於httpd的cookie的會話粘性
步驟1
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <proxy balancer://tcsrvs> BalancerMember http://192.168.1.151:8080 route=TomcatA loadfactor=1 BalancerMember http://192.168.1.152:8080 route=TomcatB loadfactor=2 ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </Proxy> <VirtualHost *:80> ServerName www.test.com ProxyVia On ProxyRequests Off ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / balancer://tcsrvs/ ProxyPa***everse / balancer://tcsrvs/ <Location /> Require all granted </Location> </VirtualHost>
步驟2配置兩臺tomcat,並將默認的頁面中增長一個context,並指向應該指定的虛擬主機,不然會出現不能綁定客戶端的現象
<Host name="www.test.com" appBase="/app/web" unpackWARs="true" autoDeploy="true"> </Host>
6、tomcat會話集羣
tomcat根據廣播的形式,將客戶端的cookie信息共享個在同一個組播域中的每一臺tomcat服務器,可是這種方法不適合於太大的網絡拓撲,廣播域越大,所佔的網絡IO和磁盤IO也就越大,而且在實現該會話集羣時,建議不要講會話粘性關閉,由於開啓會話粘性,cookie同步只會是一個方向的同步,而沒有會話粘性,則會隨機方向的同步
實現:
步驟1:在nginx反向代理服務器上設置,只要是請求.jsp文件的所有負載均衡而且代理到後端服務器上
upstream webjsp { server 192.168.1.151:8080; server 192.168.1.152:8080; ip_hash; } server { listen 80; server_name www.test.com; index index.jsp index.html; root /web/; location ~* \.(jsp|do)$ { index index.jsp; proxy_pass http://.com:8080; } location / { root /app/ROOT/; } }
步驟2:在兩臺tomcat上都須要配置的配置
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.5" #組播地址,多臺服務器須要一致 port="45564" #監聽端口 frequency="500" #多久發送一次心跳,單位毫秒 dropTime="3000"/> #超時時間 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.152" #本地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>
還須要添加的配置,
1.須要在應用專用web.xml中添加<distributable />,不是在默認的web.xml
2.須要在serser.xml配置文件中Engine中添加 jvmRoute
3.須要保證集羣節點同步,
4.還能夠作會話綁定便可,目的是實現一個用戶會話始終是從一個服務器中同步其餘服務器,而不是從各個方向同步
6、memcached介紹
web應用的數據所有都是存儲到RDBMS數據庫中,而隨着業務的增加,查詢等各項速度都會急速降低,memcached是將數據緩存到內存中,減小用戶對數據庫的訪問次數,從而減小數據庫的訪問壓力
memcached的特徵
1.協議簡單
2.基於libevent的事件處理
3.內置內存存儲方式,因此意味着數據會有丟失的風險
4.memcached不互相通信的分佈式,memcached不能相互通信,故不能進行數據同步,每一臺memcached都是獨立的存在
memcached須要依賴於前端的應用應用程序服務器,須要前端的應用程序支持
優勢:可以提升訪問速度,加速用戶訪問,通常適用於對數據不是特別要求準確和不是特別注重安全的數據
缺點:訪問數據不許確,在緩存命中率較低時,不會增長訪問速度反而會下降訪問速度,由於每次一在訪問數據庫以前都須要本身去memcached緩存服務器中查看是否有緩存。
應用程序經過添加memcached緩存工做過程
應用服務器首先去memcached緩存服務器中查看是否有緩存,如有,直接相應客戶端,若無,則應用服務器本身去數據庫中查看結果,而後在將本次查到的數據緩存到memcached緩存服務器中,在下次訪問才能夠提升速度
7、會話服務器
配置拓撲圖
須要鏈接tomcat到memcached則須要相對應的鏈接器,倉庫默認沒有,須要第三方軟件https://github.com/magro/memcached-session-manager下載相對應的版本
使用sticky sessions + kryo則下載如下所有包到 java放jar文件的目錄下
msm-kryo-serializer, kryo-serializers-0.34+, kryo-3.x, minlog, reflectasm, asm-5.x, objenesis-2.x
在tomcat的server.xml配置文件中添加如下配置段
<Context path="" docBase="ROOT" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:web1.lin.com:11211,n2:web2.lin.com:11211" #指定後端的memcached服務器 failoverNodes="n1" #指定備用 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #指定哪些數據不被緩存 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" #轉碼工廠類 /> </Context>
memcached服務器只須要開啓服務便可
查看緩存命令memdump --server='192.168.1.153:11211'