溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法

發(fā)布時間:2022-04-29 15:55:17 來源:億速云 閱讀:169 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法”,在日常操作中,相信很多人在Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

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 反向代理和負(fù)載均衡的部署,以通俗實用為主。本篇文章每個部分之間沒有太大關(guān)系,可根據(jù)需求分開學(xué)習(xí)。

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

Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法

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

Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法

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

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

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

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

Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法

好了,整體架構(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

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,默認(rèn)配置文件是/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ù)器:

當(dāng)我們修改了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       //查看當(dāng)前版本

下面進行平滑升級:

# 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中負(fù)載均衡的實現(xiàn)

我們還是先連接ssh,然后進行下面操作(一般不建議修改默認(rèn)主配置文件nginx.conf,所以我們新建負(fù)載均衡配置文件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ù)器,默認(rèn)負(fù)載均衡方式為輪詢
  upstream tomcat_client {
    #設(shè)置同一個cookie的兩次/多次請求,請求的是同一臺服務(wù)器
    ip_hash;
    #weight權(quán)重,默認(rè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 / 指用根目錄做負(fù)載均衡
    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!

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

# /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ù)器部署完畢。下面我們開始部署負(fù)載均衡下的那三臺真實提供數(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

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

下來我們移動光標(biāo)至最后面,兩個回車換行,然后添加下面代碼配置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

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默認(rèn)網(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 負(fù)載均衡 集群 已經(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ù)庫

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]的時候等待時間比較長,幾分鐘到十幾分鐘,都是正?,F(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 password '123456' //設(shè)置mysql密碼

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

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

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

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

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
//創(chuàng)建用戶用于遠(yuǎn)程連接(root:用戶名,%:所有電腦都可以連接,也可以設(shè)置某個ip地址運行連接,123456:密碼)

mysql> flush privileges;      //立即生效

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

mysql> select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;
mysql> \q              //登出

找一臺電腦測試一下,使用navicat遠(yuǎn)程登錄mysql,登進成功。

到此,關(guān)于“Nginx+Tomcat反向代理、負(fù)載均衡、集群部署的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI