国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

keepalived對nginx進行高可用搭建及原理詳解

瀏覽:191日期:2023-03-13 15:37:35
目錄
  • 一、Keepalived介紹
  • 二、Keepalived的應(yīng)用場景
  • 三、Keepalived的工作原理
    • 1 VRRP協(xié)議
    • 2 核心組件
    • 3 分層工作
    • 4 工作狀態(tài)
  • 四、Keepalived使用
    • 1 配置介紹
    • 2 使用keepalived對nginx進行高可用搭建
      • 2.1 環(huán)境準備
      • 2.2 nginx軟件安裝和配置
      • 2.3 Keepalived軟件安裝
      • 2.4 監(jiān)聽存活腳本
      • 2.5 最終配置文件
      • 2.6 啟動主從的Keepalived
      • 2.7 查看VIP是否啟動
      • 2.8 測試
  • 五、需要注意的問題:
    • 1 腦裂介紹
      • 1.1 產(chǎn)生腦裂的原因
      • 1.2 常見的解決辦法
      • 1.3 Keepalived監(jiān)控nginx防止腦裂
    • 2 Keepalived設(shè)置故障恢復(fù)后不重新?lián)尰豓IP
      • 3 組播地址沖突問題

      一、Keepalived介紹

      摘抄自官網(wǎng)的介紹:

      Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures.

      項目地址:github.com/acassen/kee…

      • Keepalived的作用是檢測服務(wù)器狀態(tài),如果一臺服務(wù)器宕機或者出現(xiàn)其他故障導(dǎo)致當前服務(wù)器不可用,keep alived就會檢測到并將故障的服務(wù)器從系統(tǒng)中剔除,同時使用備用服務(wù)器替代該服務(wù)器的工作,當服務(wù)器工作正常后Keepalived自動將服務(wù)器加入到服務(wù)器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器。
      • Keepalived軟件起初是專為LVS負載均衡軟件設(shè)計的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務(wù)節(jié)點的狀態(tài),后來又加入了可以實現(xiàn)高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。
      • Keepalived軟件主要是通過VRRP協(xié)議實現(xiàn)高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛擬路由器冗余協(xié)議)的縮寫,VRRP出現(xiàn)的目的就是為了解決靜態(tài)路由單點故障問題的,它能夠保證當個別節(jié)點宕機時,整個網(wǎng)絡(luò)可以不間斷地運行。

      所以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節(jié)點進行健康檢查的功能,另一方面也可實現(xiàn)系統(tǒng)網(wǎng)絡(luò)服務(wù)的高可用功能。

      二、Keepalived的應(yīng)用場景

      • 管理LVS軟件
      • 基于VRRP實現(xiàn)高可用
      • 健康檢查,故障切換

      通過官網(wǎng)的介紹我們可以看到Keepalived提供了兩個重要的功能:loadbalancing和high-availability。最初是專門為LVS負載均衡軟件設(shè)計,可以用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務(wù)節(jié)點的狀態(tài),后來的版本中又加入了可以實現(xiàn)高可用的VRRP功能。

      因此,Keeaplived主要有兩種應(yīng)用場景,一個是通過配置keepalived結(jié)合ipvs做到負載均衡(LVS+Keepalived);

      另一個是通過自身健康檢查、資源接管等功能做高可用(雙機熱備),實現(xiàn)故障轉(zhuǎn)移,功能近似于Heartbeat。

      目前全球監(jiān)控的分布式MySQL集群,使用了Keeaplived來實現(xiàn)proxy的雙機熱備功能,所以下面只介紹在高可用場景下的相關(guān)知識。

      三、Keepalived的工作原理

      1 VRRP協(xié)議

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

      • VRRP是用來實現(xiàn)路由器冗余的協(xié)議。
      • VRRP協(xié)議是為了消除在靜態(tài)缺省路由環(huán)境下路由器單點故障引起的網(wǎng)絡(luò)失效而設(shè)計的主備模式的協(xié)議,使得發(fā)生故障而進行設(shè)計設(shè)備功能切換時可以不影響內(nèi)外數(shù)據(jù)通信,不需要再修改內(nèi)部網(wǎng)絡(luò)的網(wǎng)絡(luò)參數(shù)。
      • VRRP協(xié)議需要具有IP備份,優(yōu)先路由選擇,減少不必要的路由器通信等功能。
      • VRRP協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個設(shè)備,對外提供虛擬路由器IP(一個或多個)。然而,在路由器組內(nèi)部,如果實際擁有這個對外IP的路由器如果工作正常的話,就是master,或者是通過算法選舉產(chǎn)生的,MASTER實現(xiàn)針對虛擬路由器IP的各種網(wǎng)絡(luò)功能,如ARP請求,ICMP,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等,其他設(shè)備不具有該IP,狀態(tài)是BACKUP。除了接收MASTER的VRRP狀態(tài)通告信息外,不執(zhí)行對外的網(wǎng)絡(luò)功能,當主機失效時,BACKUP將接管原先MASTER的網(wǎng)絡(luò)功能。
      • VRRP協(xié)議配置時,需要配置每個路由器的虛擬路由ID(VRID)和優(yōu)先權(quán)值,使用VRID將路由器進行分組,具有相同VRID值的路由器為同一個組,VRID是一個0-255的整整數(shù);同一個組中的路由器通過使用優(yōu)先權(quán)值來選舉MASTER。優(yōu)先權(quán)大者為MASTER,優(yōu)先權(quán)也是一個0-255的正整數(shù)。

      對應(yīng)到高可用的場景,實際上就是把路由器換成了服務(wù)器或者服務(wù)器上的應(yīng)用: 通常情況下是將兩臺linux服務(wù)器組成一個熱備組(master-backup),同一時間熱備組內(nèi)只有一臺主服務(wù)器(master)提供服務(wù),同時master會虛擬出一個共用IP地址(VIP),這個VIP只存在master上并對外提供服務(wù)。 如果keepalived檢測到master宕機或服務(wù)故障,備服務(wù)器(backup)會自動接管VIP成為master,keepalived并將master從熱備組移除,當master恢復(fù)后,會自動加入到熱備組,默認再搶占成為master,起到故障轉(zhuǎn)移功能。

      2 核心組件

      keepalived是模塊化設(shè)計,不同模塊負責不同的功能,主要有三個模塊,分別是core、check和VRRP,其中:

      • **core模塊:**為keepalived的核心組件,負責主進程的啟動、維護以及全局配置文件的加載和解析;
      • **check:**負責健康檢查,包括常見的各種檢查方式,這里的配置決定了工作在哪個層;
      • **VRRP模塊:**是來實現(xiàn)VRRP協(xié)議的。

      此外還有:

      • system call:系統(tǒng)調(diào)用
      • watch dog:監(jiān)控check和vrrp進程的看管者
      • libipfwc:iptables(ipchains)庫,配置LVS會用到
      • libipvs*:配置LVS會用到

      3 分層工作

      keepalived做負載均衡時工作在TCP/IP協(xié)議的3/4/5層,做高可用時工作在OSI七層協(xié)議模型的3/4/7層,基本上是一樣的,叫法不同而已

      分層功能相關(guān)協(xié)議應(yīng)用層網(wǎng)絡(luò)服務(wù)和最終用戶的一個接口TFTP,HTTP,SNMP,DNS,FTP,SMTP,TELNET表示層數(shù)據(jù)的表示、安全、壓縮無協(xié)議會話層會話的建立、管理、中止無協(xié)議傳輸層定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯校驗TCP,UDP網(wǎng)絡(luò)層進行邏輯地址尋址,實現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇IP,ICMP,RIP,OSPF,BGP,IGMP數(shù)據(jù)鏈路層建立邏輯連接、硬件地址尋址、差錯校驗等功能SLIP,CSLIP,PPP,ARP,RARP,MTU物理層建立、連接、斷開物理連接ISO2110,IEEE802,IEEE802.2

      具體工作在哪一層的區(qū)別就在于用什么樣的網(wǎng)絡(luò)協(xié)議來進行健康檢查:

      Layer3:工作在三層時,keepalived會定期向熱備組中的服務(wù)器發(fā)送一個ICMP數(shù)據(jù)包,來判斷某臺服務(wù)器是否故障,如果沒有響應(yīng)則將這臺服務(wù)器從熱備組移除。

      Layer4:工作在四層時,keepalived以TCP端口的狀態(tài)判斷服務(wù)器是否故障,比如檢測MySQL的3306端口,如果無法訪問則將這臺服務(wù)器從熱備組移除。

      Layer7:工作在七層時,keepalived根據(jù)用戶設(shè)定的策略判斷服務(wù)器上的程序是否正常運行,比如使用HTTP請求的方式,如果返回錯誤的狀態(tài)碼則將這臺服務(wù)器從熱備組移除。

      在Keepalived服務(wù)器群之間,只有作為主的服務(wù)器不斷發(fā)送VRRP廣播包,告訴備它還活著,此時備不會搶占主,只有當主不可用,既備接受不到主的VRRP廣播包,這時候備就會啟動相關(guān)的服務(wù)接管主的任務(wù)向外提供服務(wù),以保證服務(wù)的正常使用。

      4 工作狀態(tài)

      keepalived正常啟動的時候,共啟動3個進程: 一個是父進程,負責監(jiān)控其子進程;

      一個是VRRP子進程,另外一個是checkers子進程;

      兩個子進程都被系統(tǒng)watchlog看管,Healthcheck子進程檢查各自服務(wù)器的健康狀況。

      如果healthchecks進程檢查到master上服務(wù)不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,并且去掉虛擬IP,轉(zhuǎn)換為BACKUP狀態(tài)。 生產(chǎn)服務(wù)器上的keepalived進程

      四、Keepalived使用

      1 配置介紹

      keepalived配置文件按層級模塊劃分的,每層由"{ }"來界定。在主配置文件中可以通過include來涵蓋多個子配置文件。 詳細語法說明:官方文檔 配置文件包括以下幾個模塊:

      • LOBAL CONFIGURATION
      • BFD CONFIGURATION
      • VRRPD CONFIGURATION
      • LVS CONFIGURATION
      [root@localhost ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {     #全局定義部分    notification_email {  #設(shè)置報警郵件地址,可設(shè)置多個[email protected]      #接收通知的郵件地址    }    notification_email_from [email protected] #設(shè)置 發(fā)送郵件通知的地址    smtp_server smtp.163.com      #設(shè)置 smtp server 地址,可是ip或域名.可選端口號 (默認25)    smtp_connect_timeout 30       #設(shè)置 連接 smtp server的超時時間    router_id LVS_DEVEL   #主機標識,用于郵件通知    vrrp_skip_check_adv_addr    vrrp_strict   #嚴格執(zhí)行VRRP協(xié)議規(guī)范,此模式不支持節(jié)點單播    vrrp_garp_interval 0    vrrp_gna_interval 0    script_user keepalived_script #指定運行腳本的用戶名和組。默認使用用戶的默認組。如未指定,默認為keepalived_script 用戶,如無此用戶,則使用root    enable_script_security#如過路徑為非root可寫,不要配置腳本為root用戶執(zhí)行。}vrrp_instance VI_1 {      #vrrp 實例部分定義,VI_1自定義名稱    state MASTER  #指定 keepalived 的角色,必須大寫 可選值:MASTER|BACKUP    interface ens33       #網(wǎng)卡設(shè)置,lvs需要綁定在網(wǎng)卡上,realserver綁定在回環(huán)口。區(qū)別:lvs對訪問為外,realserver為內(nèi)不易暴露本機信息    virtual_router_id 51  #虛擬路由標識,是一個數(shù)字,同一個vrrp 實例使用唯一的標識,MASTER和BACKUP 的 同一個 vrrp_instance 下 這個標識必須保持一致    priority 100  #定義優(yōu)先級,數(shù)字越大,優(yōu)先級越高。    advert_int 1  #設(shè)定 MASTER 與 BACKUP 負載均衡之間同步檢查的時間間隔,單位為秒,兩個節(jié)點設(shè)置必須一樣    authentication {      #設(shè)置驗證類型和密碼,兩個節(jié)點必須一致auth_type PASSauth_pass 1111    }    virtual_ipaddress {   #設(shè)置虛擬IP地址,可以設(shè)置多個虛擬IP地址,每行一個192.168.119.130    }    track_script {#腳本監(jiān)控狀態(tài)chk_nginx_service #可加權(quán)重,但會覆蓋聲明的腳本權(quán)重值。chk_nginx_service weight -20    }notify_master "/etc/keepalived/start_haproxy.sh start"  #當前節(jié)點成為master時,通知腳本執(zhí)行任務(wù)notify_backup "/etc/keepalived/start_haproxy.sh stop"   #當前節(jié)點成為backup時,通知腳本執(zhí)行任務(wù)notify_fault  "/etc/keepalived/start_haproxy.sh stop"   #當當前節(jié)點出現(xiàn)故障,執(zhí)行的任務(wù);}virtual_server 192.168.119.130 80  {  #定義RealServer對應(yīng)的VIP及服務(wù)端口,IP和端口之間用空格隔開    delay_loop 6      #每隔6秒查詢realserver狀態(tài)    lb_algo rr#后端調(diào)試算法(load balancing algorithm)    lb_kind DR#LVS調(diào)度類型NAT/DR/TUN    #persistence_timeout 60   同一IP的連接60秒內(nèi)被分配到同一臺realserver    protocol TCP      #用TCP協(xié)議檢查realserver狀態(tài)    real_server 192.168.119.120 80 {weight 1      #權(quán)重,最大越高,lvs就越優(yōu)先訪問TCP_CHECK {   #keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC    connect_timeout 10#10秒無響應(yīng)超時    retry 3   #重連次數(shù)3次    delay_before_retry 3      #重連間隔時間    connect_port 80   #健康檢查realserver的端口}    }}}

      2 使用keepalived對nginx進行高可用搭建

      2.1 環(huán)境準備

      主機ip角色部署軟件192.168.73.135masterkeepalived、nginx192.168.73.136salvekeepalived、nginx192.168.73.100虛ip

      |

      2.2 nginx軟件安裝和配置

      在192.168.73.136操作為例,135上把index改成135即可

      [root@localhost ~]# yum -y install nginx[root@localhost ~]# cd /usr/share/nginx/html/[root@localhost html]# mv index.html index.html.back[root@localhost html]# echo "I am 192.168.73.136" > index.html[root@localhost html]# systemctl start nginx[root@localhost html]# curl 192.168.73.136I am 192.168.73.136

      2.3 Keepalived軟件安裝

      [root@localhost ~]# yum install keepalived -y[root@localhost ~]# rpm -ql keepalived/etc/keepalived/etc/keepalived/keepalived.conf  # 主配置文件/etc/sysconfig/keepalived/usr/bin/genhash/usr/lib/systemd/system/keepalived.service/usr/libexec/keepalived/usr/sbin/keepalived

      2.4 監(jiān)聽存活腳本

      [root@localhost ~]# vim /etc/keepalived/check_port.sh#!/bin/bash#keepalived 監(jiān)控端口腳本#使用方法:#在keepalived的配置文件中#vrrp_script check_port {#創(chuàng)建一個vrrp_script腳本,檢查配置#    script "/etc/keepalived/check_port.sh 80" #配置監(jiān)聽的端口#    interval 2 #檢查腳本的頻率,單位(秒)#}CHK_PORT=$1if [ -n "$CHK_PORT" ];thenPORT_PROCESS=`ss -lnt|grep $CHK_PORT|wc -l`if [ $PORT_PROCESS -eq 0 ];thenecho "Port $CHK_PORT Is Not Used,End."exit 1fielseecho "Check Port Cant Be Empty!"fi[root@localhost ~]# chmod  +x /etc/keepalived/check_port.sh

      2.5 最終配置文件

      (1)Master配置

      [root@localhost ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {   router_id 192.168.73.136}vrrp_script chk_nginx {    script "/etc/keepalived/check_port.sh 80"    interval 2    weight -20}vrrp_instance VI_1 {    state MASTER    interface ens33    virtual_router_id 251    priority 100    advert_int 1    authentication {auth_type PASSauth_pass 11111111    }    track_script { chk_nginx    }    virtual_ipaddress {192.168.73.100    }}

      (2)Slave配置

      ! Configuration File for keepalivedglobal_defs {router_id 192.168.73.135}vrrp_script chk_nginx {script "/etc/keepalived/check_port.sh 80"interval 2weight -20}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 251priority 90advert_int 1authentication {auth_type PASSauth_pass 11111111}track_script {chk_nginx}virtual_ipaddress {192.168.73.100}}

      2.6 啟動主從的Keepalived

      [root@localhost ~]]systemctl start keepalived && systemctl enable keepalive

      2.7 查看VIP是否啟動

      [root@localhost keepalived]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 00:0c:29:6f:74:0a brd ff:ff:ff:ff:ff:ff    inet 192.168.73.136/24 brd 192.168.73.255 scope global noprefixroute ens33       valid_lft forever preferred_lft forever    inet 192.168.73.100/32 scope global ens33       valid_lft forever preferred_lft forever    inet6 fe80::af0e:a936:d997:18da/64 scope link noprefixroute       valid_lft forever preferred_lft forever

      2.8 測試

      首先在瀏覽器中訪問vip,可以看到我們訪問的是BACKUP上的web地址

      關(guān)掉master上的nginx,查看VIP是否漂移到備機。

      # 關(guān)閉主nginx[root@localhost ~]# systemctl stop nginx# 查看備上的IP信息,我們發(fā)現(xiàn)vip已經(jīng)偏移到備機上了[root@localhost ~]# ip addr1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever2: ens33: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 00:0c:29:6f:74:0a brd ff:ff:ff:ff:ff:ff    inet 192.168.73.136/24 brd 192.168.73.255 scope global noprefixroute ens33       valid_lft forever preferred_lft forever    inet6 fe80::af0e:a936:d997:18da/64 scope link noprefixroute       valid_lft forever preferred_lft forever

      在瀏覽器中訪問vip,可以看到我們訪問的是master上的web地址

      五、需要注意的問題:

      1 腦裂介紹

      在高可用系統(tǒng)中,如果兩個節(jié)點的心跳線斷開,本來兩個節(jié)點為一個整體、動作協(xié)調(diào)的一個HA系統(tǒng),現(xiàn)在由于兩個之間的心跳線斷開導(dǎo)致它們分裂成了兩個單獨的個體。由于雙方互相失去了聯(lián)系,都會以為對方出了故障。這時候這兩個單獨的個體就像"腦裂人"一樣互相爭搶共享資源、爭用應(yīng)用服務(wù),這樣就會造成嚴重問題:

      • 共享資源被瓜分,兩邊服務(wù)都起不來;
      • 兩邊服務(wù)都起來了,同時提供服務(wù),同時讀寫存儲,導(dǎo)致數(shù)據(jù)不一致甚至損壞。

      1.1 產(chǎn)生腦裂的原因

      一般來說,腦裂的發(fā)生,有以下幾種原因:

      • (1)HA服務(wù)器之間心跳線故障,導(dǎo)致無法正常通信;
      • (2)HA服務(wù)器上開啟了防火墻,阻擋了心跳線的信息傳輸;
      • (3)HA服務(wù)器上心跳網(wǎng)卡配置不正確,導(dǎo)致心跳信息發(fā)送失敗;
      • (4)其他服務(wù)器配置不當?shù)脑颉1热缧奶绞讲煌奶鴱V播沖突,軟件BUG等;
      • (5)Keepalived配置里同一 VRRP實例中如果 virtualrouterid兩端參數(shù)配置不一致也會導(dǎo)致裂腦問題發(fā)生。

      1.2 常見的解決辦法

      在實際環(huán)境中,我們可以從以下幾個方面來防止腦裂的問題:

      • (1)同時使用串行線路或者以太網(wǎng)電纜連接,同時使用兩條心跳線路,如果一條壞了,另外一條還能正常提供服務(wù);
      • (2)當檢測到腦裂時強行關(guān)閉一個節(jié)點(該功能需要特殊設(shè)備支持,如Stonith,feyce),相當于備節(jié)點接受不到心跳心跳消患,通過單獨的線路發(fā)送關(guān)機命令關(guān)閉主節(jié)點的電源;
      • (3)做好腦裂監(jiān)控報警(用zabbix等來監(jiān)控),在問題發(fā)生時能在第一時間介入仲裁,降低損失。
      • (4)啟動磁盤鎖。正在服務(wù)一方鎖住共享磁盤,“裂腦”發(fā)生時,讓對方完全“搶不走”共享磁盤資源。但使用鎖磁盤也會有一個不小的問題,如果占用共享盤的一方不主動“解鎖”,另一方就永遠得不到共享磁盤。現(xiàn)實中假如服務(wù)節(jié)點突然死機或崩潰,就不可能執(zhí)行解鎖命令。后備節(jié)點也就接管不了共享資源和應(yīng)用服務(wù)。于是有人在HA中設(shè)計了“智能”鎖。即:正在服務(wù)的一方只在發(fā)現(xiàn)心跳線全部斷開(察覺不到對端)時才啟用磁盤鎖,平時就不上鎖了;
      • (5)加入仲裁機制。例如設(shè)置網(wǎng)關(guān)IP,當腦裂發(fā)生時,兩個節(jié)點都各自ping以下這個網(wǎng)關(guān)IP,不通則表明斷點就在本端,不僅“心跳”、還兼對外“服務(wù)”的本端網(wǎng)絡(luò)鏈路斷了,即使啟動(或繼續(xù))應(yīng)用服務(wù)也沒有用了,那就主動放棄競爭,讓能夠ping通網(wǎng)關(guān)IP的一端去起服務(wù)。更保險一些,ping不通網(wǎng)關(guān)IP的一方干脆就自我重啟,以徹底釋放有可能還占用著的那些共享資源。

      1.3 Keepalived監(jiān)控nginx防止腦裂

      (1)執(zhí)行腳本,用來檢測

      [root@zdd211-11 ~]# vim /etc/keepalived/check_keepalived.sh#!/bin/bashNGINX_SBIN="which nginx"NGINX_PORT=80function check_nginx(){     NGINX_STATUS="nmap localhost -p ${NGINX_PORT} | grep "80/tcp open" | awk "{print $2}""     NGINX_PROCESS="ps -ef | grep nginx|grep -v grep|wc -l"}check_nginxif [ "$NGINX_STATUS" != "open"  -o  $NGINX_PROCESS -lt 2 ]then    ${NGINX_SBIN} -s stop    ${NGINX_SBIN}    sleep 3    check_nginx    if [ "$NGINX_STATUS" != "open"  -o  $NGINX_PROCESS -lt 2 ];thensystemctl stop keepalived    fi fi [root@localhost ~]# chmod  +x /etc/keepalived/check_port.sh

      (2)安裝nmap 因為上面腳本有用到這個工具,因此兩個主機都需要安裝

      [root@localhost ~]# yum install nmap -y

      (3) 修改master配置

      [root@localhost ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {   router_id 192.168.73.136}vrrp_script chk_nginx {    script "/etc/keepalived/check_port.sh 80"    interval 2    weight -20}vrrp_script chk_nginx {    script "/etc/keepalived/check_keepalive.sh" # 腳本路徑    interval 2  # 執(zhí)行時間間隔    weight -5   # 計算權(quán)重值,腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失敗(腳本返回非0)則優(yōu)先級 -5    fall 3      # 檢測連續(xù)3次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間)    rise 2      # 檢測2次成功就算成功。但不修改優(yōu)先級vrrp_instance VI_1 {    state MASTER    interface ens33    virtual_router_id 251    priority 100    advert_int 1    authentication {auth_type PASSauth_pass 11111111    }    track_script { chk_nginx    }    virtual_ipaddress {192.168.73.100    }}

      (4) 修改Slave配置配置

      ! Configuration File for keepalivedglobal_defs {router_id 192.168.73.135}vrrp_script chk_nginx {    script "/etc/keepalived/check_keepalive.sh"    interval 2     # 執(zhí)行時間間隔    weight -5      # 計算權(quán)重值,腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失敗(腳本返回非0)則優(yōu)先級 -5    fall 3 # 檢測連續(xù)3次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間)    rise 2 # 檢測2次成功就算成功。但不修改優(yōu)先級vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 251priority 90advert_int 1authentication {auth_type PASSauth_pass 11111111}track_script {chk_nginx}virtual_ipaddress {192.168.73.100}}

      2 Keepalived設(shè)置故障恢復(fù)后不重新?lián)尰豓IP

      通常生產(chǎn)環(huán)境是不允許VIP來回漂移,當主機的業(yè)務(wù)出問題之后,vip漂移到備機上保證業(yè)務(wù)不中斷,就算故障恢復(fù)keepalived也不會把vip切到主機上;

      需要進行對應(yīng)的問題問題,確認主機環(huán)境沒有問題之后手動重啟主機上keepalived服務(wù),讓vip切回到主機上。 為

      了滿足這樣的業(yè)務(wù)場景,可以使用nopreempt參數(shù),不搶占VIP的機制實現(xiàn) 修改master配置如下

      [root@localhost ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {   router_id 192.168.73.136}vrrp_script chk_nginx {    script "/etc/keepalived/check_keepalive.sh" # 腳本路徑    interval 2  # 執(zhí)行時間間隔    weight -5   # 計算權(quán)重值,腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失敗(腳本返回非0)則優(yōu)先級 -5    fall 3      # 檢測連續(xù)3次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間)    rise 2      # 檢測2次成功就算成功。但不修改優(yōu)先級}vrrp_instance VI_1 {    state MASTER    interface ens33    virtual_router_id 251    priority 100    advert_int 1    nopreempt    ##不搶VIP 機制    authentication {auth_type PASSauth_pass 11111111    }    track_script { chk_nginx    }    virtual_ipaddress {192.168.73.100    }}

      可以自己重啟keepalived,然后停止web,然后再啟動web,驗證是否能夠自動漂移回主機

      3 組播地址沖突問題

      當在同一個局域網(wǎng)內(nèi)部署了多組keepalived服務(wù)器時,可能會發(fā)生高可用接管的嚴重故障問題。 因為keepalived高可用功能是通過VRRP協(xié)議實現(xiàn)的,VRRP協(xié)議默認通過IP多播的形式實現(xiàn)高可用對之間的通信,如果同一個局域網(wǎng)內(nèi)存在多組Keepalived服務(wù)器對,就會造成IP多播地址沖突問題,導(dǎo)致接管錯亂. 不同組的keepalived都會使用默認的224.0.0.18作為多播地址。此時的解決辦法是,在同組的keepalived服務(wù)器所有的配置文件里指定獨一無二的多播地址,配置如下:

      global_defs{  ``router_id LVS_19  ``vrrp_mcast_group4 224.0.0.19` `#指定多播地址}

      以上就是keepalived對nginx進行高可用搭建及原理詳解的詳細內(nèi)容,更多關(guān)于keepalived搭建nginx的資料請關(guān)注其它相關(guān)文章!

      標簽: Nginx
      主站蜘蛛池模板: 亚洲国产二区三区久久 | 亚洲欧美日韩在线不卡中文 | 免费人成在线观看播放国产 | 欧美高清在线精品一区 | 国产精品深爱在线 | 艳女伦交一级毛片 | 国内精品久久久久影院亚洲 | 97免费视频在线观看 | 国产伦精品一区二区三区四区 | 国产精品香蕉一区二区三区 | 免费视频成人国产精品网站 | 视频一区精品 | 一区二区三区久久精品 | 成人国产三级在线播放 | 全部aⅴ极品视觉盛宴精品 全部免费a级毛片 | 久久频这里精品99香蕉久 | 女人张开腿男人猛桶视频 | 免费观看三级毛片 | 成在线人视频免费视频 | 国产欧美一区二区三区精品 | 性感美女一级毛片 | 成年女人免费视频播放成年m | 国产精品27页 | 日本韩经典三级在线播放 | 欧美成人爽毛片在线视频 | 九草在线 | 日本卡一卡2卡3卡4精品卡无人区 | 特级毛片aaaa级毛片免费 | 成人午夜在线观看 | 最刺激黄a大片免费观看 | 免费人成观看在线网 | 久久久精品免费视频 | 国产美女精品一区二区三区 | 精品视频久久 | 爱视频福利广场 | 国产成年人在线观看 | 88av视频在线观看 | 成人久久久 | 欧洲免费无线码一二区 | 各种偷拍盗摄视频在线观看 | 国产成人精品.一二区 |