欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx實(shí)現(xiàn)服務(wù)端集群搭建

 更新時(shí)間:2023年08月08日 11:15:07   作者:啊噢1231  
本文介紹了如何搭建Nginx服務(wù)端集群,主要包括動靜分離及其Tomcat集群搭建,通過本文可以了解如何搭建高效、可擴(kuò)展、高可用的服務(wù)器架構(gòu),提高網(wǎng)站性能和可靠性,感興趣的可以了解一下

1、Nginx與Tomcat部署

我們知道Nginx在高并發(fā)場景和處理靜態(tài)資源是非常高性能的,但是在實(shí)際項(xiàng)目中除了靜態(tài)資源還有就是后臺業(yè)務(wù)代碼模塊,一般后臺業(yè)務(wù)代碼模塊都會被部署在Tomcat,weblogic或者是websphere等web服務(wù)器上,那么如何使用Nginx接收用戶的請求并把請求轉(zhuǎn)發(fā)到后臺web服務(wù)器?

步驟分析:

  • 準(zhǔn)備Tomcat環(huán)境,并在Tomcat上部署一個(gè)web項(xiàng)目;
  • 準(zhǔn)備Nginx環(huán)境,使用Nginx接收請求,并把請求分發(fā)到Tomcat上。
upstream webservice {
		server localhost:8080;
	}
	server {
		listen 80;
		server_name localhost;
		location /demo {
			proxy_pass http://webservice;
		}
	}

2、動靜分離

什么是動靜分離?

  • 動:后臺應(yīng)用程序的業(yè)務(wù)處理。
  • 靜:網(wǎng)站的靜態(tài)資源(html,javaScript,css,images等文件)。
  • 分離:將兩者分開部署訪問,提供用戶進(jìn)行訪問。舉例說明就是以后所有和靜態(tài)資源相關(guān)的內(nèi)容都交給Nginx來部署訪問,非靜態(tài)內(nèi)容則交給類似于Tomcat的服務(wù)器來部署訪問。

為什么要動靜分離?

  • Nginx在處理靜態(tài)資源的時(shí)候,效率是非常高的,而且Nginx的并發(fā)訪問量也是名列前茅,而Tomcat則相對比較弱一些,所以把靜態(tài)資源交給Nginx后,可以減輕Tomcat服務(wù)器的訪問壓力并提高靜態(tài)資源的訪問速度。
  • 動靜分離以后,降低了動態(tài)資源和靜態(tài)資源的耦合度。如動態(tài)資源宕機(jī)了也不影響靜態(tài)資源的展示。

如何實(shí)現(xiàn)動靜分離?

  • 實(shí)現(xiàn)動靜分離的方式有很多,比如靜態(tài)資源部署到CDN、Nginx等服務(wù)器上,動態(tài)資源可以部署到Tomcat,weblogic或者websphere上。

3、Nginx動靜分離實(shí)現(xiàn)步驟

1、將demo.war項(xiàng)目中的靜態(tài)資源都刪除掉,重新打包生成一個(gè)war包;

2、將war包部署到tomcat中,把之前部署的內(nèi)容刪除掉;

進(jìn)入到tomcat的webapp目錄下,將之前的內(nèi)容刪除掉;
將新的war包復(fù)制到webapps下;
將tomcat啟動。

3、在Nginx所在服務(wù)器創(chuàng)建如下目錄,并將對應(yīng)的靜態(tài)資源放入指定的位置;

web/
    images/
        logo.png
        mv.png
    index.html
    js/
        jquery.min.js

其中index.html頁面的內(nèi)容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        $(function () {
            $.get("http://192.168.200.133/demo/getAddress", function (date) {
                $("#msg").html(date);
            });
        });
    </script>
</head>
<body>
<img src="images/logo.png"/>
<h1>Nginx如何將請求轉(zhuǎn)發(fā)到后端服務(wù)器</h1>
<h3 id="msg"></h3>
<img src="images/mv.png"/>
</body>
</html>

4、配置Nginx的靜態(tài)資源與動態(tài)資源的訪問;

upstream webservice {
		server localhost:8080;
	}
	server {
		listen 80;
		server_name localhost;
		# 動態(tài)資源訪問。以/demo開頭的為動態(tài)資源
		location /demo {
			proxy_pass http://webservice;
		}
		# 靜態(tài)資源的訪問配置。以.png .jpg .gif .js 結(jié)尾的靜態(tài)資源訪問
		location ~/.*\.(png|jpg|gif|js) {
			# 根目錄在Nginx的html/web目錄下
			root html/web;
		}
		# 首頁在Nginx的html/web目錄下的index.html
		location / {
			root html/web;
			index index.html index.htm;
		}
		# 配置錯(cuò)誤頁面
		error_page 500 502 503 504	/50x.html;
		location =/50x.html {
			root html;
		}
	}

5、啟動測試,訪問 http://localhost/index.html 。

假如某個(gè)時(shí)間點(diǎn),由于某個(gè)原因?qū)е耇omcat后端服務(wù)器宕機(jī)了,我們再次訪問Nginx,會得到如下效果,用戶還是能看到頁面,只是缺失了訪問次數(shù)的統(tǒng)計(jì),這就是前后端耦合度降低的效果,并且整個(gè)請求只和后端服務(wù)器交互了一次,js和images都直接從Nginx返回,提供了效率,降低了后端的服務(wù)器的壓力。

4、Nginx實(shí)現(xiàn)Tomcat集群搭建

在使用Nginx和Tomcat部署項(xiàng)目的時(shí)候,我們使用的是一臺Nginx服務(wù)器和一臺Tomcat服務(wù)器,效果圖如下:

那么問題來了,如果Tomcat真的宕機(jī)了,整個(gè)系統(tǒng)就不會完整,所以如何解決上述問題,一臺服務(wù)器宕機(jī),那就多搭建幾臺Tomcat服務(wù)器,這樣的話就提升了后端服務(wù)器的可用性。這也就是我們常說的集群,搭建Tomcat的集群需要用到Nginx的反向代理和負(fù)載均衡的知識,具體如何實(shí)現(xiàn)呢?

環(huán)境準(zhǔn)備:

  • 準(zhǔn)備3臺Tomcat,使用端口進(jìn)行區(qū)分(實(shí)際環(huán)境應(yīng)該是三臺服務(wù)器),修改server.xml,將端口分別修改為8080、8180、8280;
  • 啟動Tomcat并訪問測試;

5、Nginx高可用解決方案

針對于上面提到的問題,我們來分析下想要解決上述問題,需要面臨哪些問題?

需要兩臺以上的Nginx服務(wù)器對外提供服務(wù),這樣的話假如其中一臺宕機(jī)了,另外一臺還能對外提供服務(wù),但是如果是兩臺Nginx服務(wù)器的話,會有兩個(gè)IP地址,用戶該訪問哪臺服務(wù)器,用戶怎么知道哪臺是好的,哪臺是宕機(jī)了呢?

5.1、Keepalived

使用Keepalived來解決,Keepalived軟件是由C編寫的,最初是專為LVS負(fù)載均衡軟件設(shè)計(jì)的,Keepalived軟件主要是通過VRRP協(xié)議實(shí)現(xiàn)高可用功能。

5.2、VRRP協(xié)議

VRRP(Virtual Route Redundancy Protocol)協(xié)議,翻譯過來為虛擬路由冗余協(xié)議。VRRP協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個(gè)設(shè)備,對外提供虛擬路由器IP,而在路由器組內(nèi)部,如果實(shí)際擁有這個(gè)對外IP的路由器如果工作正常的話就是MASTER,MASTER實(shí)現(xiàn)針對虛擬路由器IP的各種網(wǎng)絡(luò)功能。其他設(shè)備不擁有該虛擬IP,狀態(tài)為BACKUP,除了接收MASTER的VRRP狀態(tài)通告信息以外,不執(zhí)行對外的網(wǎng)絡(luò)功能。當(dāng)主機(jī)失效時(shí),BACKUP將接管原先MASTER的網(wǎng)絡(luò)功能。

從上面的介紹信息獲取到的內(nèi)容就是VRRP是一種協(xié)議,那這個(gè)協(xié)議是用來干什么的?

  • 選擇協(xié)議:VRRP可以把一個(gè)虛擬路由器的責(zé)任動態(tài)分配到局域網(wǎng)上的VRRP路由器中的一臺。其中的虛擬路由即Virtual路由群組創(chuàng)建的一個(gè)不真實(shí)存在的路由,這個(gè)虛擬路由也是有對應(yīng)的IP地址。而且VRRP路由1和VRRP路由2之間會有競爭選擇,通過選擇會產(chǎn)生一個(gè)Master路由和一個(gè)Backup路由。
  • 路由容錯(cuò)協(xié)議:Master路由和Backup路由之間會有一個(gè)心跳檢測,Master會定時(shí)告知Backup自己的狀態(tài),如果在指定時(shí)間內(nèi),Backup沒有接收到這個(gè)通知內(nèi)容,Backup就會替代Master成為新的Master。Master路由有一個(gè)特權(quán)就是虛擬路由和后端服務(wù)器都是通過Master進(jìn)行數(shù)據(jù)傳遞交互的,而備份結(jié)點(diǎn)則會直接丟棄這些請求和資源,不做處理,只是去監(jiān)聽Master的狀態(tài)。

用了Keepalived后,解決方案如下:

5.3、環(huán)境搭建

環(huán)境準(zhǔn)備:

VIPIP主機(jī)名主/從
192.168.200.133keepalived1Master
192.168.200.222
192.168.200.122keepalived2Backup

keepalived安裝:

1、從官方網(wǎng)站下載keepalived,官網(wǎng)地址https://keepalived.org/
2、將下載的資源上傳到服務(wù)器
    keepalived-2.0.20.tar.gz
3、創(chuàng)建keepalived目錄,方便管理資源
    mkdir keepalived
4、將壓縮文件進(jìn)行解壓縮,解壓縮到指定的目錄
    tar -zxf keepalived-2.0.20.tar.gz -C keepalived
5、對keepalived進(jìn)行配置,編譯和安裝
    cd keepalived/keepalived-2.0.20
    ./configure --sysconf=/etc --prefix=/usr/local
    make && make install

安裝完成后,有兩個(gè)文件需要我們認(rèn)識下,一個(gè)是/etc/keepalived/keepalived.conf(keepalived的系統(tǒng)配置文件,我們主要操作的就是該文件),一個(gè)是/usr/local/sbin目錄下的keepalived,是系統(tǒng)配置腳本,用來啟動和關(guān)閉keepalived。

5.4、Keepalived配置文件介紹

打開keepalived.conf配置文件。

這里面會分3部分,第一部分是global全局配置,第二部分是vrrp相關(guān)配置,第三部分是LVS相關(guān)配置。我們重點(diǎn)關(guān)注前兩部分。

第1臺服務(wù)器(192.168.200.133)
-global全局部分:
global_defs {
    # 通知郵件,當(dāng)keepalived發(fā)送切換時(shí)需要發(fā)email給具體的郵箱地址
    nitification_email {
        tom@abc.com
        jerry@abc.com
    }
    # 設(shè)置發(fā)件人的郵箱信息
    notification_email_from zhangsan@abc.com
    # 指定smtp服務(wù)地址
    smtp_server 192.168.200.1
    # 指定smtp服務(wù)連接超時(shí)時(shí)間
    smtp_connect_timeout 30
    # 運(yùn)行keepalived服務(wù)器的一個(gè)標(biāo)識,可以用作發(fā)送郵件的主題信息
    router_id keepalived1
    # 默認(rèn)是不跳過檢查,檢查收到的VRRP通告中的所有地址可能會比較耗時(shí),設(shè)置此命令的意思是
    # 如果通告與接收的上一個(gè)通告來自相同的master路由器,則不執(zhí)行檢查(跳過檢查)
    vrrp_skip_check_adv_addr
    # 嚴(yán)格遵守VRRP協(xié)議
    vrrp_strict
    # 在一個(gè)接口發(fā)送的兩個(gè)免費(fèi)ARP之間的延遲??梢跃_到毫秒級,默認(rèn)是0
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.222
    }
}
第2臺服務(wù)器(192.168.200.122)
-global全局部分:
global_defs {
    # 通知郵件,當(dāng)keepalived發(fā)生切換時(shí)需要發(fā)email給具體的郵箱地址
    nitification_email {
        tom@abc.com
        jerry@abc.com
    }
    # 設(shè)置發(fā)件人的郵箱信息
    notification_email_from zhangsan@abc.com
    # 指定smtp服務(wù)地址
    smtp_server 192.168.200.1
    # 指定smtp服務(wù)連接超時(shí)時(shí)間
    smtp_connect_timeout 30
    # 運(yùn)行keepalived服務(wù)器的一個(gè)標(biāo)識,可以用作發(fā)送郵件的主題信息
    router_id keepalived1
    # 默認(rèn)是不跳過檢查,檢查收到的VRRP通告中的所有地址可能會比較耗時(shí),設(shè)置此命令的意思是
    # 如果通告與接收的上一個(gè)通告來自相同的master路由器,則不執(zhí)行檢查(跳過檢查)
    vrrp_skip_check_adv_addr
    # 嚴(yán)格遵守VRRP協(xié)議
    vrrp_strict
    # 在一個(gè)接口發(fā)送的兩個(gè)免費(fèi)ARP之間的延遲??梢跃_到毫秒級,默認(rèn)是0
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.222
    }
}

5.5、訪問測試

1、啟動keepalived之前,我們先使用命令 ip a,查看 192.168.200.133和192.168.200.122這兩臺服務(wù)器的IP情況。

2、分別啟動兩臺服務(wù)器的keepalived。

cd /usr/local/sbin./keepalived

再次通過 ip a 查看ip。

3、當(dāng)把 192.168.200.133 服務(wù)器上的keepalived關(guān)閉后,再次查看ip。

通過上述的測試,我們發(fā)現(xiàn),虛擬IP(VIP)會在MASTER節(jié)點(diǎn)上,當(dāng)MASTER節(jié)點(diǎn)上的keepalived出問題后,因?yàn)锽ACKUP無法收到MASTER發(fā)出的VRRP狀態(tài)通過信息,就會直接升為MASTER。VIP也會“漂移”到新的MASTER。

上面測試和Nginx有什么關(guān)系?

我們把192.168.200.133服務(wù)器的keepalived再次啟動下,由于它的優(yōu)先級高于服務(wù)器192.168.200.122的,所以它會再次成為MASTER,VIP也會“漂移”過去,然后我們再次通過瀏覽器訪問http://192.168.200.222/則會請求192.168.200.133服務(wù)器。

如果把192.168.200.133服務(wù)器的keepalived關(guān)閉掉,再次訪問相同的地址,則會騎牛192.168.200.122服務(wù)器。

效果實(shí)現(xiàn)了以后,我們會發(fā)現(xiàn)要想讓vip進(jìn)行切換,就必須把服務(wù)器上的keepalived進(jìn)行關(guān)閉,而什么時(shí)候關(guān)閉keepalived呢?應(yīng)該是keepalived所在服務(wù)器的nginx出現(xiàn)問題后,把keepalived關(guān)閉掉,就可以讓VIP執(zhí)行另外一臺服務(wù)器,但是現(xiàn)在這所有的操作都是通過手動來完成的,我們?nèi)绾文茏屜到y(tǒng)自動判斷當(dāng)前服務(wù)器的nginx是否正確啟動,如果沒有,要能讓VIP自動“漂移”,這個(gè)問題該如何解決?

5.6、keepalived之vrrp_script

keepalived只能做到對網(wǎng)絡(luò)故障和keepalived本身的監(jiān)控,即當(dāng)出現(xiàn)網(wǎng)絡(luò)故障或者keepalived本身出現(xiàn)問題時(shí),進(jìn)行切換,但是這些還不夠,我們還需要監(jiān)控keepalived所在服務(wù)器上的其他業(yè)務(wù),比如Nginx,如果Nginx出現(xiàn)異常了,僅僅keepalived保持正常,是無法完成系統(tǒng)的正常工作的,因此需要根據(jù)業(yè)務(wù)進(jìn)程的運(yùn)行狀態(tài)決定是否需要進(jìn)行主備切換,這個(gè)時(shí)候,我們可以通過編寫腳本對業(yè)務(wù)進(jìn)程進(jìn)行監(jiān)測監(jiān)控。

實(shí)現(xiàn)步驟:

在keepalived配置文件中添加對應(yīng)的配置項(xiàng);

vrrp_script 腳本名稱
{
    script "腳本位置"
    interval 3 # 執(zhí)行的時(shí)間間隔
    weight -20 # 動態(tài)調(diào)整vrrp_instance的優(yōu)先級
}

編寫腳本

ck_nginx.sh:
#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
 /usr/local/nginx/sbin/nginx
 sleep 2
 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

Linux ps命令用于顯示當(dāng)前進(jìn)程(process)的狀態(tài)。-C(command):指定命令的所有進(jìn)程;--no-header:排除標(biāo)題。

為腳本文件設(shè)置權(quán)限

chmod 755 ck_nginx.sh

將腳本添加到

vrrp_script ck_nginx {
    script "/etc/keepalived/ck_nginx.sh" # 執(zhí)行腳本的位置
    interval 2 # 執(zhí)行腳本的周期,秒為單位
    weight -20 # 權(quán)重的計(jì)算方式
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 10
    priority 100
    ...
    track_script {
        ck_nginx
    }
}

如果效果沒有出來,可以使用 tail -f /var/log/messages查看日志信息,找對應(yīng)的錯(cuò)誤信息。

測試

問題思考:通常如果master服務(wù)死掉后backup會變成master,但是當(dāng)master服務(wù)又好了的時(shí)候master此時(shí)會搶占VIP,這樣就會發(fā)生兩次切換讀,對業(yè)務(wù)繁忙的網(wǎng)站來說是不好的。所以我們要在配置文件加入nopreempt非搶占,但是這個(gè)參數(shù)只能用于state為backup,故我們在用HA的時(shí)候最好master和backup的state都設(shè)置成backup,讓其通過priority來競爭。

到此這篇關(guān)于Nginx實(shí)現(xiàn)服務(wù)端集群搭建的文章就介紹到這了,更多相關(guān)Nginx 服務(wù)端集群搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx訪問靜態(tài)資源配置的實(shí)現(xiàn)步驟

    Nginx訪問靜態(tài)資源配置的實(shí)現(xiàn)步驟

    Nginx 擅長于底層服務(wù)器端資源的處理,例如靜態(tài)資源處理轉(zhuǎn)發(fā)、反向代理,負(fù)載均衡等,本文主要介紹了Nginx訪問靜態(tài)資源配置的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • nginx中的健康檢查方案

    nginx中的健康檢查方案

    這篇文章主要介紹了nginx中的健康檢查方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 使用Nginx做靜態(tài)文件服務(wù)器,如何進(jìn)行權(quán)限驗(yàn)證

    使用Nginx做靜態(tài)文件服務(wù)器,如何進(jìn)行權(quán)限驗(yàn)證

    這篇文章主要介紹了使用Nginx做靜態(tài)文件服務(wù)器,如何進(jìn)行權(quán)限驗(yàn)證問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • nginx配置代理多個(gè)前端資源

    nginx配置代理多個(gè)前端資源

    本文主要介紹了nginx配置代理多個(gè)前端資源,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • nginx服務(wù)器的下載安裝與使用詳解

    nginx服務(wù)器的下載安裝與使用詳解

    這篇文章主要介紹了nginx服務(wù)器的下載安裝與使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Nginx由于反向代理導(dǎo)致502錯(cuò)誤的原因與解決

    Nginx由于反向代理導(dǎo)致502錯(cuò)誤的原因與解決

    這篇文章主要為大家詳細(xì)介紹了Nginx由于反向代理導(dǎo)致502錯(cuò)誤的原因和相關(guān)的解決方法,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2025-04-04
  • Nginx服務(wù)器中關(guān)于SSL的安全配置詳解

    Nginx服務(wù)器中關(guān)于SSL的安全配置詳解

    這篇文章主要介紹了Nginx服務(wù)器中關(guān)于SSL的安全配置詳解,2014年曝出的SSL安全漏洞無疑為整個(gè)業(yè)界帶來了巨大震動,本文便對此給出相關(guān)安全維護(hù)方法,需要的朋友可以參考下
    2015-06-06
  • Nginx配置文件詳解

    Nginx配置文件詳解

    這篇文章主要介紹了Nginx配置文件詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 如何使用nginx代理ws或是wss的請求

    如何使用nginx代理ws或是wss的請求

    這篇文章主要為大家詳細(xì)介紹了如何使用nginx代理ws或是wss的請求,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Django+Nginx+uwsgi服務(wù)器部署

    Django+Nginx+uwsgi服務(wù)器部署

    這篇文章介紹了Django+Nginx+uwsgi服務(wù)器部署的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論