姓名:鄭紅????????????????????????????????? 學(xué)號(hào):17101223385
本文轉(zhuǎn)自http://server.51cto.com/sOS-560862.htm
【嵌牛導(dǎo)讀】:Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請(qǐng)求,到達(dá)Nginx,由Nginx將請(qǐng)求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。
【嵌牛鼻子】:Linux??? Nginx ? ? ?Tomcat
【嵌牛提問(wèn)】:什么是Nginx?
【嵌牛正文】:
一、簡(jiǎn)介
【Nginx】 大名鼎鼎,麻雀雖小五臟俱全,它擁有小而穩(wěn)且高效的特性。為目前大多數(shù)中小企業(yè)所使用。nginx可以做以下幾件事:
反向代理
負(fù)載均衡
動(dòng)靜分離
網(wǎng)頁(yè)、圖片緩存
【Tomcat】 是一個(gè)免費(fèi)開(kāi)放源代碼的 Web 應(yīng)用服務(wù)器,具有開(kāi)源免費(fèi)、容易安裝、 容易使 用、占用資源小、易于和其他軟件集成等優(yōu)點(diǎn)。
Tomcat 很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載
平衡與郵件服務(wù)等開(kāi)發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個(gè)感 興趣的程序員都可以更改它或在其中加入新的功能。
【N+T的負(fù)載均衡】
然而他們的組合將是一把無(wú)與倫比的利刃。首先說(shuō)明一下它的請(qǐng)求原理(路徑走向)
Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請(qǐng)求,到達(dá)Nginx,由Nginx將請(qǐng)求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。
下面上圖:

圖中的信息顯而易見(jiàn),以nginx服務(wù)器作為中轉(zhuǎn)分發(fā)請(qǐng)求,以達(dá)到負(fù)載均衡的目的。
二、環(huán)境需求
【由于博主的主機(jī)(臉紅~)配置低,所以只開(kāi)一開(kāi)虛擬機(jī)作為這次負(fù)載均衡的測(cè)試。一個(gè)ip三個(gè)端口既可實(shí)現(xiàn)上圖所述的效果了】
主機(jī)A:192.168.0.144/24
apache-tomcat-6.0.35.tar.gz ? tomcat 6 ?使用的主要端口:18080
apache-tomcat-7.0.82.tar.gz ? tomcat 7 ?使用的主要端口:28080
apache-tomcat-8.5.23.tar.gz ? tomcat 8 ?使用的主要端口: 8088
nginx-1.0.12.tar.gz
jdk7u79linuxx64.tar.gz
(其他一些基礎(chǔ)環(huán)境比如gcc-c++的自己補(bǔ)全吧)
三、各個(gè)環(huán)境的搭建
3.1 Nginx搭建
先把所有準(zhǔn)備好的軟件工具放到一個(gè)目錄下(都先準(zhǔn)備好必用軟件,不然配置起來(lái)才去找軟件是很煩人的)
[root@N+T?lhl]#?ll
total?175172
-rw-r--r--?1?root?root???9472492?Dec??1??2017?apache-tomcat-8.5.23.tar.gz
-rw-r--r--?1?root?root?153512879?Dec??7??2017?jdk7u79linuxx64.tar.gz
-rw-r--r--?1?root?root????691002?May??9??2012?nginx-1.0.12.tar.gz
-rw-r--r--?1?root?root??15692490?Nov?29??2017?Tomcat6-7.zip
接下來(lái)安裝一下開(kāi)發(fā)環(huán)境
[root@N+T?lhl]#?yum?-y?install?gcc?gcc-c++
在/usr目錄下面創(chuàng)建一個(gè)nginx的目錄,并把nginx包移動(dòng)到該目錄下,再解壓到該目錄下面
[root@N+T?lhl]#?mkdir?-p?/usr/nginx
[root@N+T?lhl]#?mv?nginx-1.0.12.tar.gz?/usr/nginx/?&&cd?/usr/nginx/&&tar?-zxvf?nginx-1.0.12.tar.gz
最好進(jìn)入nginx-1.0.12目錄,再編譯安裝
[root@N+T?nginx-1.0.12]#?./configure?&&make?&&make?install
一般編譯安裝都默認(rèn)在/usr/local/nginx/ 目錄下面 ,下面這個(gè)就是nginx的主程序。
[root@N+T?sbin]#?ll?/usr/local/nginx/sbin/nginx
-rwxr-xr-x?1?root?root?954836?Aug?16?04:43?/usr/local/nginx/sbin/nginx
本博文為了搭建的方便直接把這個(gè)主程序拉倒/usr/bin/ 目錄下了
[root@N+T?sbin]#?cp?-a?/usr/local/nginx/sbin/nginx?/usr/bin/
下面是配置文件
[root@N+T?sbin]#?ll?/usr/local/nginx/conf/nginx.conf
簡(jiǎn)單的配置了一下配置文件
#####nginx+3?T?負(fù)載均衡測(cè)試############
#####最簡(jiǎn)化的配置文件了--###############
usernobody;???#對(duì)于用戶有安全性限制的伙伴可以創(chuàng)建一個(gè)賬戶去使用
worker_processes?1;
events?{
use?epoll;
worker_connections??1024;
}
http
{
include???????mime.types;
default_type??application/octet-stream;
sendfileon;
keepalive_timeout??60;?#簡(jiǎn)單文本顯示格式編輯
fastcgi_connect_timeout?300;
fastcgi_send_timeout?300;
fastcgi_read_timeout?300;
fastcgi_buffer_size?64k;
fastcgi_buffers?8?128k;
fastcgi_busy_buffers_size?128k;
fastcgi_temp_file_write_size?128k;
fastcgi_temp_path?/dev/shm;
server{
listen???????80;
server_name??localhost;
access_log?/var/log/nginx/aeecss.log;
error_log??/var/log/nginx/error.log;
location?/?{
proxy_pass??http://li7105.com;
proxy_redirectdefault;
}
}
}
下面運(yùn)行nginx,查看信息
[root@N+T?sbin]#?/usr/bin/nginx?-c?/usr/local/nginx/conf/nginx.conf
[root@N+T?sbin]#?ps?-ef?|?grep?nginx
root???????1561??????1??0?13:04??????????00:00:00?nginx:?master?process?/usr/bin/nginx?-c?/usr/local/nginx/conf/nginx.conf
www????????1562???1561??0?13:04??????????00:00:00?nginx:?worker?process
root???????1709???1573??0?18:49?pts/1????00:00:00?grep--color?nginx
注意:nginx沒(méi)有啟動(dòng)起來(lái),麻煩去認(rèn)真的檢查一下nginx配置文件。
PS:開(kāi)機(jī)機(jī)動(dòng)啟動(dòng)的話,直接把啟動(dòng)代碼丟進(jìn)rc.local這個(gè)文件里面即可。
[root@N+T?lhl]#?echo"/usr/bin/nginx??-c?/usr/local/nginx/conf/nginx.conf">>?/etc/rc.d/rc.local
nginx的基本部署完成!
3.2 Tomcat 的搭建
由于tomcat依賴(lài)于jdk環(huán)境下運(yùn)行,所以先搭建jdk環(huán)境,配置變量環(huán)境
[root@N+T?lhl]#?mkdir?/usr/java/
[root@N+T?lhl]#?mv?jdk7u79linuxx64.tar.gz?/usr/java/?&&?cd?/usr/java/?&&?tar?-zxvf?jdk7u79linuxx64.tar.gz
[root@N+T?java]#?ll
total?4
drwxr-xr-x?8?uucp?143?4096?Apr?11??2015?jdk1.7.0_79
[root@N+T?java]#?cd?jdk1.7.0_79/
[root@N+T?jdk1.7.0_79]#?pwd??#看清楚路徑
/usr/java/jdk1.7.0_79
[root@N+T?jdk1.7.0_79]#
PS:關(guān)于軟件依賴(lài)的變量環(huán)境
就目前來(lái)去為一個(gè)軟件或者環(huán)境的運(yùn)行去搭建變量環(huán)境主要用下面三種方法
1、在/etc/profile下配置,這屬于大環(huán)境的配置了。不過(guò)管理上不靈活,屬于點(diǎn)到面的管理(本博文由于只有這個(gè)tomcat用到,所以在這配置了)
2、在/etc/profile.d/目錄下面創(chuàng)建一個(gè)專(zhuān)屬的變量環(huán)境如:tomcat.sh ?在里面指的變量路徑以及文件路徑,這種方式管理很靈活,屬于點(diǎn)到點(diǎn)的管理。
3、在軟件的某個(gè)文本下面去直接添加指定的變量環(huán)境,如tomcat的。
[root@N+T?bin]#?pwd
/usr/tomcatG/tomcat6/bin
[root@N+T?bin]#?ll
total?612
-rw-r--r--?1?root?root??22705?Nov?28??2011?bootstrap.jar
-rw-r--r--?1?root?root??11830?Nov?28??2011?catalina.bat
-rwxr-xr-x?1?root?root??17708?Nov?28??2011?catalina.sh
-rw-r--r--?1?root?root???2374?Nov?28??2011?catalina-tasks.xml
-rw-r--r--?1?root?root??24172?Nov?28??2011?commons-daemon.jar
-rw-r--r--?1?root?root?199623?Nov?28??2011?commons-daemon-native.tar.gz
-rw-r--r--?1?root?root???1342?Nov?28??2011?cpappend.bat
-rw-r--r--?1?root?root???2108?Nov?28??2011?digest.bat
-rwxr-xr-x?1?root?root???1689?Nov?28??2011?digest.sh
-rw-r--r--?1?root?root???3150?Nov?28??2011?setclasspath.bat
-rwxr-xr-x?1?root?root???4153?Aug?16?10:57?setclasspath.sh?###在這個(gè)文件里面指定變量環(huán)境
-rw-r--r--?1?root?root???2108?Nov?28??2011?shutdown.bat
-rwxr-xr-x?1?root?root???1628?Nov?28??2011?shutdown.sh
-rw-r--r--?1?root?root???2109?Nov?28??2011?startup.bat
-rwxr-xr-x?1?root?root???2023?Nov?28??2011?startup.sh
-rw-r--r--?1?root?root??32277?Nov?28??2011?tomcat-juli.jar
-rw-r--r--?1?root?root?249259?Nov?28??2011?tomcat-native.tar.gz
-rw-r--r--?1?root?root???3479?Nov?28??2011?tool-wrapper.bat
-rwxr-xr-x?1?root?root???3472?Nov?28??2011?tool-wrapper.sh
-rw-r--r--?1?root?root???2113?Nov?28??2011?version.bat
-rwxr-xr-x?1?root?root???1632?Nov?28??2011?version.sh
[root@N+T?bin]#
setclasspath.sh ?里面指定。軟件的不同在不同的文件指定吧,這個(gè)可以在度娘查到。第三種辦法一般很少用到。
繼續(xù)!下面在/etc/profile下配置變量環(huán)境
export?JAVA_HOME=/usr/java/jdk1.7.0_79/??#路徑別弄錯(cuò)
export?JAVA_BIN=$JAVA_HOME/bin
export?PATH=$PATH:$JAVA_HOME/bin
export?CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
最后直接執(zhí)行,使得文件profile生效
[root@N+T?/]#?source?/etc/profile
接著執(zhí)行 java -version ?命令即可看到對(duì)應(yīng)的版本號(hào),說(shuō)明已經(jīng)生效了。(在這里有些小伙伴會(huì)時(shí)常出現(xiàn)一個(gè)問(wèn)題,明明tomcat已經(jīng)實(shí)在用這個(gè)
jdk版本了,可是輸入命令java -version
顯示出來(lái)的卻不是目前tomcat在用的jdk版本,這時(shí)候該注意一下查看tomcat下面的comment目錄下的jdk版本是否對(duì)應(yīng)的,不是的話。就把jdk下的替換過(guò)去,另外我還有尋找另外一種解決辦法,希望各位賜教。)
jdk部署完畢!
3.3 tomcat 的搭建
在/usr 下創(chuàng)建tomcatG 的目錄,并且把三個(gè)版本的tomcat拉到目錄下分別改名為tomcat6、tomcat7、tomcat8。最后分別解壓,再修改server.xml ?文檔的端口
[root@N+T?tomcatG]#?ll
total?12
drwxr-xr-x?9?root?root?4096?Aug?16?10:27?tomcat6
drwxr-xr-x?9?root?root?4096?Aug?16?10:49?tomcat7
drwxr-xr-x?9?root?root?4096?Aug?16?11:11?tomcat8
[root@N+T?tomcatG]#
下面修改tomcat6的server.xml文件:三處地方
1、
connectionTimeout="20000"
redirectPort="8443"/>
2、
3、
剩下的tomcat7和tomcat8以此類(lèi)推!
下面啟動(dòng)tomcat6-8
啟動(dòng)tomcat6:
[root@N+T?bin]#?pwd
/usr/tomcatG/tomcat6/bin
[root@N+T?bin]#?ll
total?612
-rw-r--r--?1?root?root??22705?Nov?28??2011?bootstrap.jar
-rw-r--r--?1?root?root??11830?Nov?28??2011?catalina.bat
-rwxr-xr-x?1?root?root??17708?Nov?28??2011?catalina.sh
-rw-r--r--?1?root?root???2374?Nov?28??2011?catalina-tasks.xml
-rw-r--r--?1?root?root??24172?Nov?28??2011?commons-daemon.jar
-rw-r--r--?1?root?root?199623?Nov?28??2011?commons-daemon-native.tar.gz
-rw-r--r--?1?root?root???1342?Nov?28??2011?cpappend.bat
-rw-r--r--?1?root?root???2108?Nov?28??2011?digest.bat
-rwxr-xr-x?1?root?root???1689?Nov?28??2011?digest.sh
-rw-r--r--?1?root?root???3150?Nov?28??2011?setclasspath.bat
-rwxr-xr-x?1?root?root???4153?Aug?16?10:57?setclasspath.sh
-rw-r--r--?1?root?root???2108?Nov?28??2011?shutdown.bat
-rwxr-xr-x?1?root?root???1628?Nov?28??2011?shutdown.sh??#這是停止
-rw-r--r--?1?root?root???2109?Nov?28??2011?startup.bat
-rwxr-xr-x?1?root?root???2023?Nov?28??2011?startup.sh??#啟動(dòng)
-rw-r--r--?1?root?root??32277?Nov?28??2011?tomcat-juli.jar
-rw-r--r--?1?root?root?249259?Nov?28??2011?tomcat-native.tar.gz
-rw-r--r--?1?root?root???3479?Nov?28??2011?tool-wrapper.bat
-rwxr-xr-x?1?root?root???3472?Nov?28??2011?tool-wrapper.sh
-rw-r--r--?1?root?root???2113?Nov?28??2011?version.bat
-rwxr-xr-x?1?root?root???1632?Nov?28??2011?version.sh
[root@N+T?bin]#?./startup.sh
如圖所示!
tomcat 7-8以此類(lèi)推!
再看一下三個(gè)tomcat啟動(dòng)的進(jìn)程。
[root@N+T?bin]#?ps?-ef?|grep?tomcat
root???????1278??????1??0?13:50??????????00:00:10?/usr/java/jdk1.7.0_79/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat7/conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djdk.tls.ephemeralDHKeySize=2048?-Djava.endorsed.dirs=/usr/tomcatG/tomcat7/endorsed?-classpath?/usr/tomcatG/tomcat7/bin/bootstrap.jar:/usr/tomcatG/tomcat7/bin/tomcat-juli.jar?-Dcatalina.base=/usr/tomcatG/tomcat7?-Dcatalina.home=/usr/tomcatG/tomcat7?-Djava.io.tmpdir=/usr/tomcatG/tomcat7/temporg.apache.catalina.startup.Bootstrap?start?start
root???????1287??????1??0?13:50??????????00:00:13?/usr/java/jdk1.7.0_79/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat8/conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djdk.tls.ephemeralDHKeySize=2048?-Djava.protocol.handler.pkgs=org.apache.catalina.webresources?-classpath?/usr/tomcatG/tomcat8/bin/bootstrap.jar:/usr/tomcatG/tomcat8/bin/tomcat-juli.jar?-Dcatalina.base=/usr/tomcatG/tomcat8?-Dcatalina.home=/usr/tomcatG/tomcat8?-Djava.io.tmpdir=/usr/tomcatG/tomcat8/temporg.apache.catalina.startup.Bootstrap?start?start
root???????1301??????1??0?13:50??????????00:00:08?/usr/java/jdk1.7.0_79/jre/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat6//conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djava.endorsed.dirs=/usr/tomcatG/tomcat6//endorsed?-classpath?/usr/tomcatG/tomcat6//bin/bootstrap.jar?-Dcatalina.base=/usr/tomcatG/tomcat6/?-Dcatalina.home=/usr/tomcatG/tomcat6/?-Djava.io.tmpdir=/usr/tomcatG/tomcat6//temporg.apache.catalina.startup.Bootstrap?start
root???????1509???1418??0?15:02?pts/0????00:00:00?grep--color?tomcat
[root@N+T?bin]#
可以看到,各個(gè)端口以及運(yùn)行的變量環(huán)境(jdk)這個(gè)排版比較長(zhǎng),需要往后面拉取才能看到所有內(nèi)容。
3.4 配置負(fù)載均衡
在nginx里面添加幾條代碼即可,下面請(qǐng)看
#####nginx+3?T?負(fù)載均衡測(cè)試############
usernobody;
worker_processes?1;
events?{
use?epoll;
worker_connections??1024;
}
http
{
include???????mime.types;
default_type??application/octet-stream;
sendfileon;
keepalive_timeout??60;
fastcgi_connect_timeout?300;
fastcgi_send_timeout?300;
fastcgi_read_timeout?300;
fastcgi_buffer_size?64k;
fastcgi_buffers?8?128k;
fastcgi_busy_buffers_size?128k;
fastcgi_temp_file_write_size?128k;
fastcgi_temp_path?/dev/shm;
upstream?li7105.com?{??????????????#在此插入
server?127.0.0.1:18080?weight=1;???#tomcat6分流????weight=1??這是權(quán)重分配。
server?127.0.0.1:28080?weight=2;???#tomcat7分流????weight=2?顯然2更大,那么它被分配任務(wù)的幾率也就更大
server?127.0.0.1:8088?weight=2;????#tomcat8分流
}
server{
listen???????80;
server_name??localhost;
access_log?/var/log/nginx/aeecss.log;
error_log??/var/log/nginx/error.log;
location?/?{
proxy_pass??http://li7105.com;
proxy_redirectdefault;
}
}
}
【關(guān)于nginx的負(fù)載均衡的分配方式】
nginx關(guān)于這個(gè)負(fù)載均衡方面的權(quán)重分配方式有4種:
1.輪詢,默認(rèn)采取此方式,Nginx會(huì)按照請(qǐng)求時(shí)間的先后順序進(jìn)行輪詢分發(fā),若某臺(tái)Web Server宕機(jī),Nginx自動(dòng)將其摘掉。
2.weight,權(quán)重,即輪詢的幾率,值越大,被分發(fā)的可能性越大,用于后端服務(wù)器性能不均的情況。
3. ip_hash ,每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決共享session的問(wèn)題。
4.自定義規(guī)則
PS:
down 表示當(dāng)前的Web Server暫時(shí)不參與負(fù)載
weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。
backup: 其它所有的非backup Server down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。
四、負(fù)載均衡的測(cè)試
為了是的測(cè)試的效果明了些,我把/usr/tomcatG/tomcat6/webapps/ROOT 目錄下的index.jsp 文件的內(nèi)容全部刪除掉,直接改為tomcat6 ,7-8一樣如此。
[root@N+T?ROOT]#?catindex.jsp
I?am?Tomcat?6666666666666!
在測(cè)試之前需要檢查一下,下面幾個(gè)個(gè)問(wèn)題。確保沒(méi)問(wèn)題了,就去測(cè)試,不然返回來(lái)做無(wú)用功了。
1、nginx、tomcat、jdk正在運(yùn)行
2、網(wǎng)頁(yè)上能夠哦正常訪問(wèn)nginx 和 ?tomcat
3、防火墻
我就在本地主機(jī)上面的瀏覽器測(cè)試吧,因?yàn)楦锢頇C(jī)是連通的。
在瀏覽器輸入:http://192.168.0.144/index.jsp ?然后不停按F5刷新網(wǎng)頁(yè),接著網(wǎng)頁(yè)會(huì)不停的在tomcat6、tomcat7、tomcat8的內(nèi)容標(biāo)識(shí)上面做跳轉(zhuǎn),顯示的內(nèi)容也會(huì)不一樣。
如圖:



不停的刷新,看著頁(yè)面的變化。你會(huì)發(fā)現(xiàn)權(quán)重等于1的tomcat6出現(xiàn)的次數(shù)會(huì)比tomcat7和tomcat8的次數(shù)很多的。
上面只是個(gè)簡(jiǎn)單的測(cè)試,有興趣的伙伴可以添加去修改這個(gè)jsp文檔,哈哈。
上述圖片說(shuō)明了nginx的負(fù)載均衡是正在運(yùn)行中的了。測(cè)試完畢!
五、總結(jié)
在搭建這個(gè)環(huán)境需要注意的幾點(diǎn):
1、tomcat的端口,由于是在一臺(tái)機(jī)器上面部署3個(gè)tomcat,所以改的端口就有9個(gè)了。主機(jī)端口的范圍,超出范圍不然tomcat是無(wú)法啟動(dòng)的
2、jdk變量環(huán)境的搭建,注意路徑。
3、nginx 配置文檔的參數(shù)、模塊注意編寫(xiě)。不然無(wú)法啟動(dòng)
4、注意防火墻設(shè)置,對(duì)于需求安全性的伙伴們。當(dāng)然測(cè)試你可以完全的關(guān)閉掉。
nginx和tomcat的負(fù)載均衡,基本配置完畢,這類(lèi)型的負(fù)載均衡目前在很多的企業(yè)被使用。然而這僅僅是企業(yè)網(wǎng)絡(luò)架構(gòu)中的一個(gè)小小的部分,我期待后面能夠給大家講述更多關(guān)于這方面的知識(shí)。