部署Java和Tomcat

Tomcat介紹

Tomcat服務器是一個免費的開放源代碼的Web應用服務器,
在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP網頁的首選。 Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器同樣,
具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,
獨立的Servlet容器是Tomcat的默認模式。
不過,Tomcat處理靜態HTML的能力不如Nginx
/Apache服務器。 目前Tomcat最新版本爲9.0。Java容器還有resin、weblogic等。 Tomcat官網:http://tomcat.apache.org/

 

常見的JAVA應用架構模型html

tomcat處理JSP動態,還須要nginx處理靜態的,要動靜分離java

JVM是tomcat中的核心mysql

JVM介紹

JVM是Java Virtual Machine(Java虛擬機)的縮寫。實現程序可移植linux

只要有JVM,就能夠運行java程序,而JVM能夠在任何系統運行
Java的特性:一次編譯,處處運行
類比Vmware WorkStation的Linux系統

JDK(Java 語言的軟件開發工具,包含JVM)種類:nginx

  • Oracle JDK:商業軟件
  • openjdk:開源軟件

 

環境準備以及軟件選擇

從CentOS7模板機全新克隆2臺新主機
  第1臺:IP規劃爲10.0.0.17/172.16.1.17,主機名爲web03
  第2臺:IP規劃爲10.0.0.18/172.16.1.18,主機名爲web04
準備好lb01(CentOS6),須要其上的nginx反向代理功能
建立目錄/server/tools
將apsche-comcat和jdk上傳到web服務器中/server/tools
注:jdk和Tomcat的版本對運維來講沒什麼區別,安裝方法高度一致。

 

下載軟件web

mkdir -p /server/tools
cd /server/tools

下載comcat wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz

下載jdk https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

 

 

安裝JDKsql

建立目錄/application
重要提示:全部涉及到java應用都須要安裝 tar xf jdk
-8u60-linux-x64.tar.gz -C /application/ ln -s /application/jdk1.8.0_60 /application/jdk sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile source /etc/profile # 讓環境變量生效 java -version # 查看是否是安裝好了

# 注意:用echo想文件中添加多行的時候忙不解析內容中的$ 要使擁‘EOF,上面也能夠用這種方法

 

安裝Tomcat數據庫

tar xf apache-tomcat-8.0.27.tar.gz -C /application/
ln -s /application/apache-tomcat-8.0.27 /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
source /etc/profile
# 有一個坑,咱們正常解壓出來的文件是屬於root的,可是有的時候會顯示成數字,表示用戶不存在 chown
-R root.root /application/jdk/ /application/tomcat/ /application/tomcat/bin/version.sh # 顯示版本和系統配置

 

Tomcat目錄結構說明apache

[root@web03 tools]# cd /application/tomcat/
[root@web03 tomcat]# tree -L 1
.
├── bin   #命令 startup.sh shutdown.sh catalina.sh(核心)
├── conf  # server.xml(主配置文件) tomcat-users.xml(配置外部頁面管理tomcat)
├── lib    庫文件,插件和功能
├── LICENSE  
├── logs  # 日誌目錄  catalina.out tomcat實時日誌
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps  # 站點目錄
└── work  工做目錄

7 directories, 4 files

 目錄中的文件中的bat是windows中用的,sh是Linux中用的vim

 

啓動和關閉tomcat

/application/tomcat/bin/startup.sh
/application/tomcat/bin/shutdown.sh
啓動後,能夠查看日誌
tail -f /application/tomcat/logs/catalina.out netstat
-tunlp|grep java 不要輸成tomcat 在瀏覽器中輸入http://10.0.0.17:8080/
# 關閉的時候,要檢查端口和進程都沒有了,纔是真的關閉了
# 不然在從新啓動的時候,會啓動幾個同樣的進程,會報錯
ss -lntup|grep jave
ps -ef |grep java

 

 

查看日誌目錄

經過md5 和 diff 對比catalina.20xx-xx-xx 和 catalina.out 發現這兩個日誌中的內容是同樣的

查看日誌,讀懂日誌
/application/tomcat/logs
catalina.out        # 實時記錄tomcat運行信息,文件會愈來愈大,定時清空
catalina.時間.log   # catalina.out文件天天的日誌切割文件

# 每一個站點訪問日誌
host-manager.時間.log            管理主機操做日誌
localhost_access_log.時間.txt       訪問日誌
localhost.時間.log                  訪問日誌
manager.時間.log                    管理日誌

 

Tomcat在CentOS7啓動慢的緣由

查看實時日誌,發現緣由是生成隨機數的時候卡住了,致使tomcat啓動慢。

是否有足夠的熵來用於產生隨機數,能夠經過以下命令來查看
[root@oldboy tools]# cat /proc/sys/kernel/random/entropy_avail
7
爲了加速/dev/random提供隨機數的速度,你能夠經過操做設備的外設,
讓其產生大量的中斷(如網絡傳輸數據,按鍵,移動鼠標,在命令行敲幾個不一樣的命令,俗稱聚氣。 cat
/dev/random 會消耗能量 yum install rng-tools # 安裝rngd服務(熵服務,增大熵池) systemctl start rngd # 啓動服務

 

tomcat 管理功能(測試環境使用)

生產環境不要開啓這個功能

[root@web03 webapps]# tail -4 /application/tomcat/conf/tomcat-users.xml
到文件最後添加下面內容
<role rolename="manager-gui"/> <role rolename="admin-gui"/>
<role rolename="host-gui"> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui,host-gui"/> </tomcat-users> /application/tomcat/bin/shutdown.sh
ss -lntup|grep jave
ps -ef |grep java
/application/tomcat/bin/startup.sh

在web頁面中點擊管理按鈕,輸入帳號密碼,默認都是tomcat

 

搭建Jpress

相似wordpess博客站點
環境:Linux Tomcat JDK MySQL(Mariadb)

yum -y install mariadb-server
systemctl start mariadb.service

mysql
create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'localhost' identified by '123456';
grant all on jpress.* to jpress@'172.16.1.%' identified by '123456';
flush privileges;
# 能夠鏈接另外一臺的mysql,只須要有命令文件便可,沒有能夠推一個或者拉一個過來
# 是爲了不重複安裝
[root@web04 ~]# mysql -ujpress -p123456 -h 172.16.1.17

上傳jpress
-web-newest.war到/application/tomcat/webapps目錄,過一會自動節解壓了
這是自動部署的功能,能夠在日誌中看到信息
http:
//10.0.0.17:8080/jpress-web-newest/ 網頁安裝
跟着嚮導走,由於沒有啓動數據庫服務器,暫時就使用本地服務器了

 

jpress不會自動重啓,須要手動重啓tomcat

[root@web03 webapps]# /application/tomcat/bin/shutdown.sh

[root@web03 webapps]# ss -lntup|grep java
[root@web03 webapps]# ps -ef |grep java
#確保沒有殘留的進程,有就殺掉pkill java

#從新啓動

[root@web03 webapps]# /application/tomcat/bin/startup.sh

#瀏覽器顯示博客頁面,部署成功

http://10.0.0.17:8080/jpress-web-newest/admin/login須要輸入admin才能登錄

# 輸入剛剛設置的帳號密碼,登錄,就能夠發佈文章了

 

 

Tomcat主配置文件介紹

文件位置/application/tomcat/conf/server.xml

    <Server port="8005" shutdown="SHUTDOWN">   # 向8005端口發送SHUTDOWN 就關閉了tomcat <Connector port="8080" protocol="HTTP/1.1"
  # 默認的訪問端口, connectionTimeout="20000" 單位是毫秒 redirectPort="8443" /> 和http配置有關 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  # 用來和apache通訊 ,咱們後面用nginx,能夠不用管

  # Host中的內容 就是虛擬主機
       <Host name="localhost"  appBase="webapps"
149             unpackWARs="true" autoDeploy="true">
150
151         <!-- SingleSignOn valve, share authentication between web applications
152              Documentation at: /docs/config/valve.html -->
153         <!--
154         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
155         -->
156
157         <!-- Access log processes all example.
158              Documentation at: /docs/config/valve.html
159              Note: The pattern used is equivalent to using pattern="common" -->
160         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
161                prefix="localhost_access_log" suffix=".txt"
162                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
163
164       </Host> 詳細說明:http://blog.oldboyedu.com/java-tomcat/

 

如今來簡化一下咱們的訪問路徑

http://10.0.0.17:8080/jpress-web-newest 改成http://10.0.0.17:8080/jpress

在配置文件中加上下面這行,記在Host標籤內部

 

<Context path="/jpress" 
docBase="/application/tomcat/webapps/jpress-web-newest"
debug="0" reloadable="false" crossContext="true"/>

 

 

 

重啓後訪問http://10.0.0.17:8080/jpress。確保都關閉了

訪問成功!

Tomcat多實例

 

多虛擬主機:nginx 多個Server標籤(域名,ip,端口),進程數量固定 master+worker

多實例(多進程):同一個程序啓動屢次,分爲兩種狀況:
第一種:一臺機器跑多個站點;
第二種:一個機器跑一個站點多個實例,配合負載均衡

 

 

 

應用場景:一臺服務器部署多個網站,啓動多個tomcat程序

再將tomcat複製兩份

[root@web03 tools]# tar xf apache-tomcat-8.5.38.tar.gz
[root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_1 -a
[root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_2 -a
#修改端口
[root@web03 tools]# sed -i "s#8005#8006#g" tomcat_1/conf/server.xml
[root@web03 tools]# sed -i "s#8080#8081#g" tomcat_1/conf/server.xml
[root@web03 tools]# sed -i "s#8009#8010#g" tomcat_1/conf/server.xml


[root@web03 tools]# sed -i "s#8005#8007#g" tomcat_2/conf/server.xml
[root@web03 tools]# sed -i "s#8080#8082#g" tomcat_2/conf/server.xml
[root@web03 tools]# sed -i "s#8009#8011#g" tomcat_2/conf/server.xml
#移動到application下

[root@web03 tools]# mv tomcat_* /application/
#啓動!

[root@web03 tools]# /application/tomcat_1/bin/startup.sh
[root@web03 tools]# /application/tomcat_2/bin/startup.sh
#建立測試文件!在webapps/ROOT 是默認的訪問目錄
[root@web03 tools]# echo default-8080 >/application/tomcat/webapps/ROOT/index.jsp
[root@web03 tools]# echo default-8081 >/application/tomcat_1/webapps/ROOT/index.jsp
[root@web03 tools]# echo default-8082 >/application/tomcat_2/webapps/ROOT/index.jsp

瀏覽器訪問:http://10.0.0.17:8080/       http://10.0.0.17:8081/     http://10.0.0.17:8082/

 

 

Tomcat反向代理集羣

 

# 在CentOS6的lb01操做
mv /application/nginx/conf/nginx.conf{,.ori}
egrep -v '#|^$' /application/nginx/conf/nginx.conf.default  > /application/nginx/conf/nginx.conf

cat /application/nginx/conf/nginx.conf
……
 upstream web_pools {
        server 10.0.0.17:8081;
        server 10.0.0.17:8082;
    }
……
 location / {
             root   html;
             index  index.jsp index.html index.htm;
            proxy_pass http://web_pools;
        }

Tomcat監控

 

1、Tomcat自帶函數檢測:meminfo.jsp(不建議使用)
  將函數寫入文件,在瀏覽器訪問?
2、jps命令:jdk包帶的命令,jps主要用來輸出JVM中運行的進程狀態信息。 語法格式:jps [options] [hostid] 若是不指定hostid就默認爲當前主機或服務器。 參數說明: -q 不輸出類名、Jar名和傳入main方法的參數 -m 輸出傳入main方法的參數 -l 輸出main類或Jar的全名 -v 輸出傳入JVM的參數 jps -lvm #→快速獲取Java進程的pid,不用ps和grep
3、jstack:主要用來查看某個Java進程內的線程堆棧信息。 jstack能夠定位到線程堆棧,根據堆棧信息咱們能夠定位到具體代碼,
因此它在JVM性能調優中使用得很是多。 排除tomcat故障步驟 a. 查看catalina.out b. sh show
-busy-java-threads.sh
4、jconsole和jvisualvm 這是windows安裝完jdk後的圖形監控工具。 C:\Program Files\Java\jdk1.8.0_31\bin

 

 

 

 

tomcat開啓遠程監控

 

vim /application/tomcat8_1/bin/catalina.sh +97 修改文件第97行,版本不一樣行數也會不一樣
# OS specific support.  $var _must_ be set to either true or false.在這一行以前
#加上下面的代碼
CATALINA_OPTS="$CATALINA_OPTS # 額外的參數 -Dcom.sun.management.jmxremote # 開啓遠程監控 -Dcom.sun.management.jmxremote.port=12345 # 監控功能的端口 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.1.17" # 監聽的IP 要用內網,這個功能仍是很危險的
# 主機名解析 echo "172.16.1.17 web03" >>/etc/hosts /application/tomcat8_1/bin/shutdown.sh /application/tomcat8_1/bin/startup.sh netstat -tunlp|grep 12345

 

 

 

 

java不是經過安裝zabbix agent 來開啓客戶端監控的

而是用java-gateway,在zabbix服務器上安裝

 

 

第一步:Zabbix Server 須要開啓java監控功能(作1次)
sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf
systemctl restart zabbix-server.service

第二步:安裝zabbix_java_gateway(java程序),也須要jdk(openjdk)  (作1次)
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum  -y install zabbix-java-gateway
systemctl start zabbix-java-gateway.service 
netstat -tunlp|grep java

在http://10.0.0.61/zabbix/的WEB頁面上添加主機
移除agent代理
添加JMX接口
第三步:Tomcat須要開啓遠程監控功能 (每個實例都要作)

Tomcat安全優化

關閉端口保護     8005  SHUTDOWN
ajp鏈接端口保護  8009 註釋
禁用管理端   
降權啓動:下降用戶權限啓動
pkill java
useradd tomcat
cp -a /application/tools/tomcat8_1 /home/tomcat/
chown -R tomcat.tomcat /home/tomcat/tomcat8_1/
su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat


更詳細的優化查看文檔,點擊下載

Tomcat性能優化

tomcat性能取決於你的內存大小。

上策:優化代碼 
中策:jvm優化機制--垃圾回收機制,把不須要的內存回收
        優化jvm--優化垃圾回收策略
優化catalina.sh配置文件。在catalina.sh配置文件中添加如下代碼:
#tomcat分配1G內存模板
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"    

下策:加足夠大的內存
下下策:天天0點定時重啓tomcat
相關文章
相關標籤/搜索