tomcat基礎概念及基於Nginx、apache、以及第三方模塊的負載均衡
【背景】
客戶端動態:是由客戶端請求,服務器端把源代碼原封不動的發給客戶端,然後客戶端的瀏覽器來解析。但是這樣存在的弊端就是,如果C語言編譯過,不是所有的客戶端平臺都和C編譯的平臺相同。那麼其他的用戶就沒辦使用。而java是基於客戶端的虛擬主機運行的。客戶端只要安裝了java虛擬機。不管使用的什麼平臺,都會通過java虛擬磨平底層架構的區別。這樣只要服務器編譯,客戶端運行即可。
程序接口:有開發接口,和運行接口。這樣就實現了,一次開發到處運行。
存在問題:1.客戶端運行不安全,萬一下載到病毒,繞過應用級,後果很嚴重。2:容易被反編譯,代碼容易被獲取。
於是之後又產生了服務器端的動態:也就是基於CGI協議的實現, 這是一種更安全的協議。web是充當一個反向代理的方式來實現的。
【java的技術體系】
JAVA的技術體系由四個組成部分:
java程序設計語言:
java應用程序接口:(API)
Java class類文件格式:
java 虛擬機
【java的實現過程】
JAVA的底層實現過程:
通常一個大的應用程序,裏面包含很多小的java程序。他們想要運行就必須先通過JAVA編譯器編譯,編譯的過程就是把java語言變成類文件(*.class),也就是字節碼。但是JAVA程序想要被運行,必須運行在JVM上。但是一個程序被運行,還需要其依賴的類。這時就需要在依賴的jAVA虛擬機中,有一個類加載器,這個類加載器把Java程序需要的類,加載到虛擬機上。這樣一個JAVA就可以實現在虛擬機上運行了。但是我們的可以查看到java程序處理的結果,還需要我們的物理機通過系統調用或者庫調用,實現最終終端java程序的效果。
【基於nginx的負載均衡】
lftp 172.16.0.1:/pub/Sources/6.x86_64/jdk> mget jdk-7u67-linux-x64.rpm // 下載jdk程序包 126857158 bytes transferred in 14 seconds (8.42M/s) lftp 172.16.0.1:/pub/Sources/6.x86_64/jdk> bye [root@localhost ~ ]# ls anaconda-ks.cfg apache-tomcat-7.0.55.tar.gz install.log install.log.syslog jdk-7u67-linux-x [root@localhost~ ]# ls anaconda-ks.cfg install.log jdk-7u67-linux-x64.rpm apache-tomcat-7.0.55.tar.gz install.log.syslog [root@localhost ~ ]#rpm -ivh jdk-7u67-linux-x64.rpm Preparing... ########################################### [100%] 1:jdk ########################################### [100%]
爲了讓java可以運行起來,我們需要爲java添加一個環境變量;JAVA_HOME
注意在;這個JAVA_HOME.就是我們安裝的jdk的文件位置。我們使用最新的一個,也就是
JAVA_HOME--> /usr/java/latest
[root@localhost jdk1.7.0_67 ]# cd /etc/profile.d/ [root@localhost profile.d ]# vim java.sh 1 export JAVA_HOME=/usr/java/latest 2 export PATH=$JAVA_HOME/bin:$PATH
[root@localhost profile.d ]# printenv //重讀環境變量,查看生成的變量HOSTNAME=localhost.localdomain TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.16.250.222 53438 22 QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/0 USER=root
[root@localhost ~ ]# java -version //查看java版本,觀察是否正常 java version "1.7.0_67" Java(TM) SE Runtime Environment (build 1.7.0_67-b01) Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
#################################部署tomcat ########################################## tar xf apache-tomcat-7.0.55.tar.gz -C /usr/local Ln -sv apache-tomcat-7.0.55 tmocat [root@localhost profile.d ]# vim tomcat.sh //或者tomcat.sh 添加tomcat的環境變量 1 export CATALINA_HOME=/usr/local/tomcat 2 export PATH=$CATALINA_HOME/bin:$PATH ####################################重讀路徑文件####################################### #. /etc/profie.d/tomcat.sh [root@localhost bin]# . /etc/profile.d/tomcat.sh [root@localhostbin ]# catalina.sh start #################其他節點相同操作,佈置不同的顯示頁面,便於查看效果####################
################################配置基於Nginx的負載均衡實驗########################################
在http後端端定義upstream組。
[root@node1 nginx ]# vim nginx.conf 36 #gzip on; 37 38 upstream tcsrvs { 39 server 192.168.0.104:8080; 40 server 192.168.0.103:8080; 41 }
#################################### 定義前端引用############################################
[root@node1 conf.d ]#vim default.conf 4 server { 5 listen 80 default_server; 6 server_name _; :x 12 location / { 13 #rewrite /(.*) /bbs/$1 break; 14 # root /usr/share/nginx/html/; 15 index index.html index.htm; 16 proxy_pass http://tcsrvs; 17 }
重啓測試訪問NGINX 。
【基於apache的負載均衡】
httpd配置文件如下配置,但是要把中心主機關閉,開啓虛擬主機。
#vim /etc/httpd/conf/httpd.conf 1 NameVirtualHost*:80 2 <Proxy balancer://tcsrvs> ####定義的負載均衡的後端主機組 3 BalancerMember loadfactor=1 各後端主機 4 BalancerMember http://192.168.0.103:80 loadfactor=1 5 # ProxySet lbmethod=byrequests 6 </Proxy> 7 <VirtualHost *:80> 8 ServerName www.stu11.com 9 ErrorLog logs/error_log 10 CustomLog logs/access_log common 11 ProxyVia On 12 ProxyRequests OFF 13 proxypreserveHost On 14 <Proxy *> ####定義訪問控制限爲all 15 Order deny,allow 16 Allow from all 17 </Proxy> 18 Proxypass /status ! 19 ProxyPass / balancer://tcsrvs/ 20 proxypa***everse / balancer://tcsrvs/ ####引用定義的組 21 <location /> 22 Order deny,allow 23 Allow from all 24 </location> 25 </VirtualHost>
【使用apache基於ajp協議實現負載均衡配置文件如下】
1 NameVirtualHost*:80 2 <Proxy balancer://tcsrvs> 3 BalancerMember ajp://192.168.0.104:8009 loadfactor=1 4 BalancerMember http://192.168.0.103:8009 loadfactor=1 5 # ProxySet lbmethod=byrequests 6 </Proxy> 7 <VirtualHost *:80> 8 ServerName www.stu11.com 9 ErrorLog logs/error_log 10 CustomLog logs/access_log common 11 ProxyVia On 12 ProxyRequests OFF 13 proxypreserveHost On 14 <Proxy *> 15 Order deny,allow 16 Allow from all 17 </Proxy> 18 Proxypass /status ! 19 ProxyPass / balancer://tcsrvs/ 20 proxypa***everse / balancer://tcsrvs/ 21 <location /> 22 Order deny,allow 23 Allow from all 24 </location> 25 </VirtualHost>
【制定管理頁面不代理】
1 NameVirtualHost *:80 2 <Proxy balancer://tcsrvs> 3 BalancerMember loadfactor=1 4 BalancerMember http://192.168.0.103:80 loadfactor=1 5 # ProxySet lbmethod=byrequests 6 </Proxy> 7 <VirtualHost *:80> 8 ServerName www.stu11.com 9 ErrorLog logs/error_log 10 CustomLog logs/access_log common 11 ProxyVia On 12 ProxyRequests OFF 13 proxypreserveHost On 14 <Proxy *> 15 Order deny,allow 16 Allow from all 17 </Proxy> 18 <Location /balancer-manager> ####定義管理頁面 19 SetHandler balancer-manager 20 Proxypass ! ###不給於代理 21 Order Deny,Allow 22 ALLow from all 23 </Location> 24 Proxypass /status ! 25 ProxyPass / balancer://tcsrvs/ 26 proxypa***everse / balancer://tcsrvs/ 27 <location /> 28 Order deny,allow 29 Allow from all 30 </location> 31 </VirtualHost>
【基於第三方模塊mod_jk實現負載均衡】
[root@node1 conf.d ]# vim workers.propeties 1 worker.list=tcsrvs,StatA 2 worker.TomcatA.port=8009 3 worker.TomcatA.host=172.16.249.11 4 worker.TomcatA.type=ajp13 5 worker.TomcatA.lbfactor=1 6 7 worker.TomcatB.port=8009 8 worker.TomcatB.host=172.16.249.12 9 worker.TomcatB.type=ajp13 10 worker.TomcatB.lbfactor=1 11 worker.tcsrvs.type=lb 12 worker.tcsrvs.sticky_session=1 13 worker.tcsrvs.balance_workers=TomcatA,TomcatB 14 worker.statA.type=status [root@node1 conf.d]# vim mod_jk.conf 1 Loadmodule jk_module modules/mod_jk.so 2 JkWorkersFile /etc/httpd/conf.d/workers.propeties 3 JklogFile logs/mod_jk.log 4 JklogLevel info 5 JkMOunt /status ! 6 JkMount /jk-status StatA 7 JkMount /* tcsrvs