最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx高可用Keepalived的具體使用

 更新時間:2024年12月26日 11:43:53   作者:第八學(xué)期  
Keepalived是一種實現(xiàn)高可用的軟件,基于VRRP協(xié)議,可以自動將虛擬IP地址切換到備用服務(wù)器,具有一定的參考價值,感興趣的可以了解一下

1.Keepalived講解

高可用是指2臺機(jī)器啟動著完全相同的業(yè)務(wù)系統(tǒng),一臺機(jī)器宕機(jī)后,另一臺可以快速啟用,用戶是無感知的。高可用硬件通常使用F5,軟件通常使用keepalived。keepalived軟件是基于VRRP協(xié)議實現(xiàn)的,VRRP虛擬路由冗余協(xié)議,主要用于解決單點故障。

2.VRRP實現(xiàn)原理

一般我們會選擇增加一臺路由器,但是我們主路由器故障后,用戶需要手動指向備用路由器,如果用戶多的話修改起來會非常麻煩,另外我們的主路由器修好后,主路由器用不用;主路由器故障后我們把備用路由器的網(wǎng)關(guān)配置改成主路由器是否可以,等等,涉及問題很多。

實際上,我們?nèi)绻麊渭兩闲薷木W(wǎng)關(guān)配置,是行不通的,我們的PC第一次通過ARP廣播尋找到主路由器的MAC地址和IP地址,會將信息寫到ARP的緩存表,那么PC在之后的連接中都是根據(jù)緩存表信息去連接,在進(jìn)行數(shù)據(jù)包轉(zhuǎn)發(fā),即使我們修改了IP,但是Mac地址是唯一的,PC的數(shù)據(jù)包依舊會發(fā)給主路由器(除非PC的ARP緩存表過期,再次發(fā)起ARP廣播的時候才能獲取新的備用路由器的MAC的地址和IP地址)

那么我們就需要VRRP了,通過軟件或硬件的形式在主路由器和副路由器外面增加一個虛擬的MAC地址(VMAC)和虛擬IP地址(VIP),那么在這種情況下,PC請求VIP的時候,不管是主路由器處理還是備用路由器處理,PC只是在ARP緩存表中記錄VMAC和VIP的信息。

3.Keepalived核心概念

要掌握Keepalived之前,我們需要先知道它的核心概念。

1、如何確定誰是主節(jié)點誰是備用節(jié)點(誰的效率高,速度快就用誰,類似選舉投票;手動干預(yù)是通過優(yōu)先級的方式)

2、如果主節(jié)點故障,備用節(jié)點自動接管,如果主節(jié)點恢復(fù)了,那么搶占式的方式主節(jié)點會自動接管,類似于奪權(quán),而非搶占式的方式,主節(jié)點恢復(fù)了,并不會自動接管。

3、主節(jié)點和備用節(jié)點在1個小組,主節(jié)點正常時,1秒鐘向小組內(nèi)發(fā)送一次心跳(時間可以自定義),表示它還正常,如果沒有發(fā)送心跳,則備用節(jié)點自動接管,如果主節(jié)點和備用節(jié)點都沒發(fā)送心跳,則兩臺服務(wù)器都會認(rèn)為自己是主節(jié)點,從而形成腦裂。

4.Keepalived安裝配置

(1)我們準(zhǔn)備一臺web01(10.0.0.5)和一臺web02(10.0.0.6)兩臺虛擬主機(jī)

(2)兩臺主機(jī)都安裝Keepalived

[root@web01 ~]# yum -y install keepalived
 
[root@web02 ~]# yum -y install keepalived

(3)配置web01

[root@web01 ~]# rpm -qc keepalived    #查詢keepalived的配置文件
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
[root@web01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id web01              #標(biāo)識身份->名稱
}
 
vrrp_instance VI_1 {
    state MASTER                #標(biāo)識角色狀態(tài)
    interface eth0              #網(wǎng)卡綁定接口
    virtual_router_id 50        #虛擬路由id
    priority 150                #優(yōu)先級
    advert_int 1                #監(jiān)測間隔時間
    authentication {            #認(rèn)證
        auth_type PASS          #認(rèn)證方式
        auth_pass 1111          #認(rèn)證密碼
    }
    virtual_ipaddress {         
        10.0.0.3                #虛擬的VIP地址
    }
}

(4)配置web02

[root@web02 ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
    router_id web02            #與主結(jié)點區(qū)別1:唯一標(biāo)識
}
 
vrrp_instance VI_1 {
    state BACKUP              #與主節(jié)點區(qū)別2:角色狀態(tài)   
    interface eth0
    virtual_router_id 50
    priority 100              #與主節(jié)點區(qū)別3:競選優(yōu)先級
    advert_int 1
    authentication {    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

(5)啟動兩個節(jié)點的Keepalived

[root@web01 ~]# systemctl start keepalived
[root@web01 ~]# systemctl enable keepalived
 
[root@web02 ~]# systemctl start keepalived
[root@web02 ~]# systemctl enable keepalived

5.Keepalived測試搶占式和非搶占式

(1)LB01的優(yōu)先級高于LB02,所以VIP在LB01上面

[root@web01 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

(2)關(guān)閉web01的Keepalived,發(fā)現(xiàn)web01自動接管

[root@web01 ~]# systemctl stop keepalived
[root@web01 ~]# ip add | grep 10.0.0.3
 
[root@web02 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

(3)重啟web01的keepalived,發(fā)現(xiàn)VIP被強(qiáng)行搶占

[root@web01 ~]# systemctl start keepalived
[root@web01 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0
 
[root@web02 ~]# ip add | grep 10.0.0.3

(4)配置非搶占式

兩個節(jié)點的state都必須配置為BACKUP,都必須加上配置nopreempt,其中一個節(jié)點的優(yōu)先級必須高于另外一個節(jié)點的優(yōu)先級。

[root@web01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id web01              #標(biāo)識身份->名稱
}
 
vrrp_instance VI_1 {
    state BACKUP                #標(biāo)識角色狀態(tài)
    nopreempt
    interface eth0              #網(wǎng)卡綁定接口
    virtual_router_id 50        #虛擬路由id
    priority 150                #優(yōu)先級
    advert_int 1                #監(jiān)測間隔時間
    authentication {            #認(rèn)證
        auth_type PASS          #認(rèn)證方式
        auth_pass 1111          #認(rèn)證密碼
    }
    virtual_ipaddress {         
        10.0.0.3                #虛擬的VIP地址
    }
}
[root@web01 ~]# systemctl restart keepalived
 
[root@web02 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
    router_id web02
}
 
vrrp_instance VI_1 {
    state BACKUP
    nopreempt        
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
[root@web02 ~]# systemctl restart keepalived

(5)通過windows的arp去驗證,是否會切換MAC地址

[root@web01 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

Windows本地hosts到10.0.0.3,瀏覽器訪問blog.koten.com(LB01分配到Web01里面的域名)

WIN+R調(diào)用運行窗口,輸入cmd打開命令提示符arp -a,查看arp緩存區(qū),此時物理地址與LB01上10.0.0.3MAC地址一致

節(jié)點1的Keepalived停掉

[root@web01 ~]# systemctl stop keepalived

節(jié)點2接管VIP

[root@web02 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

再次查看mac地址,此時物理地址與LB02上10.0.0.3MAC地址一致

6.Keepalived故障腦裂

由于某些原因,導(dǎo)致兩臺keepalived服務(wù)器在指定的時間內(nèi),無法檢測到對方的心跳,但是兩臺服務(wù)器都可以正常使用。

(1)常見故障原因

服務(wù)器網(wǎng)線松動等網(wǎng)絡(luò)故障

服務(wù)器硬件故障發(fā)生損壞現(xiàn)象而崩潰

主備都開啟了firewalld防火墻

(2)腦裂故障測試

將主備主機(jī)的防火墻都打開

[root@web01 ~]# systemctl start firewalld
[root@web02 ~]# systemctl start firewalld

將剛剛的配置文件改回去

[root@web01 ~]# vim /etc/keepalived/keepalived.conf  
global_defs {
    router_id web01
}
 
vrrp_instance VI_1 {
    state MASTER
    #nopreempt
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
[root@web01 ~]# systemctl restart keepalived
 
[root@web02 ~]# cat /etc/keepalived/keepalived.conf  
global_defs {
    router_id web02
}
 
vrrp_instance VI_1 {
    state BACKUP
    #nopreempt        
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
[root@web02 ~]# systemctl restart keepalived
 

查看web01和web02中的IP,發(fā)現(xiàn)都有10.0.0.3

[root@web01 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0
 
[root@web02 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

7.腦裂故障解決方案

解決思路:發(fā)生了腦裂,我們隨便kill掉一臺即可,可以通過編寫腳本的方式,我們認(rèn)為兩邊的ip add都有10.0.0.3,則發(fā)生了腦裂。我們在web01上寫腳本。

(1)做免密鑰方便獲取web02的ip信息:

[root@web01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+NyOCiY7aBX8nEPwGeNQHjTLY2EXPKU1o33LTBrm1zk root@LB01
The key's randomart image is:
+---[RSA 2048]----+
|    oB.oo=       |
|   o+o*o= o      |
|  . =*+o.+ o     |
|   o.=..o B o .  |
|    = o So = E   |
|   . = o ..   .  |
| .o o . o .      |
|...+ .   o       |
|. ..  ... .      |
+----[SHA256]-----+
[root@web01 ~]# 
[root@web01 ~]# ssh-copy-id -i .ssh/id_rsa 10.0.0.6
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.6's password: 
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh '10.0.0.6'"
and check to make sure that only the key(s) you wanted were added.
 
[root@web01 ~]# ssh '10.0.0.6' ip add | grep 10.0.0.3 | wc -l    #免密鑰測試
1

(2)腳本編寫并執(zhí)行

[root@web01 ~]# cat check_split_brain.sh
web01_VIP_Number=`ip add | grep 10.0.0.3 | wc -l`
web02_VIP_Number=`ssh '10.0.0.6' ip add | grep 10.0.0.3 | wc -l`
if [ $web01_VIP_Number -eq 1 -a $web02_VIP_Number -eq 1 ]
then
	systemctl stop keepalived
fi	
[root@web01 ~]# sh check_split_brain.sh

[root@web01 ~]# ip add | grep 10.0.0.3
 
[root@web02 ~]# ip add | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

8.Keepalived與Nginx

Nginx默認(rèn)監(jiān)聽在所有的IP地址上,VIP飄到一臺節(jié)點上,相當(dāng)于Nginx多了VIP這個網(wǎng)卡,所以可以訪問到Nginx所在的機(jī)器,但是如果Nginx宕機(jī),會導(dǎo)致用戶請求失敗,但是keepalived沒有掛掉不會進(jìn)行切換,就需要編寫腳本檢測Nginx存活狀態(tài),如果不存活則kill掉keepalived,讓VIP自動飄到備用服務(wù)器。
(1)腳本編寫并增加權(quán)限

[root@web01 ~]# cat check_nginx.sh
nginxpid=`ps -C nginx --no-header|wc -l`
if [ $nginxpid -eq 0 ]
then
	systemctl restart nginx &>/etc/null
	if [ $? -ne 0 ]
	then
		systemctl stop keepalived
	fi
fi
	
[root@web01 ~]# chmod +x check_nginx.sh
[root@web01 ~]# ll check_nginx.sh
-rwxr-xr-x 1 root root 150 Apr 12 17:37 check_nginx.sh

(2)腳本測試

[root@web02 ~]# ip add|grep 10.0.0.3            #當(dāng)前VIP不在web02
 
[root@web01 ~]# ip add|grep 10.0.0.3            #當(dāng)前VIP在web01上
    inet 10.0.0.3/32 scope global eth0
[root@LB01 ~]# systemctl stop nginx            #關(guān)閉Nginx
[root@web01 ~]# ip add|grep 10.0.0.3            #VIP依舊在web01上,因為Nginx對keepalived沒有影響
    inet 10.0.0.3/32 scope global eth0
[root@web01 ~]# vim /etc/nginx/nginx.conf       #修改Nginx配置文件,讓其無法重啟,查看是否會飄到web02上
 
ser  nginx;
 
[root@web01 ~]# sh check_nginx.sh               #執(zhí)行腳本
[root@web01 ~]# ip add|grep 10.0.0.3            #發(fā)現(xiàn)VIP已經(jīng)不在web02了
 
[root@web02 ~]# ip add | grep 10.0.0.3          #VIP飄移到web02上了
    inet 10.0.0.3/32 scope global eth0

(3)在配置文件內(nèi)中調(diào)用此腳本

[root@web01 ~]# cat /etc/keepalived/keepalived.conf 
global_defs {        
    router_id web01  
}
 
#每5秒執(zhí)行一次腳本,腳本執(zhí)行內(nèi)容不能超過5秒,否則會中斷再次重新執(zhí)行腳本
vrrp_script check_nginx {
    script "/root/check_nginx.sh"
    interval 5
}
 
vrrp_instance VI_1 {
    state MASTER
    #nopreempt
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         
        10.0.0.3
    }
    #調(diào)用并運行腳本
    track_script {
    	check_nginx
    }
}

注意:在Master的keepalived中調(diào)用腳本,搶占式,僅需在Master配置即可。如果配置為非搶占式,那么需要兩臺服務(wù)器都使用該腳本。 

到此這篇關(guān)于Nginx高可用Keepalived的具體使用的文章就介紹到這了,更多相關(guān)Nginx高可用Keepalived內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Apache和Nginx實現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache和Nginx實現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache是一個模型化的服務(wù)器,可以運行在幾乎所有的服務(wù)器上。其屬于應(yīng)用服務(wù)器,這篇文章主要介紹了Apache和Nginx實現(xiàn)虛擬主機(jī)的3種方式,需要的朋友可以參考下
    2023-11-11
  • NGINX 報錯 413 Request Entity Too Large的問題解決

    NGINX 報錯 413 Request Entity Too&nbs

    本文講述了處理Nginx因接口數(shù)據(jù)量過大導(dǎo)致的413錯誤,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • nginx 502 Bad Gateway 錯誤解決辦法

    nginx 502 Bad Gateway 錯誤解決辦法

    一些運行在Nginx上的網(wǎng)站有時候會出現(xiàn)“502 Bad Gateway”錯誤,有些時候甚至頻繁的出現(xiàn)。以下是小編搜集整理的一些Nginx 502錯誤的排查方法,供參考
    2013-10-10
  • 解決Nginx安裝完成,沒有sbin目錄如何啟動的問題

    解決Nginx安裝完成,沒有sbin目錄如何啟動的問題

    用戶安裝Nginx后因未生成sbin目錄導(dǎo)致啟動失敗,嘗試多種方法無效,最終發(fā)現(xiàn)需正確指定安裝路徑,進(jìn)入/usr/local/nginx/sbin目錄執(zhí)行./nginx啟動,或通過服務(wù)腳本啟動
    2025-09-09
  • Nginx could not build the server_names_hash 錯誤的解決辦法

    Nginx could not build the server_names_hash 錯誤的解決辦法

    這篇文章主要介紹了Nginx could not build the server_names_hash 錯誤的解決辦法,需要的朋友可以參考下
    2014-03-03
  • nginx超時設(shè)置詳細(xì)介紹

    nginx超時設(shè)置詳細(xì)介紹

    這篇文章主要介紹了nginx超時設(shè)置詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Nginx中動態(tài)upstream域名解析失效問題解決的幾種方法

    Nginx中動態(tài)upstream域名解析失效問題解決的幾種方法

    本文主要介紹了Nginx中實現(xiàn)動態(tài)解析upstream域名的方法,強(qiáng)調(diào)了使用resolver指令與變量觸發(fā)、作用域正確、配置兼容三要素的重要性,并提供了四種解決方案,下面就來詳細(xì)的介紹一下
    2026-04-04
  • Nginx部署HTTP/3的實現(xiàn)步驟

    Nginx部署HTTP/3的實現(xiàn)步驟

    本文介紹了在Nginx中部署HTTP/3的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Nginx反代Mogilefs分布式儲存示例詳解

    Nginx反代Mogilefs分布式儲存示例詳解

    這篇文章主要給大家介紹了關(guān)于Nginx反代Mogilefs分布式儲存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 詳解nginx 代理多個服務(wù)器(多個server方式)

    詳解nginx 代理多個服務(wù)器(多個server方式)

    本篇文章主要介紹了詳解nginx 代理多個服務(wù)器(多個server方式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

新晃| 鞍山市| 秦皇岛市| 孝感市| 巴塘县| 康乐县| 澄城县| 鄂托克前旗| 文安县| 新泰市| 沈阳市| 临汾市| 乡宁县| 武山县| 平顺县| 板桥市| 丰原市| 郧西县| 清新县| 蒙城县| 滦平县| 台江县| 惠东县| 邢台市| 龙州县| 侯马市| 理塘县| 拜泉县| 张家川| 合山市| 家居| 班戈县| 康定县| 浑源县| 淄博市| 平遥县| 隆安县| 康保县| 霍山县| 中牟县| 永寿县|