Nginx+部署指南Tomcat反向代理負載均衡集群

Nginx+Tomcat反向代理負載均衡集群部署指南

Nginx是一種服務(wù)器軟件慨灭,也是一種高性能的http和反向代理服務(wù)器陆馁,同時還是一個代理郵件服務(wù)器岖免。也就是說腥寇,我們在Nginx上可以發(fā)布網(wǎng)站,可以實現(xiàn)負載均衡(提高應(yīng)答效率觅捆,避免服務(wù)器崩潰)赦役,還可以作為郵件服務(wù)器實現(xiàn)收發(fā)郵件等功能。而最常見的就是使用Nginx實現(xiàn)負載均衡栅炒。

Nginx與其他服務(wù)器的性能比較:

Tomcat服務(wù)器面向Java語言掂摔,是重量級的服務(wù)器,而Nginx是輕量級的服務(wù)器赢赊。Apache服務(wù)器穩(wěn)定乙漓、開源、跨平臺释移,但是Apache服務(wù)器不支持高并發(fā)叭披,Nginx能支持處理百萬級的TCP連接,10萬以上的并發(fā)連接玩讳,并且是一個很好的跨平臺服務(wù)器涩蜘。
Nginx主要優(yōu)點有可以實現(xiàn)高并發(fā)、部署簡單熏纯、內(nèi)存消耗少同诫、成本低等,主要缺點有rewrite功能不夠強大樟澜,模塊沒有Apache的多误窖。

本篇主要講解 Nginx + Tomcat 反向代理和負載均衡的部署叮盘,以通俗實用為主。本篇文章每個部分之間沒有太大關(guān)系霹俺,可根據(jù)需求分開學(xué)習(xí)柔吼。

下來看一下Nginx反向代理的過程:

Nginx負載均衡的過程(會自動選擇壓力較小的服務(wù)器進行訪問):


可以看出,負載均衡是通過反向代理的原理實現(xiàn)的丙唧,所以也稱 反向代理的負載均衡 嚷堡。所以我們會部署負載均衡,那么反向代理也就會了艇棕。

總的來說蝌戒,負載均衡實現(xiàn)的方式分為軟件實現(xiàn)和硬件實現(xiàn)兩種,硬件實現(xiàn)運行的效率非常高沼琉,但是對應(yīng)的成本也非常高北苟。軟件實現(xiàn)運行效率不如硬件,但是成本相對來說低得多打瘪。而使用Nginx服務(wù)器實現(xiàn)負載均衡友鼻,那么就是通過軟件的方式來實現(xiàn)負載均衡,并且Nginx本身支持高并發(fā)等闺骚。故而使用Nginx服務(wù)器實現(xiàn)負載均衡彩扔,能大大節(jié)約企業(yè)的成本,并且由于Nginx是服務(wù)器軟件僻爽,其執(zhí)行效率也是非常高虫碉。本篇的目的也就是幫助大家使用Nginx實現(xiàn)負載均衡。

負載均衡的核心就是建立一個服務(wù)器集群胸梆,然后用戶首先訪問到第三方代理服務(wù)器(這里我們選用Nginx)敦捧,然后由代理服務(wù)器選擇一個集群中的服務(wù)器,然后將請求引入選定的服務(wù)器(這里我們選用Tomcat)碰镜。

如下圖兢卵,通過反向代理我們實現(xiàn)下面的負載均衡,這里我們 假定 四臺服務(wù)器公網(wǎng)的ip绪颖,一臺做代理服務(wù)器秽荤,三臺做負載均衡下的服務(wù)器:


好了,整體架構(gòu)已經(jīng)基本上清晰了柠横,下來我們來具體實現(xiàn)下:

提示:本篇我們基本上都是使用SSH進行相關(guān)操作的窃款,Windows下可以嘗試安裝PuTTY,Mac下直接使用系統(tǒng)自帶的終端工具即可滓鸠。

1.Linux下搭建Nginx服務(wù)器

我們在 192.168.2.20 這臺服務(wù)器上搭建Nginx服務(wù)器:

1)下載Nginx: http://nginx.org/

2)上傳服務(wù)器Nginx安裝包

$ scp ~/Downloads/nginx-1.10.2.tar.gz root@192.168.2.20:/usr/local

3)安裝Nginx

$ ssh root@192.168.2.20                          //SSH連接 
# yum -y install gcc gcc-c++ autoconf automake   //gcc雁乡、gcc-c++的庫文件 
# yum install -y pcre pcre-devel                 //安裝Nginx依賴包 
# yum install -y zlib zlib-devel

注意:-y表示遇到判斷全部yes,autoconf表示自動配置糜俗,automake表示自動編譯。

# cd /usr/local 
# tar -zxvf nginx-1.10.2.tar.gz                 //解壓縮 
# cd nginx-1.10.2                               //切換到該目錄下 
# ./configure                                   //配置 
# make 
# make install                                  //安裝

檢驗是否完成安裝:

# cd /usr/local 
# ls                                            //如果存在nginx文件夾,則安裝成功

經(jīng)過上面的安裝步驟和目錄設(shè)置悠抹,nginx的啟動程序就是/usr/local/nginx/sbin/nginx珠月,默認配置文件是/usr/local/nginx/conf/nginx.conf,但是不建議直接編輯nginx.conf楔敌,一般我們都選擇新建配置文件啤挎,然后在新建的配置文件中修改端口、反向代理路徑等卵凑。

2.Nginx的啟動庆聘、停止、信號控制

1)啟動Nginx服務(wù)器(格式:Nginx可執(zhí)行文件 -c Nginx配置文件):

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2)停止Nginx服務(wù)器:

停止Nginx服務(wù)器首先要查詢Nginx的主進程號(master process)勺卢,假設(shè)此處查詢得到1060(方便下面演示使用):

# ps -ef|grep nginx

下來看如何停止Nginx服務(wù)器伙判,停止Nginx有三種方式:

從容停止:

# ps -ef|grep nginx    //查看Nginx的主進程號(master process),假設(shè)此處查詢得到1060 
# kill -quit 1060

快速停止:

# kill -term 1060

強制停止:

# pkill -9 nginx

3)重啟Nginx服務(wù)器:

當我們修改了Nginx配置文件黑忱,需要重啟才能生效宴抚。我們在重啟之前還需要驗證配置文件的正確性,然后進行重啟操作:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf      //驗證 
# /usr/local/nginx/sbin/nginx -s reload                                   //重啟

4)平滑升級Nginx服務(wù)器

平滑升級不會停掉在運行著的進程甫煞,這些進程會繼續(xù)處理請求菇曲,但不會再接受新請求,在這些老進程在處理完還在處理的請求后抚吠,停止常潮。此平滑升級的過程中,新開的進程會被處理楷力。這就是平滑升級蕊玷。

# /usr/local/nginx/sbin/nginx -v             //查看當前版本

下面進行平滑升級:

# cd /usr/local 
# tar -zxvf nginx-1.11.6.tar.gz              //解壓縮 新版本Nginx 
# cd nginx-1.11.6                            //切換到該目錄下 
# ./configure                                //配置 
# make 
# cd /usr/local/nginx/sbin                   //打開 舊版本Nginx可執(zhí)行文件位置 
# cp nginx nginx.old                  //備份 舊版本Nginx可執(zhí)行文件,防止升級錯誤而無法恢復(fù) 
# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin     //復(fù)制新版本可執(zhí)行文件到舊版本處 
# rm -f /usr/local/nginx-1.11.6.tar.gz       //善后工作 刪除壓縮文件 
# rm -rf /usr/local/nginx-1.11.6             //刪除文件夾

至此弥雹,Nginx服務(wù)器平滑升級成功垃帅。

3.Nginx中負載均衡的實現(xiàn)

我們還是先連接SSH,然后進行下面操作(一般不建議修改默認主配置文件nginx.conf剪勿,所以我們新建負載均衡配置文件fzjh.conf贸诚,保證服務(wù)器安全,如下):

# cd /usr/local/nginx/conf 
# touch fzjh.conf 
# vi fzjh.conf    //用vi編輯器打開文件厕吉,然后按鍵盤的i

注意:vi編輯器中酱固,鍵盤按 i 進入 INSERT 狀態(tài),按 Esc 退出 INSERT 狀態(tài)头朱。
然后輸入以下配置代碼(注釋部分按需開啟):

#設(shè)置低權(quán)限用戶运悲,為了安全而設(shè)置的 
user nobody; 
 
 
#工作衍生進程數(shù) 
worker_processes 4; 
 
#設(shè)置錯誤文件存放路徑 
#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

 
#設(shè)置pid存放路徑(pid是控制系統(tǒng)中重要文件) 
#pid logs/nginx.pid; 
 
 
#設(shè)置最大連接數(shù) 
events{ 
    worker_connections 1024; 
} 
 
 
http{ 
    
#主要是用于設(shè)置一組可以在proxy_pass和fastcgi_pass指令中使用額代理服務(wù)器,默認負載均衡方式為輪詢     
    upstream tomcat_client {     
        #設(shè)置同一個cookie的兩次/多次請求项钮,請求的是同一臺服務(wù)器 
        ip_hash; 
    
        #weight權(quán)重班眯,默認1希停,權(quán)重越大訪問概率越大,backup備用服務(wù)器署隘,服務(wù)器全部崩潰后啟動   
        server 192.168.2.21:8080 weight=5; 
        server 192.168.2.22:8080 weight=5; 
        server 192.168.2.23:8080 weight=5 backup; 
    } 
     
    #開啟gzip壓縮宠能,開啟后,訪問網(wǎng)頁會自動壓縮     
    #gzip on; 
 
    #指定服務(wù)器的名稱和參數(shù)     
    server { 
        listen 80;   
        server_name  test.nginxtest.net; 
 
        #設(shè)置字符         
        #charset koi8-r; 
 
        #location / 指用根目錄做負載均衡         
        location / { 
            proxy_pass http://tomcat_client;   
            proxy_redirect default; 
            #設(shè)置代理 
            proxy_set_header Host $host;       
            proxy_set_header X-Real-IP $remote_addr; 
        } 
    } 
}

輸入完成后按下Esc磁餐,然后輸入:

:wq!

就可以保存并退出負載均衡的配置文件了违崇,下來我們加載我們的配置文件:

# /usr/local/nginx/sbin/nginx                                           //啟動Nginx 
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf        //加載配置文件

如果存在端口占用,可以使用如下命令Kill掉Nginx的程序:

# killall -9 nginx

至此诊霹,Nginx服務(wù)器部署完畢羞延。下面我們開始部署負載均衡下的那三臺真實提供數(shù)據(jù)的服務(wù)器。

4.Linux下安裝jdk

我們在192.168.2.21脾还、192.168.2.22伴箩、192.168.2.23這三臺服務(wù)器安裝jdk,以192.168.2.21為例:

1)下載jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html

2)上傳服務(wù)器jdk安裝包

$ scp ~/Downloads/jdk-8u112-linux-x64.tar.gz root@192.168.2.21:/usr/local

3)安裝jdk

$ ssh root@192.168.2.21                 //SSH連接 
# cd /usr/local 
# tar -zxvf jdk-8u112-linux-x64.tar.gz  //解壓縮 
# mv jdk1.8.0_112/ jdk                  //將jdk1.8.0_112重命名為jdk 
# vi /etc/profile                       //用vi編輯器打開文件荠呐,然后按鍵盤的i

下來我們移動光標至最后面赛蔫,兩個回車換行,然后添加下面代碼配置java的環(huán)境變量:

JAVA_HOME='/usr/local/jdk'
CLASS_PATH='$JAVA_HOME/lib:$JAVA_HOME/jre/lib'
PATH='.:$PATH:$JAVA_HOME/bin'
CATALINA_HOME='/usr/local/tomcat'
export JAVA_HOME CATALINA_HOME

輸入完成后按下Esc泥张,然后輸入:

:wq!

就可以保存并退出了呵恢。此時我們想讓其立即生效,則需要繼續(xù)輸入命令:

# source /etc/profile

此時profile文件就更新了媚创,此時環(huán)境變量就配置成功了渗钉。下面我們驗證一下jdk是否安裝配置成功:

# java -version

如果返回java版本號則安裝成功。

5.Linux下搭建Tomcat服務(wù)器

我們在192.168.2.21钞钙、192.168.2.22鳄橘、192.168.2.23這三臺服務(wù)器搭建Tomcat服務(wù)器,以192.168.2.21為例:

1)下載Tomcat http://tomcat.apache.org/

2)上傳服務(wù)器Tomcat安裝包

$ scp ~/Downloads/apache-tomcat-8.5.9.tar.gz root@192.168.2.21:/usr/local

3)安裝Tomcat

$ ssh root@192.168.2.21                 //SSH連接 
# cd /usr/local 
# tar -zxvf apache-tomcat-8.5.9.tar.gz  //解壓縮 
# mv apache-tomcat-8.5.9/ tomcat        //將apache-tomcat-8.5.9重命名為tomcat

4)設(shè)置Tomcat網(wǎng)頁文件目錄

Tomcat默認網(wǎng)頁文件的路徑是 /usr/local/tomcat/webapps/ROOT芒炼,但是一般我們不在這里存放瘫怜,我們在Linux根目錄新建 data/wwwroot 目錄:

# mkdir /data                         //新建目錄 
# mkdir /data/www 
# mkdir /data/www/ROOT 
# cd /usr/local/tomcat/conf 
# vi server.xml                       //用vi編輯器打開server.xml配置文件,打開后鍵盤按i

我們找到Host節(jié)點下的appBase=”webapps”本刽,修改為:

appBase='/data/www'

輸入完成后按下Esc鲸湃,然后輸入:

:wq!

就可以保存并退出配置文件了,然后重啟Tomcat即可生效子寓,此時Tomcat的網(wǎng)頁文件目錄就變成了 /data/www/ROOT 了暗挑。

配置Tomcat環(huán)境變量,我們在配置jdk的時候已經(jīng)配置好了斜友,可以回頭看一下炸裆。

6.Tomcat的啟動、停止

1)啟動Tomcat服務(wù)器

# /usr/local/tomcat/bin/startup.sh

2)停止Tomcat服務(wù)器:

# /usr/local/tomcat/bin/shutdown.sh

到此鲜屏,Nginx + Tomcat 負載均衡 集群 已經(jīng)部署完畢了烹看。不過有了服務(wù)器国拇,肯定也少不了數(shù)據(jù)庫,下面拓展一下Linux下安裝MySQL數(shù)據(jù)庫的方法听系。

7.Linux下安裝MySQL數(shù)據(jù)庫

我們重新找了 192.168.2.30 這臺服務(wù)器上MySQL數(shù)據(jù)庫:

1)下載MySQL數(shù)據(jù)庫 http://dev.mysql.com/downloads/mysql/

2)上傳MySQL數(shù)據(jù)庫安裝包

$ scp ~/Downloads/mysql-5.1.51.tar.gz root@192.168.2.30:/usr/local

3)安裝MySQL

$ ssh root@192.168.2.30                 //SSH連接 
# groupadd mysql                        //建立mysql的組 
# useradd mysql -g mysql                //增加用戶mysql到mysql的組中  
 
# yum list|grep ncurses 
# yum -y install ncurses-devel 
# yum install ncurses-devel  
 
# cd /usr/local 
# tar -zxvf mysql-5.1.51.tar.gz         //解壓縮 
# cd mysql-5.1.51 
 
# ./configure --prefix=/usr/local/mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-readline --with-sll  
//配置贝奇,設(shè)置安裝路徑虹菲,設(shè)置編譯mysql不帶共享庫靠胜,設(shè)置編譯client不帶共享庫,設(shè)置要以rmp的方式安裝tar包毕源,設(shè)置以rmp的方式安裝opensll  
 
# make 
# make install   //安裝浪漠,在make[4]的時候等待時間比較長,幾分鐘到十幾分鐘霎褐,都是正持吩福現(xiàn)象  
 
# /usr/local/mysql/bin/mysql_install_db --user       //對安裝好的MySQL進行初始化 
# cp ./support-files/mysql.server /etc/init.d/mysql  //將MySQL啟動服務(wù)復(fù)制到系統(tǒng)中并重命名為mysql 
# cp ./support-files/my-medium.cnf /etc/my.cnf       //復(fù)制規(guī)則文件 
# chmod 755 /etc/init.d/mysql                        //更改文件權(quán)限 
 
//文件權(quán)限由三個數(shù)字組成,第一位:文件擁有者的權(quán)限冻璃,第二位:文件擁有者同組的人的權(quán)限响谓,第三位:文件擁有者非同組人的權(quán)限 
//7:可讀可寫可執(zhí)行,5:可讀可執(zhí)行  
 
# cd /usr/local/mysql 
# chown -R mysql .                   //將 /usr/local/mysql 的擁有者更改為mysql 
# chgrp -R mysql .                   //將 /usr/local/mysql 歸到mysql組中  
 
# ps -ef|grep mysql 
# kill -9 3632                    //將mysql所有進程號依次殺死省艳,這里假定是3632 
# /usr/local/mysql/bin/mysql_install_db --user=mysql       //再次初始化 
# service mysql start                                      //啟動MySQL 
# /usr/local/mysql/bin/mysqladmin -u root pass<A class=keylink  target=_blank>word</A> '123456'  //設(shè)置MySQL密碼

到此MySQL就安裝成功了娘纷,下來我們測試一下:

# /usr/local/mysql/bin/mysql -u root -p

如果輸入密碼后可以登進MySQL,那么就測試成功跋炕。下面我們設(shè)置MySQL允許開啟遠程連接:

# /usr/local/mysql/bin/mysql -u root -p 
 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
//創(chuàng)建用戶用于遠程連接(root:用戶名赖晶,%:所有電腦都可以連接,也可以設(shè)置某個ip地址運行連接辐烂,123456:密碼)  
 
mysql> flush privileges;            //立即生效

下面我們查詢一下數(shù)據(jù)庫的用戶:

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
mysql> q                           //登出

找一臺電腦測試一下遏插,使用Navicat遠程登錄MySQL,登進成功纠修。

本篇文章到此結(jié)束胳嘲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扣草,隨后出現(xiàn)的幾起案子了牛,更是在濱河造成了極大的恐慌,老刑警劉巖德召,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件白魂,死亡現(xiàn)場離奇詭異,居然都是意外死亡上岗,警方通過查閱死者的電腦和手機福荸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肴掷,“玉大人敬锐,你說我怎么就攤上這事背传。” “怎么了台夺?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵径玖,是天一觀的道長。 經(jīng)常有香客問我颤介,道長梳星,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任滚朵,我火速辦了婚禮冤灾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辕近。我一直安慰自己韵吨,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布移宅。 她就那樣靜靜地躺著归粉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漏峰。 梳的紋絲不亂的頭發(fā)上糠悼,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音芽狗,去河邊找鬼绢掰。 笑死,一個胖子當著我的面吹牛童擎,可吹牛的內(nèi)容都是我干的滴劲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顾复,長吁一口氣:“原來是場噩夢啊……” “哼班挖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芯砸,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萧芙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后假丧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體双揪,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年包帚,在試婚紗的時候發(fā)現(xiàn)自己被綠了渔期。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疯趟,靈堂內(nèi)的尸體忽然破棺而出拘哨,到底是詐尸還是另有隱情,我是刑警寧澤信峻,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布倦青,位于F島的核電站,受9級特大地震影響盹舞,放射性物質(zhì)發(fā)生泄漏产镐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一矾策、第九天 我趴在偏房一處隱蔽的房頂上張望磷账。 院中可真熱鬧峭沦,春花似錦贾虽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至菇肃,卻和暖如春地粪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琐谤。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工蟆技, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斗忌。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓质礼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親织阳。 傳聞我的和親對象是個殘疾皇子眶蕉,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容