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

Nginx高可用Keepalived的具體使用

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

1.Keepalived講解

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

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

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

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

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

3.Keepalived核心概念

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

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

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

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

4.Keepalived安裝配置

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

(2)兩臺(tái)主機(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)識(shí)身份->名稱
}
 
vrrp_instance VI_1 {
    state MASTER                #標(biāo)識(shí)角色狀態(tài)
    interface eth0              #網(wǎng)卡綁定接口
    virtual_router_id 50        #虛擬路由id
    priority 150                #優(yōu)先級(jí)
    advert_int 1                #監(jiān)測(cè)間隔時(shí)間
    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é)點(diǎn)區(qū)別1:唯一標(biāo)識(shí)
}
 
vrrp_instance VI_1 {
    state BACKUP              #與主節(jié)點(diǎn)區(qū)別2:角色狀態(tài)   
    interface eth0
    virtual_router_id 50
    priority 100              #與主節(jié)點(diǎn)區(qū)別3:競(jìng)選優(yōu)先級(jí)
    advert_int 1
    authentication {    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

(5)啟動(dòng)兩個(gè)節(jié)點(diǎn)的Keepalived

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

5.Keepalived測(cè)試搶占式和非搶占式

(1)LB01的優(yōu)先級(jí)高于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自動(dòng)接管

[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)配置非搶占式

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

[root@web01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id web01              #標(biāo)識(shí)身份->名稱
}
 
vrrp_instance VI_1 {
    state BACKUP                #標(biāo)識(shí)角色狀態(tài)
    nopreempt
    interface eth0              #網(wǎng)卡綁定接口
    virtual_router_id 50        #虛擬路由id
    priority 150                #優(yōu)先級(jí)
    advert_int 1                #監(jiān)測(cè)間隔時(shí)間
    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去驗(yàn)證,是否會(huì)切換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)用運(yùn)行窗口,輸入cmd打開命令提示符arp -a,查看arp緩存區(qū),此時(shí)物理地址與LB01上10.0.0.3MAC地址一致

節(jié)點(diǎn)1的Keepalived停掉

[root@web01 ~]# systemctl stop keepalived

節(jié)點(diǎn)2接管VIP

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

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

6.Keepalived故障腦裂

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

(1)常見故障原因

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

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

主備都開啟了firewalld防火墻

(2)腦裂故障測(cè)試

將主備主機(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掉一臺(tái)即可,可以通過編寫腳本的方式,我們認(rèn)為兩邊的ip add都有10.0.0.3,則發(fā)生了腦裂。我們?cè)趙eb01上寫腳本。

(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    #免密鑰測(cè)試
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飄到一臺(tái)節(jié)點(diǎn)上,相當(dāng)于Nginx多了VIP這個(gè)網(wǎng)卡,所以可以訪問到Nginx所在的機(jī)器,但是如果Nginx宕機(jī),會(huì)導(dǎo)致用戶請(qǐng)求失敗,但是keepalived沒有掛掉不會(huì)進(jìn)行切換,就需要編寫腳本檢測(cè)Nginx存活狀態(tài),如果不存活則kill掉keepalived,讓VIP自動(dòng)飄到備用服務(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)腳本測(cè)試

[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上,因?yàn)镹ginx對(duì)keepalived沒有影響
    inet 10.0.0.3/32 scope global eth0
[root@web01 ~]# vim /etc/nginx/nginx.conf       #修改Nginx配置文件,讓其無法重啟,查看是否會(huì)飄到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秒,否則會(huì)中斷再次重新執(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)用并運(yùn)行腳本
    track_script {
    	check_nginx
    }
}

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

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

相關(guān)文章

  • nginx請(qǐng)求時(shí)找路徑問題解決

    nginx請(qǐng)求時(shí)找路徑問題解決

    當(dāng)你安裝了nginx的時(shí)候,為nginx配置了如下的location,想要去訪問路徑下面的內(nèi)容,可是總是出現(xiàn)404,找不到文件,這是什么原因呢,今天我們就來解決這個(gè)問題,感興趣的朋友一起看看吧
    2023-10-10
  • 修改Nginx與Apache上傳文件大小限制

    修改Nginx與Apache上傳文件大小限制

    這篇文章主要介紹了修改Nginx與Apache上傳文件大小限制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解nginx反向代理配置及優(yōu)化

    詳解nginx反向代理配置及優(yōu)化

    本篇文章主要介紹了詳解nginx反向代理配置及優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 基于nginx access日志格式詳解

    基于nginx access日志格式詳解

    下面小編就為大家分享一篇基于nginx access日志格式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx多個(gè)前端服務(wù)配置方式詳解

    Nginx多個(gè)前端服務(wù)配置方式詳解

    這篇文章主要介紹了Nginx多個(gè)前端服務(wù)配置方式,主要包括多個(gè)location配置,多個(gè)server配置,配置方式本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-03-03
  • 詳解nginx請(qǐng)求頭數(shù)據(jù)讀取流程

    詳解nginx請(qǐng)求頭數(shù)據(jù)讀取流程

    這篇文章主要介紹了詳解nginx請(qǐng)求頭數(shù)據(jù)讀取流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Nginx服務(wù)器對(duì)數(shù)據(jù)傳輸速度限制的基本配置方法講解

    Nginx服務(wù)器對(duì)數(shù)據(jù)傳輸速度限制的基本配置方法講解

    這篇文章主要介紹了Nginx服務(wù)器對(duì)數(shù)據(jù)傳輸速度限制的基本配置方法講解,包括第三方開發(fā)的限速模塊Nginx-limit-traffic-rate-module的使用介紹,需要的朋友可以參考下
    2016-01-01
  • Nginx中泛域名配置的實(shí)例教程

    Nginx中泛域名配置的實(shí)例教程

    泛域名就是我們平常指的二級(jí)和三級(jí)域名等,這里我們來總結(jié)一下Nginx中泛域名解析配置的實(shí)例教程,包括正則匹配等細(xì)節(jié)的講解,需要的朋友可以參考下
    2016-05-05
  • Nginx limit 限制訪問模塊的方法

    Nginx limit 限制訪問模塊的方法

    本篇文章主要介紹了Nginx limit 限制訪問模塊的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 基于Nginx實(shí)現(xiàn)一個(gè)灰度上線系統(tǒng)的示例代碼

    基于Nginx實(shí)現(xiàn)一個(gè)灰度上線系統(tǒng)的示例代碼

    本文主要介紹了基于Nginx實(shí)現(xiàn)一個(gè)灰度上線系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論