對(duì)于LVS-DR架構(gòu)以及arp_ignore,arp_announce的理解

????對(duì)于LVS使用DR模式進(jìn)行搭建時(shí),arp_ignore和arp_announce這兩個(gè)用來配置arp協(xié)議的參數(shù)其實(shí)是尤為重要的,但是網(wǎng)上對(duì)于這兩個(gè)參數(shù)為什么配置和為什么參數(shù)選擇1或者2都沒有說的很明白,所以在查了很多資料之后準(zhǔn)備在這里說一下自己在思考過程中思考的點(diǎn)和具體解釋一下這兩個(gè)參數(shù)

????首先我們來看一下LVS-DR模式的網(wǎng)絡(luò)拓?fù)鋱D,方面后續(xù)的理解

? ? ?? ?簡(jiǎn)單說一下客戶端請(qǐng)求和服務(wù)器響應(yīng)的流程,首先從客戶端發(fā)出請(qǐng)求,請(qǐng)求打到LVS的虛擬IP上,然后LVS在四層進(jìn)行一個(gè)負(fù)載均衡,從服務(wù)器集群中選擇一臺(tái)服務(wù)器來處理客戶端的請(qǐng)求,之后再由服務(wù)器自行返回響應(yīng)到客戶端。這樣LVS只負(fù)責(zé)分發(fā)請(qǐng)求,不像Nginx那樣既需要發(fā)請(qǐng)求又需要返回響應(yīng),可以說增大了整個(gè)系統(tǒng)的吞吐量,所以一般都是采用LVS + Nginx + Keepalived這樣架構(gòu),但是這種架構(gòu)一般用于自建的機(jī)房,如果是用阿里云的話有SLB,騰訊云有CLB。

?? ?? ? 那么這種LVS做Director來負(fù)責(zé)分發(fā)的模式是怎么實(shí)現(xiàn)的呢?

? ? ? ? 首先,把LVS所在的機(jī)器和服務(wù)器集群放在一個(gè)網(wǎng)段里,然后給LVS所在的機(jī)器設(shè)置一個(gè)虛擬IP(VIP),這個(gè)IP是直接設(shè)置在ens類型的網(wǎng)卡上,然后給服務(wù)器集群的每一個(gè)服務(wù)器也設(shè)置一個(gè)虛擬IP,這個(gè)虛擬IP和LVS的虛擬IP相同,但是設(shè)置在lo類型的網(wǎng)卡上,并且設(shè)置集群中服務(wù)器的arp_ignore為1和arp_announce為2以及ens類型網(wǎng)卡的請(qǐng)求轉(zhuǎn)發(fā)到lo類型的網(wǎng)卡上。

? ? ? ? 我們來一點(diǎn)點(diǎn)解釋每個(gè)設(shè)置是為了什么

1.為什么LVS和集群的服務(wù)器要放在同一網(wǎng)段里

答:這里是為了ARP協(xié)議的廣播,我們都知道,在局域網(wǎng)中,ARP才會(huì)使用廣播的形式去獲取目標(biāo)服務(wù)器的MAC地址,在公網(wǎng)或者說外網(wǎng)情況下,ARP會(huì)用網(wǎng)關(guān)轉(zhuǎn)發(fā)來獲取MAC地址。而LVS將請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器是采用把請(qǐng)求的MAC地址替換成集群服務(wù)器的MAC地址的方法,所以如果使用網(wǎng)關(guān)轉(zhuǎn)發(fā)無法實(shí)現(xiàn)。

2.為什么LVS和集群服務(wù)器的虛擬IP要保持一致以及為什么設(shè)置服務(wù)器中ens轉(zhuǎn)發(fā)lo

答:因?yàn)長(zhǎng)VS在轉(zhuǎn)發(fā)時(shí)只是替換了請(qǐng)求中的MAC地址,我們知道在請(qǐng)求頭里是同時(shí)有目標(biāo)IP和MAC地址的,此時(shí)目標(biāo)IP還是LVS的虛擬IP,如果到達(dá)服務(wù)器時(shí)發(fā)現(xiàn)IP不一致的話服務(wù)器會(huì)把請(qǐng)求丟棄。所以要保證服務(wù)器lo網(wǎng)卡的虛擬IP和LVS的虛擬IP一致,這樣LVS轉(zhuǎn)發(fā)到服務(wù)器的ens網(wǎng)卡,ens網(wǎng)卡轉(zhuǎn)發(fā)到lo,保證了請(qǐng)求不會(huì)被丟棄。

3.為什么要設(shè)置arp_ignore和arp_announce這兩個(gè)參數(shù),以及為什么要分別設(shè)置成1和2

答:首先我們需要知道這兩個(gè)參數(shù)是干嘛的

?? ?(1)arp_ignore這個(gè)參數(shù)用來設(shè)置服務(wù)器對(duì)于ARP請(qǐng)求響應(yīng)的級(jí)別,默認(rèn)是0。我們舉個(gè)例子,比如我有兩臺(tái)服務(wù)器,一臺(tái)ip是130,另一臺(tái)140機(jī)器上有兩個(gè)網(wǎng)卡接口,一個(gè)叫ens33,它的ip是140,一個(gè)叫ens44,它的ip是150。如果級(jí)別是0的話,那么130的機(jī)器向140發(fā)送ARP請(qǐng)求的話,這150也會(huì)應(yīng)答,向150發(fā)送ARP請(qǐng)求的話,140也會(huì)應(yīng)答。如果級(jí)別是1的話,向140發(fā)送ARP請(qǐng)求,只有140會(huì)應(yīng)答。向150發(fā)送ARP請(qǐng)求,只有150會(huì)應(yīng)答。

? ?(2)arp_announce這個(gè)參數(shù)用來設(shè)置發(fā)送ARP請(qǐng)求時(shí)所使用源地址IP,默認(rèn)為0。以上面為例,我第二臺(tái)服務(wù)器有兩塊網(wǎng)卡接口?,F(xiàn)在ip140通過ens44向第一臺(tái)服務(wù)器ip130發(fā)送ARP請(qǐng)求。如果級(jí)別為0,發(fā)送的ARP請(qǐng)求中源ip地址為140,mac地址為ens44的mac地址,ip和mac來自兩塊網(wǎng)卡。如果級(jí)別為2,則發(fā)送的ARP請(qǐng)求中源ip地址為150,mac地址為ens44的mac地址,也就是ip和mac來自同一塊網(wǎng)卡

? ? 那么這兩個(gè)參數(shù)在LVS中有什么用呢?

? ?(1)首先大家應(yīng)該還記得集群服務(wù)器中的虛擬IP和LVS的虛擬IP相同,我們可以想象一下,如果arp_ignore為0,并且在同一網(wǎng)段會(huì)有什么后果??蛻舳说恼?qǐng)求會(huì)直接打到我們集群的服務(wù)器上,因?yàn)榉?wù)器的虛擬IP和LVS相同,服務(wù)器也會(huì)響應(yīng)向LVS虛擬IP發(fā)送的ARP請(qǐng)求,造成負(fù)載均衡的失效。我們將arp_ignore設(shè)置成1之后,網(wǎng)卡設(shè)備只會(huì)響應(yīng)目標(biāo)ip為本身ip的ARP請(qǐng)求,所以集群中服務(wù)器的ens類型的網(wǎng)卡不會(huì)響應(yīng)lo類型網(wǎng)卡的ARP請(qǐng)求,再加上lo類型的網(wǎng)卡不會(huì)主動(dòng)響應(yīng)請(qǐng)求,所以可以達(dá)到一個(gè)ARP屏蔽的效果,只有LVS會(huì)接收客戶端的ARP請(qǐng)求。

? ?(2)用戶的請(qǐng)求由集群中的服務(wù)器處理完后,由服務(wù)器自行返回到客戶端。這時(shí)如果如果設(shè)置arp_announce為0,則可以想象到,服務(wù)器向客戶端發(fā)送ARP請(qǐng)求時(shí),ARP請(qǐng)求的源IP是虛擬IP,因?yàn)橹稗D(zhuǎn)發(fā)到服務(wù)器的lo網(wǎng)卡了,它的ip是虛擬ip。而mac地址卻是服務(wù)器的真實(shí)地址。這樣的ARP請(qǐng)求到達(dá)客戶端,客戶端會(huì)在自己的ARP緩存中填上一行虛擬IP和服務(wù)器mac地址的映射。這樣在下一次請(qǐng)求的時(shí)候,客戶端想向LVS的虛擬IP發(fā)請(qǐng)求,它去自己的ARP緩存中尋找,發(fā)現(xiàn)有集群中服務(wù)器的虛擬IP和mac地址,恰好服務(wù)器的虛擬IP和LVS的相同。所以它不會(huì)再進(jìn)行廣播,而是跳過LVS請(qǐng)求直接打到集群服務(wù)器上,導(dǎo)致負(fù)載均衡失效。將arp_announce設(shè)置成2之后,服務(wù)器向客戶端發(fā)送ARP請(qǐng)求時(shí)源IP和MAC地址都是真實(shí)ip和mac地址,就避免了這個(gè)問題

4.集群中服務(wù)器的虛擬ip一定要設(shè)置到lo么?設(shè)置成ens行不行呢。

答:可以的,通過之前的回答我們可以知道,只要能進(jìn)行ARP屏蔽就可以。之所以設(shè)置成lo是因?yàn)樗粫?huì)主動(dòng)響應(yīng)請(qǐng)求,設(shè)置成ens類型的話需要設(shè)置arp_ignore為8,也就是不接受任何ARP請(qǐng)求,這樣同樣可以達(dá)到ARP屏蔽的效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容