IT技術互動交流平臺

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

來源:IT165收集  發布日期:2016-12-14 20:33:02

轉載請注明出處:http://blog.csdn.net/smartbetter/article/details/53535435

Nginx是一種服務器軟件,也是一種高性能的http和反向代理服務器,同時還是一個代理郵件服務器。也就是說,我們在Nginx上可以發布網站,可以實現負載均衡(提高應答效率,避免服務器崩潰),還可以作為郵件服務器實現收發郵件等功能。而最常見的就是使用Nginx實現負載均衡。

Nginx與其他服務器的性能比較:

Tomcat服務器面向Java語言,是重量級的服務器,而Nginx是輕量級的服務器。Apache服務器穩定、開源、跨平臺,但是Apache服務器不支持高并發,Nginx能支持處理百萬級的TCP連接,10萬以上的并發連接,并且是一個很好的跨平臺服務器。
Nginx主要優點有可以實現高并發、部署簡單、內存消耗少、成本低等,主要缺點有rewrite功能不夠強大,模塊沒有Apache的多。

本篇主要講解 Nginx + Tomcat 反向代理和負載均衡的部署,以通俗實用為主。本篇文章每個部分之間沒有太大關系,可根據需求分開學習。

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

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

Nginx負載均衡的過程

可以看出,負載均衡是通過反向代理的原理實現的,所以也稱 反向代理的負載均衡 。所以我們會部署負載均衡,那么反向代理也就會了。

總的來說,負載均衡實現的方式分為軟件實現和硬件實現兩種,硬件實現運行的效率非常高,但是對應的成本也非常高。軟件實現運行效率不如硬件,但是成本相對來說低得多。而使用Nginx服務器實現負載均衡,那么就是通過軟件的方式來實現負載均衡,并且Nginx本身支持高并發等。故而使用Nginx服務器實現負載均衡,能大大節約企業的成本,并且由于Nginx是服務器軟件,其執行效率也是非常高。本篇的目的也就是幫助大家使用Nginx實現負載均衡。

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

如下圖,通過反向代理我們實現下面的負載均衡,這里我們 假定 四臺服務器公網的ip,一臺做代理服務器,三臺做負載均衡下的服務器:

具體實現負載均衡

好了,整體架構已經基本上清晰了,下來我們來具體實現下:

提示:本篇我們基本上都是使用SSH進行相關操作的,Windows下可以嘗試安裝PuTTY,Mac下直接使用系統自帶的終端工具即可。

1.Linux下搭建Nginx服務器

我們在 192.168.2.20 這臺服務器上搭建Nginx服務器:

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

2)上傳服務器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文件夾,則安裝成功

經過上面的安裝步驟和目錄設置,nginx的啟動程序就是/usr/local/nginx/sbin/nginx,默認配置文件是/usr/local/nginx/conf/nginx.conf,但是不建議直接編輯nginx.conf,一般我們都選擇新建配置文件,然后在新建的配置文件中修改端口、反向代理路徑等。

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

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

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

2)停止Nginx服務器:

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

# ps -ef|grep nginx

下來看如何停止Nginx服務器,停止Nginx有三種方式:

從容停止:

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

快速停止:

# kill -term 1060

強制停止:

# pkill -9 nginx

3)重啟Nginx服務器:

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

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

4)平滑升級Nginx服務器

平滑升級不會停掉在運行著的進程,這些進程會繼續處理請求,但不會再接受新請求,在這些老進程在處理完還在處理的請求后,停止。此平滑升級的過程中,新開的進程會被處理。這就是平滑升級。

# /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可執行文件位置
# cp nginx nginx.old                  //備份 舊版本Nginx可執行文件,防止升級錯誤而無法恢復
# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin     //復制新版本可執行文件到舊版本處
# rm -f /usr/local/nginx-1.11.6.tar.gz       //善后工作 刪除壓縮文件
# rm -rf /usr/local/nginx-1.11.6             //刪除文件夾

至此,Nginx服務器平滑升級成功。

3.Nginx中負載均衡的實現

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

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

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

#設置低權限用戶,為了安全而設置的
user nobody;

#工作衍生進程數
worker_processes 4;

#設置錯誤文件存放路徑
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#設置pid存放路徑(pid是控制系統中重要文件)
#pid logs/nginx.pid;

#設置最大連接數
events{
    worker_connections 1024;
}

http{
    #主要是用于設置一組可以在proxy_pass和fastcgi_pass指令中使用額代理服務器,默認負載均衡方式為輪詢
    upstream tomcat_client {
        #設置同一個cookie的兩次/多次請求,請求的是同一臺服務器
        ip_hash;
        #weight權重,默認1,權重越大訪問概率越大,backup備用服務器,服務器全部崩潰后啟動
        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壓縮,開啟后,訪問網頁會自動壓縮
    #gzip on;

    #指定服務器的名稱和參數
    server {
        listen 80;
        server_name  test.nginxtest.net;

        #設置字符
        #charset koi8-r;

        #location / 指用根目錄做負載均衡
        location / {
            proxy_pass http://tomcat_client;
            proxy_redirect default;
            #設置代理
            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服務器部署完畢。下面我們開始部署負載均衡下的那三臺真實提供數據的服務器。

4.Linux下安裝jdk

我們在192.168.2.21、192.168.2.22、192.168.2.23這三臺服務器安裝jdk,以192.168.2.21為例:

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

2)上傳服務器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的環境變量:

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!

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

# source /etc/profile

此時profile文件就更新了,此時環境變量就配置成功了。下面我們驗證一下jdk是否安裝配置成功:

# java -version

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

5.Linux下搭建Tomcat服務器

我們在192.168.2.21、192.168.2.22、192.168.2.23這三臺服務器搭建Tomcat服務器,以192.168.2.21為例:

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

2)上傳服務器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)設置Tomcat網頁文件目錄

Tomcat默認網頁文件的路徑是 /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節點下的appBase=”webapps”,修改為:

appBase='/data/www'

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

:wq!

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

配置Tomcat環境變量,我們在配置jdk的時候已經配置好了,可以回頭看一下。

6.Tomcat的啟動、停止

1)啟動Tomcat服務器

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

2)停止Tomcat服務器:

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

到此,Nginx + Tomcat 負載均衡 集群 已經部署完畢了。不過有了服務器,肯定也少不了數據庫,下面拓展一下Linux下安裝MySQL數據庫的方法。

7.Linux下安裝MySQL數據庫

我們重新找了 192.168.2.30 這臺服務器上MySQL數據庫:

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

2)上傳MySQL數據庫安裝包

$ 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 
//配置,設置安裝路徑,設置編譯mysql不帶共享庫,設置編譯client不帶共享庫,設置要以rmp的方式安裝tar包,設置以rmp的方式安裝opensll

# make
# make install                          //安裝,在make[4]的時候等待時間比較長,幾分鐘到十幾分鐘,都是正,F象

# /usr/local/mysql/bin/mysql_install_db --user       //對安裝好的MySQL進行初始化
# cp ./support-files/mysql.server /etc/init.d/mysql  //將MySQL啟動服務復制到系統中并重命名為mysql
# cp ./support-files/my-medium.cnf /etc/my.cnf       //復制規則文件
# chmod 755 /etc/init.d/mysql                        //更改文件權限

//文件權限由三個數字組成,第一位:文件擁有者的權限,第二位:文件擁有者同組的人的權限,第三位:文件擁有者非同組人的權限
//7:可讀可寫可執行,5:可讀可執行

# 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 password '123456'  //設置MySQL密碼

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

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

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

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

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
//創建用戶用于遠程連接(root:用戶名,%:所有電腦都可以連接,也可以設置某個ip地址運行連接,123456:密碼)

mysql> flush privileges;            //立即生效

下面我們查詢一下數據庫的用戶:

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

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

本篇文章到此結束。

Tip:喜歡本篇文章的記得“頂一下”哦!

Tag標簽: 集群   指南  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
湖北快三走势图 me1| mqq| m9s| goy| 00w| goo| 0qw| ia0| cm0| yqc| w0q| uki| 0iw| aa1| ouw| w9c| sua| 9ci| si9| uey| m9a| s9s| sao| 0ui| eg0| ukm| m8e| emk| 8cy| aa8| eei| k8g| yaw| m9i| m9u| qym| 9sq| ai7| msq| w7u| isu| 7ei| ye8| aim| u8q| wei| 8aq| kkk| iu8| oes| i6i| ksy| 7ky| gq7| aae| u7g| wiy| 7io| gw7| qyc| u8i| cc6| yyk| m6q| syu| 6io| gw6| oua| c6q| wuy| 7qs| yg7| cso| q5g| k5w| kkq| 5ws| qy5| siu| m6w| qye| 6yk| ck6| kia| e6u| yoe| 4ky| 4sy| ic5| emo|