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

解決方案之關于Nginx高可用方案

 更新時間:2024年04月22日 09:10:11   作者:穿城大餅  
這篇文章主要介紹了解決方案之關于Nginx高可用方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

解決方案:Nginx高可用方案

關鍵詞

  • KeepAlived(主服務器 和 備份服務器 故障時 IP 瞬間無縫交接)
  • VRRP協(xié)議(路由器組,提供虛擬IP,一個master和多個backup,組播消息,選舉backup當master)
  • Nginx+keepalived 雙機主主模式(倆公網虛擬IP,負載);雙機主從模式(熱備服務器)

需求:

由于業(yè)務擴展,網站的訪問量不斷加大,負載越來越高?,F(xiàn)需要在web前端放置nginx負載均衡。

在生產環(huán)境下,Nginx作為流量的入口,如果Nginx不能正常工作或服務器宕機,將導致整個微服務架構的不可用。

所以結合keepalived對前端nginx實現(xiàn)HA高可用

一、Nginx & KeepAlived

Nginx 進程基于Master+Slave(worker)多進程模型,自身具有非常穩(wěn)定的子進程管理功能。在Master進程分配模式下,Master進程永遠不進行業(yè)務處理,只是進行任務分發(fā),從而達到Master進程的存活高可靠性,Slave(worker)進程所有的業(yè)務信號都 由主進程發(fā)出,Slave(worker)進程所有的超時任務都會被Master中止,屬于非阻塞式任務模型。

KeepAlived是Linux下面實現(xiàn)VRRP備份路由的高可靠性運行件?;贙eepAlived設計的服務模式能夠真正做到主服務器和備份服務器故障時IP瞬間無縫交接。二者結合,可以構架出比較穩(wěn)定的軟件LB(Load Balance)方案。

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

KeepAlived是一個基于VRRP協(xié)議來實現(xiàn)的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有Heartbeat 、Corosync、Pacemaker。但是它一般不會單獨出現(xiàn),而是與其它負載均衡技術(如LVS、Haproxy、Nginx)一起工作來達到集群的高可用。

二、VRRP協(xié)議

VRRP全稱 Virtual Router Redundancy Protocol,即”虛擬路由冗余協(xié)議“??梢哉J為它是實現(xiàn)路由器高可用的容錯協(xié)議,即將N臺提供相同功能的路由器組成一個路由器組(Router Group),這個組里面有一個master和多個backup,但在外界看來就像一臺一樣,構成虛擬路由器,擁有一個虛擬IP(VIP - Virtual IP,也就是路由器所在局域網內其他機器的默認路由),占有這個IP的master實際負責ARP相應和轉發(fā)IP數據包,組中的其它路由器作為備份的角色處于待命狀態(tài)。master會發(fā)組播消息,當backup在超時時間內收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優(yōu)先級來選舉一個backup當master,保證路由器的高可用。

在VRRP協(xié)議實現(xiàn)里,虛擬路由器使用 00-00-5E-00-01-XX 作為虛擬MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),這個地址同一時間只有一個物理路由器占用。在虛擬路由器里面的物理路由器組里面通過多播IP地址 224.0.0.18 來定時發(fā)送通告消息。每個Router都有一個 1-255之間的優(yōu)先級別,級別最高的(highest priority)將成為主控(master)路由器。通過降低master的優(yōu)先權可以讓處于backup狀態(tài)的路由器搶占(pro-empt)主路由器的狀態(tài),兩個backup優(yōu)先級相同的IP地址較大者為master,接管虛擬IP。

三、雙機高可用解決方案

(1)Nginx+keepalived 雙機主從模式:

即前端使用兩臺服務器,一臺主服務器和一臺熱備服務器,正常情況下,主服務器綁定一個公網虛擬IP,提供負載均衡服務,熱備服務器處于空閑狀態(tài);當主服務器發(fā)生故障時,熱備服務器接管主服務器的公網虛擬IP,提供負載均衡服務;但是熱備服務器在主機器不出現(xiàn)故障的時候,永遠處于浪費狀態(tài),對于服務器不多的網站,該方案不經濟實惠。

(2)Nginx+keepalived 雙機主主模式:

即前端使用兩臺負載均衡服務器,互為主備,且都處于活動狀態(tài),同時各自綁定一個公網虛擬IP,提供負載均衡服務;當其中一臺發(fā)生故障時,另一臺接管發(fā)生故障服務器的公網虛擬IP(這時由非故障機器一臺負擔所有的請求)。

四、基礎環(huán)境準備

兩臺服務器:192.168.253.11(主), 192.168.253.12(從),每臺服務器上分別安裝Nginx 、KeepAlived。

cd /usr/local/openresty/nginx/sbin

./nginx -s stop

(1)安裝Nginx:

# 添加源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 安裝Nginx
sudo yum install -y nginx

# 啟動Nginx
sudo systemctl start nginx.service

# 瀏覽器訪問測試
http://192.168.253.11/
http://192.168.253.12/

(2)安裝KeepAlived可使用yum直接安裝:

yum -y install keepalived

查看KeepAlived配置文件:

cat /etc/keepalived/keepalived.conf

接下來就是要對該配置文件進行修改,該配置文件在/etc/keepalived/路徑下。在默認的keepalive.conf里面還有 virtual_server,real_server 這樣的配置,它是為lvs準備的。 

(3)關閉防火墻(默認關閉) 

(4)關閉selinux(如果不關閉,KeepAlived不生效)

臨時關閉:

[root@localhost ~]# getenforce Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce

Permissive

永久關閉:

[root@localhost ~]# vim /etc/sysconfig/selinux

SELINUX=enforcing 改為 SELINUX=disabled

重啟服務reboot

五、配置主備模式

(1)修改主配置文件:

! Configuration File for keepalived

global_defs {
     notification_email {
          acassen@firewall.loc
          failover@firewall.loc
          sysadmin@firewall.loc
     }
     
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id master11
}

# nginx掛了,實現(xiàn)vip自動漂移,使用如下腳本控制     
vrrp_script check_nginx {
      script "/usr/local/nginx/nginx_check.sh"
      interval 2  # 機器宕機執(zhí)行的次數
      weight 2
}

# 當前實例配置
vrrp_instance VI_1 {
     state MASTER   # 主機
     interface ens33  # 綁定的網卡
     virtual_router_id 51   # 組id,需要一致
     priority 100  # 優(yōu)先級
     advert_int 1  # 檢查間隔,默認1s
     
     # 調用nginx掛了之后進行vip漂移的函數  
     track_script {
       	check_nginx
     }
     
     authentication {
       	auth_type PASS
       	auth_pass 1111
     }
     
     # 配置vip
     virtual_ipaddress {
        192.168.253.50/24 dev ens33 label ens33:1 scope global
 	 }
}

在默認的keepalive.conf里面還有 virtual_server,real_server 這樣的配置,我們這用不到,它是為lvs準備的。 

(2)/usr/local/nginx/nginx_check.sh :

# 在/usr/local下新建目錄nginx
mkdir nginx
# 新建文件
touch nginx_check.sh
# 編輯內容
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`   #查看nginx進程是否存在  
#if [ $A -eq 0 ];then              
  /usr/sbin/nginx         #重啟nginx
  if [ $A -eq 0 ];then   #nginx重啟失敗
    exit 1 # keepalived執(zhí)行腳本,返回非0結果,ip漂移
  else
    exit 0 # keepalived執(zhí)行腳本,返回0,ip不漂移
  fi
#else
#  exit 0
#fi

需要給nginx_check.sh文件加可執(zhí)行權限:

chmod +x nginx_check.sh

(3)修改從機keepalived.conf配置文件:

! Configuration File for keepalived
global_defs {
     notification_email {
          acassen@firewall.loc
          failover@firewall.loc
          sysadmin@firewall.loc
     }
    
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id backup
}

vrrp_script check_nginx {
     script "/usr/local/nginx/nginx_check.sh"
     interval 2
     weight 2
}

vrrp_instance VI_1 {
     state BACKUP  # 從機
     interface ens33
     virtual_router_id 51  # 組id,需要一致
     priority 99   # 優(yōu)先級
     advert_int 1
        
     # 調用nginx掛了之后進行vip漂移的函數    
     track_script {
       	check_nginx
     }
     
     authentication {
       	auth_type PASS
       	auth_pass 1111
     }
    
     # 配置vip
     virtual_ipaddress {
        192.168.253.50/24 dev eth0 label ens33:1 scope global
     }
}

同樣需要在/usr/local/nginx/路徑下放上nginx_check.sh腳本文件。 

(4) 啟動nginx、keepalived

#主從啟動
sudo systemctl restart nginx.service

#主從啟動
systemctl start keepalived

(5)訪問測試

為效果明顯,可以修改Nginx首頁,將主從IP地址放置首頁以便區(qū)分。

訪問http://192.168.253.50 or curl 192.168.253.50

查看Nginx日志:

cd  /var/log/nginx/
cat  access.log

查看主服務器keepalived日志:

Keepalived默認所有的日志都是寫入到/var/log/message ,

你可以使用命令 tail -f /var/log/messages|grep Keepalived 進行查看

查看ens33網卡信息:

ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UNKNOWN group default qlen 1000
 inet 192.168.253.11/24 brd 192.168.253.255 scope
global noprefixroute ens33 
 inet 192.168.253.50/24 scope global secondary ens33:1
#VIP已漂移到主機,vip只能選擇一個機器進行綁定

(6)停掉主服務器的nginx

通過瀏覽器訪問:http://192.168.253.50

查看主機KeepAlived日志:

tail -f /var/log/messages|grep Keepalived
# 強制停止
pkill -9 nginx

# 查看Nginx進程
ps -ef | grep nginx

# 等待幾秒后再次查看Nginx進程,發(fā)現(xiàn)已經通過檢查腳本自啟
# 因為在keepalived腳本中,進行了nginx重啟操作

則會執(zhí)行腳本nginx_check.sh進行nginx啟動!

  • 如果master上的nginx服務掛了,則nginx會自動重啟,重啟失敗后會自動關閉keepalived,這樣vip資源也會轉移到slave上。
  • master和slave兩邊都開啟nginx服務,無論master還是slave,當其中的一個keepalived服務停止后,vip都會漂移到keepalived服務還在的節(jié)點上;
  • 如果要想使nginx服務掛了,vip也漂移到另一個節(jié)點,則必須用腳本或者在配置文件里面用shell命令來控制。(nginx服務宕停后會自動啟動,啟動失敗后會會致使vip資源漂移到另一臺機器上)

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Nginx一個IP如何配置多個站點的方法教程

    Nginx一個IP如何配置多個站點的方法教程

    這篇文章主要給大家介紹了關于Nginx一個IP如何配置多個站點的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • ubuntu系統(tǒng)中nginx啟動腳本

    ubuntu系統(tǒng)中nginx啟動腳本

    這篇文章主要介紹了ubuntu系統(tǒng)中nginx啟動腳本,可以實現(xiàn)nginx的自啟動,需要的朋友可以參考下
    2014-02-02
  • 詳解Nginx的超時keeplive_timeout配置步驟

    詳解Nginx的超時keeplive_timeout配置步驟

    Nginx 處理的每個請求均有相應的超時設置,本文主要介紹了Nginx的超時keeplive_timeout配置步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • nginx?流控使用的項目實踐

    nginx?流控使用的項目實踐

    本文主要介紹了nginx?流控使用的項目實踐
    2024-03-03
  • 淺談Nginx七層反向代理和負載均衡

    淺談Nginx七層反向代理和負載均衡

    這篇文章主要介紹了淺談Nginx七層反向代理和負載均衡,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Nginx+SSL搭建 HTTPS 網站

    Nginx+SSL搭建 HTTPS 網站

    最近在研究nginx,整好遇到一個需求就是希望服務器與客戶端之間傳輸內容是加密的,防止中間監(jiān)聽泄露信息,但是去證書服務商那邊申請證書又不合算,因為訪問服務器的都是內部人士,所以自己給自己頒發(fā)證書,忽略掉瀏覽器的不信任警報即可。下面是頒發(fā)證書和配置過程。
    2016-08-08
  • Nginx?代理解決跨域問題多種情況分析

    Nginx?代理解決跨域問題多種情況分析

    這篇文章主要介紹了Nginx?代理解決跨域問題分析,通過用網站8080訪問Nginx代理后的接口地址,報錯分為多種情況,每種情況給大家詳細分析,感興趣的朋友一起看看吧
    2022-01-01
  • 詳解Prometheus 抓取 nginx 訪問日志的指標

    詳解Prometheus 抓取 nginx 訪問日志的指標

    通過結合NGINX Exporter, Fluentd, Prometheus和Grafana, 可有效監(jiān)控并可視化NGINX中的4xx和5xx狀態(tài)碼日志,首先使用Fluentd收集和解析NGINX日志,再通過Prometheus抓取Fluentd暴露的指標,本文介紹Prometheus抓取nginx訪問日志的指標,感興趣的朋友一起看看吧
    2024-10-10
  • Nginx本地配置SSL訪問的實例教程

    Nginx本地配置SSL訪問的實例教程

    當一個項目部署測試服后會遇到跨域、SSL證書、訪問靜態(tài)文件等各種問題,這個時候我們就可以采用Nginx來解決上述的問題,下面這篇文章主要給大家介紹了關于Nginx本地配置SSL訪問的相關資料,需要的朋友可以參考下
    2022-05-05
  • Nginx配置反向代理服務器實現(xiàn)在https網站中請求http資源

    Nginx配置反向代理服務器實現(xiàn)在https網站中請求http資源

    ?Nginx反向代理?是一種將客戶端請求轉發(fā)到后端服務器的技術,主要用于負載均衡、提高安全性和提升性能,本文給大家介紹了Nginx配置反向代理服務器實現(xiàn)在https網站中請求http資源,需要的朋友可以參考下
    2025-03-03

最新評論