首頁 運維 Nginx 怎麼實現Nginx高可用

怎麼實現Nginx高可用

May 25, 2023 pm 11:31 PM
nginx

準備工作:

192.168.16.128

192.168.16.129

兩條虛擬機。安裝好Nginx

安裝Nginx

更新yum 原始檔:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安裝Nginx:

yum -y install  nginx

操作命令:

systemctl start nginx; #啟動Nginx

systemctl stop nginx; #停止Nginx

# 什麼是高可用?

高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,透過設計減少系統無法提供服務的時間。如果一個系統能夠一直提供服務,那麼這個可用性則是百分之百,但是天有不測風雲。所以我們只能盡可能的去減少服務的故障。

解決的問題?

在生產環境上很多時候是以Nginx 做反向代理對外提供服務,但是一天Nginx難免遇見故障,如:伺服器宕機。當Nginx 宕機那麼所有對外提供的介面都將導致無法存取。

雖然我們無法保證伺服器百分之百可用,但也得想辦法避免這種悲劇,今天我們使用keepalived 來實現Nginx

的高可用。

雙機熱備方案

這種方案是國內企業中最為普遍的一種高可用方案,雙機熱備其實就是指一台伺服器在提供服務,另一台為某服務的備用狀態,當一台伺服器不可用另一台就會頂替上去。

keepalived是什麼?

Keepalived 軟體起初是專為LVS 負載平衡軟體設計的,用來管理並監控LV​​S叢集系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協定)功能。因此,Keepalived 除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟體

故障轉移機制

Keepalived 高可用服務之間的故障切換轉移,是透過VRRP 來實現的。

在Keepalived 服務正常運作時,主Master 節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup 節點本身還活著,當主Master 節點發生故障時,就無法發送心跳訊息,備節點也就因此無法繼續偵測到來自主Master 節點的心跳了,於是呼叫自身的接管程序,接管主Master節點的IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接手的IP資源及服務,並恢復到原來的備用角色。

實作過程

安裝keepalived

yum 方式直接安裝即可,該方式會自動安裝依賴:

yum -y install keepalived

修改主機(192.168.16.128)keepalived設定檔

# yum 方式安裝的會生產設定檔在/etc/keepalived 下:

vi keepalived.conf

keepalived.conf:

#偵測腳本

# vrrp_script chk_http_port {

    script "/usr/local/src/check_nginx_pid.sh" #心跳執行的腳本,偵測nginx是否啟動

#     interval 2                          #(偵測方式執行的間隔,而單位為秒)

#     weight 2                            #重量

# }

#vrrp 實例定義部分

vrrp_instance VI_1 {

#     state MASTER            # 指定keepalived的角色,MASTER為主,BACKUP為備

    interface ens33         # 目前進行vrrp通訊的網路介面卡(目前centos的網路卡) 用ifconfig檢視你特定的網路卡

    virtual_router_id 66    # 虛擬路由編號,主從要一直

    priority 100            # 優先級,數值越大,取得處理請求的優先順序越高

    advert_int 1            # 檢查間隔,預設為1s(vrrp組播週期秒數)

    #授權存取

#     authentication {

#         auth_type PASS #設定驗證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通訊

        auth_pass 1111

    }

    track_script {

#         chk_http_port            #(偵測腳本)

    }

    virtual_ipaddress {

        192.168.16.130            # 定義虛擬ip(VIP),可多設,每行一個

#     }

}

virtual_ipaddress 裡面可以設定vip,在線上透過vip來存取服務。

interface 需要根據伺服器網路卡進行設定通常查看方式ip addr

# authentication 設定授權存取後備機也需要相同設定

修改備機(192.168.16.129)keepalived設定檔

# keepalived.conf:

#偵測腳本

# vrrp_script chk_http_port {

    script "/usr/local/src/check_nginx_pid.sh" #心跳執行的腳本,偵測nginx是否啟動

#     interval 2                          #(所執行期間偵測中的間隔)

    weight 2                            #重量

# }

#vrrp 實例定義部分

vrrp_instance VI_1 {

#     state BACKUP                        # 指定keepalived的角色,MASTER為主,BACKUP為備

    interface ens33                      # 目前進行vrrp通訊的網路介面卡(目前centos的網路卡) 用ifconfig檢視你特定的網路卡

    virtual_router_id 66                # 虛擬路由編號,且擁有者總是使用

##     priority 99                         # 優先級,且數值越大,取得處理請求的優先順序越高

    advert_int 1                        # 檢查間隔,預設為1s(vrrp群播週期秒數)

    #授權存取

#     authentication {

#         auth_type PASS #設定驗證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通訊

        auth_pass 1111

###     }######     track_script {#######         chk_http_port                   #(請呼叫偵測腳本)############################################################################################################     }######     virtual_ipaddress {######         192.168.16.130                   # 定義虛擬ip(VIP),可多設,且每行一個######     }###### }###### 偵測腳本:###### #!/bin/bash###### #偵測nginx是否啟動了###### A=`ps -C nginx --no-header |wc -l`        ####### if [ $A -eq 0 ];then    #如果nginx沒有啟動就啟動nginx                        #######       systemctl start nginx                #重啟nginx######       if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重啟失敗,則停掉keepalived服務,進行VIP轉移######               killall keepalived                    #######       fi####### fi###### 腳本授權:chmod 775 check_nginx_pid.sh###### 說明:腳本必須透過授權,不然沒權限存取啊,在這裡我們兩個伺服器執行、VIP(virtual_ipaddress:192.168.16.130) ,我們在生產環境是直接透過vip來存取服務。 ###### 模擬nginx 故障:###### 修改兩個伺服器預設存取的Nginx 的html 頁面作為區別。 ###### 首先訪問192.168.16.130 ,透過vip 進行訪問,頁面顯示192.168.16.128 ;說明目前是主伺服器提供的服務。 ###### 這時候192.168.16.128 主伺服器執行指令:###### systemctl stop nginx; #停止nginx####### 再次造訪vip(192.168.16.130) 發現這個時候頁面顯示的還是:192.168.16.128 ,這是腳本裡面自動重啟。 ###### 現在直接將192.168.16.128 伺服器關閉,在此訪問vip(192.168.16.130) 現在發現頁面顯示192.168.16.129 這個時候keepalived 就自動故障轉移了,一套企業級生產環境的高可用方案就搭建好了。 ###

以上是怎麼實現Nginx高可用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

See all articles