日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx负载均衡高可用

發(fā)布時間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx负载均衡高可用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

1.1?? 什么是負載均衡高可用

???????? nginx作為負載均衡器,所有請求都到了nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。

???????? 為了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監(jiān)控程序,通過傳送諸如“I am alive”這樣的信息來監(jiān)控對方的運行狀況。當備份機不能在一定的時間內(nèi)收到這樣的信息時,它就接管主服務器的服務IP并繼續(xù)提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。

?

?

?

1.2?? keepalived+nginx實現(xiàn)主備

1.2.1? 什么是keepalived

???????? keepalived是集群管理中保證集群高可用的一個服務軟件,用來防止單點故障。

??????? Keepalived的作用是檢測web服務器的狀態(tài),如果有一臺web服務器死機,或工作出現(xiàn)故障,Keepalived將檢測到,并將有故障的web服務器從系統(tǒng)中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

?

1.2.2? keepalived工作原理

???????? keepalived是以VRRP協(xié)議為實現(xiàn)基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。

???????? 虛擬路由冗余協(xié)議,可以認為是實現(xiàn)路由器高可用的協(xié)議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(VIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網(wǎng)內(nèi)其他機器的默認路由為該vip),master會發(fā)組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據(jù)VRRP的優(yōu)先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

???????? keepalived主要有三個模塊,分別是core、check和VRRP。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現(xiàn)VRRP協(xié)議的。

?

詳細參考:Keepalived權威指南中文.pdf

?

1.2.3? keepalived+nginx實現(xiàn)主備過程

?

1.2.3.1???????? 初始狀態(tài)

?

?

?

?

?

1.2.3.2???????? 主機宕機

?

?

?

1.2.3.3???????? 主機恢復

?

?

?

1.2.4? 高可用環(huán)境

兩臺nginx,一主一備:192.168.101.3和192.168.101.4

兩臺tomcat服務器:192.168.101.5、192.168.101.6

?

?

1.2.5? 安裝keepalived

?

???????? 分別在主備nginx上安裝keepalived,參考“安裝手冊”進行安裝:

?

?

1.2.6? 配置keepalived

1.2.6.1???????? 主nginx

修改主nginx下/etc/keepalived/keepalived.conf文件

?

! Configuration File for keepalived

?

#全局配置

global_defs {

?? notification_email {? #指定keepalived在發(fā)生切換時需要發(fā)送email到的對象,一行一個

???? XXX@XXX.com

?? }

? ?notification_email_from XXX@XXX.com? #指定發(fā)件人

?? #smtp_server XXX.smtp.com???????????????????????????? #指定smtp服務器地址

?? #smtp_connect_timeout 30?????????????????????????????? #指定smtp連接超時時間

?? router_id LVS_DEVEL??????????????????????????????????? #運行keepalived機器的一個標識

}

?

vrrp_instance VI_1 {

??? state MASTER?????????? #標示狀態(tài)為MASTER 備份機為BACKUP

??? interface eth0???????? #設置實例綁定的網(wǎng)卡

??? virtual_router_id 51?? #同一實例下virtual_router_id必須相同

??? priority 100?????????? #MASTER權重要高于BACKUP 比如BACKUP為99?

??? advert_int 1 ??????????#MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

??? authentication {?????? #設置認證

??????? auth_type PASS???? #主從服務器驗證方式

??????? auth_pass 8888

??? }

??? virtual_ipaddress {??? #設置vip

??????? 192.168.101.100?????? #可以多個虛擬IP,換行即可

??? }

}

?

?

1.2.6.2???????? 備nginx

修改備nginx下/etc/keepalived/keepalived.conf文件

配置備nginx時需要注意:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值一致

?

! Configuration File for keepalived

?

#全局配置

global_defs {

?? notification_email {? #指定keepalived在發(fā)生切換時需要發(fā)送email到的對象,一行一個

??? XXX@XXX.com

?? }

?? notification_email_from XXX@XXX.com? ??????? ???????? ???????? ???????? #指定發(fā)件人

?? #smtp_server XXX.smtp.com???????????????????????????? #指定smtp服務器地址

?? #smtp_connect_timeout 30?????????????????????????????? #指定smtp連接超時時間

?? router_id LVS_DEVEL??????????????????????????????????? #運行keepalived機器的一個標識

}

?

vrrp_instance VI_1 {

??? state BACKUP?????????? #標示狀態(tài)為MASTER 備份機為BACKUP

??? interface eth0???????? #設置實例綁定的網(wǎng)卡

?? ?virtual_router_id 51?? #同一實例下virtual_router_id必須相同

??? priority 99??????????? #MASTER權重要高于BACKUP 比如BACKUP為99?

??? advert_int 1?????????? #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

??? authentication {?????? #設置認證

??????? auth_type PASS???? #主從服務器驗證方式

??????? auth_pass 8888

??? }

??? virtual_ipaddress {??? #設置vip

??????? 192.168.101.100?????? #可以多個虛擬IP,換行即可

??? }

}

?

1.2.7? 測試

主備nginx都啟動keepalived及nginx。

service keepalived start

./nginx

?

1.2.7.1???????? 初始狀態(tài)

查看主nginx的eth0設置:

vip綁定在主nginx的eth0上。

?

?

?

查看備nginx的eth0設置:

vip沒有綁定在備nginx的eth0上。

?

?

?

訪問ccc.test.com,可以訪問。

?

1.2.7.2???????? 主機宕機

將主nginx的keepalived停止或?qū)⒅鱪ginx關機(相當于模擬宕機),查看主nginx的eth0:

eth0沒有綁定vip

?

?

注意這里模擬的是停止 keepalived進程沒有模擬宕機,所以還要將nginx進程也停止表示主nginx服務無法提供。

?

查看備nginx的eth0:

vip已經(jīng)漂移到備nginx。

?

?

?

訪問ccc.test.com,可以訪問。

?

1.2.7.3???????? 主機恢復

將主nginx的keepalived和nginx都啟動。

查看主nginx的eth0:

?

查看備nginx的eth0:

vip漂移到主nginx。

?

?

?

查看備nginx的eth0:

eth0沒有綁定vip

?

?

?

?

訪問:ccc.test.com,正常訪問。

注意:主nginx恢復時一定要將nginx也啟動(通常nginx啟動要加在開機啟動中),否則即使vip漂移到主nginx也無法訪問。

?

1.2.8? 解決nginx進程和keepalived不同時存在問題

1.2.8.1???????? 問題描述

???????? keepalived是通過檢測keepalived進程是否存在判斷服務器是否宕機,如果keepalived進程在但是nginx進程不在了那么keepalived是不會做主備切換,所以我們需要寫個腳本來監(jiān)控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉。

?

1.2.8.2???????? nginx進程檢測腳本

???????? 在主nginx上需要編寫nginx進程檢測腳本(check_nginx.sh),判斷nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉,check_nginx.sh內(nèi)容如下:

?

#!/bin/bash

# 如果進程中沒有nginx則將keepalived進程kill掉

A=`ps -C nginx --no-header |wc -l`????? ## 查看是否有 nginx進程 把值賦給變量A

if [ $A -eq 0 ];then??????????????????? ## 如果沒有進程值得為 零

?????? service keepalived stop????????? ## 則結(jié)束 keepalived 進程

fi

?

將check_nginx.sh拷貝至/etc/keepalived下,

腳本測試:

將nginx停止,將keepalived啟動,執(zhí)行腳本:sh /etc/keepalived/check_nginx.sh

?

?

?

從執(zhí)行可以看出自動將keepalived進程kill掉了。

?

1.2.8.3???????? 修改keepalived.conf

修改主nginx的keepalived.conf,添加腳本定義檢測:

注意下邊紅色標識地方:

?

#全局配置

global_defs {

?? notification_email {? #指定keepalived在發(fā)生切換時需要發(fā)送email到的對象,一行一個

???? XXX@XXX.com

?? }

?? notification_email_from miaoruntu@itcast.cn? #指定發(fā)件人

?? #smtp_server XXX.smtp.com???????????????????????????? #指定smtp服務器地址

?? #smtp_connect_timeout 30? ?????????????????????????????#指定smtp連接超時時間

?? router_id LVS_DEVEL??????????????????????????????????? #運行keepalived機器的一個標識

}

vrrp_script check_nginx {

??? script "/etc/keepalived/check_nginx.sh"???????? ##監(jiān)控腳本

??? interval 2???????????????????????????????? ?????##時間間隔,2秒

??? weight 2??????????????????????????????????????? ##權重

}

vrrp_instance VI_1 {

??? state MASTER?????????? #標示狀態(tài)為MASTER 備份機為BACKUP

??? interface eth0???????? #設置實例綁定的網(wǎng)卡

??? virtual_router_id 51?? #同一實例下virtual_router_id必須相同

??? priority 100 ??????????#MASTER權重要高于BACKUP 比如BACKUP為99

??? advert_int 1?????????? #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

??? authentication {?????? #設置認證

??????? auth_type PASS???? #主從服務器驗證方式

??????? auth_pass 8888

??? }

?? track_script {

??????? check_nginx??????? #監(jiān)控腳本

?? }

??? virtual_ipaddress {??? #設置vip

??????? 192.168.101.100?????? #可以多個虛擬IP,換行即可

??? }

?

}

?

修改后重啟keepalived

?

1.2.8.4???????? 測試

回到負載均衡高可用的初始狀態(tài),保證主、備上的keepalived、nginx全部啟動。

停止主nginx服務

?

觀察keepalived日志:

tail -f /var/log/keepalived.log

?

查看keepalived進程已經(jīng)不存在。

查看eth0已經(jīng)沒有綁定vip。

?

轉(zhuǎn)載于:https://www.cnblogs.com/chinaifae/p/10576046.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的nginx负载均衡高可用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。