首頁(yè)技術(shù)文章正文

服務(wù)器多網(wǎng)卡服務(wù)策略【linux云計(jì)算機(jī)+運(yùn)維開發(fā)】

更新時(shí)間:2020-04-30 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

場(chǎng)景背景與需求

某公司新買一臺(tái)服務(wù)器, 服務(wù)器資源(cpu,內(nèi)存,硬盤)比較多,并且有多個(gè)網(wǎng)卡。

運(yùn)維工程師為了節(jié)省資源,在服務(wù)器上搭建多個(gè)服務(wù),希望通過多個(gè)網(wǎng)卡實(shí)現(xiàn)流量分流。

但由于運(yùn)維工程師對(duì)網(wǎng)絡(luò)理解不夠深入,將服務(wù)器的多個(gè)網(wǎng)卡都配置了同一個(gè)網(wǎng)段。

最后的結(jié)果是并不能正常的訪問這多個(gè)服務(wù)。推薦了解黑馬程序員linux云計(jì)算+運(yùn)維開發(fā)培訓(xùn)課程。

場(chǎng)景分析

·網(wǎng)卡設(shè)置了IP地址后,會(huì)產(chǎn)生一個(gè)與IP地址同網(wǎng)段的路由條目, 并與當(dāng)前網(wǎng)卡名對(duì)應(yīng)。

·如果多個(gè)網(wǎng)卡設(shè)置同網(wǎng)段IP地址后,會(huì)產(chǎn)生多個(gè)同網(wǎng)段的路由條目,并與不同網(wǎng)卡名對(duì)應(yīng)。

假設(shè)兩個(gè)網(wǎng)卡eth0,eth1分別配置10.1.1.5/24與10.1.1.6/24. 則會(huì)產(chǎn)生以下路由

10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1


如果不同客戶端通過這兩個(gè)IP進(jìn)來訪問不同的服務(wù)。進(jìn)來會(huì)從不同網(wǎng)卡進(jìn),但回去時(shí)就會(huì)都從eth0回去(因?yàn)槁酚蓵?huì)從上往下讀取,所以默認(rèn)只會(huì)讀上面一條)

測(cè)試實(shí)驗(yàn):

1、準(zhǔn)備一個(gè)虛擬機(jī)模擬服務(wù)器,開兩個(gè)網(wǎng)卡,都為同一個(gè)網(wǎng)絡(luò), 配置兩個(gè)同網(wǎng)段IP。

server# ip addr |grep eth -A 1

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:41:e4:22 brd ff:ff:ff:ff:ff:ff

    inet 10.1.1.5/24 brd 10.1.1.255 scope global br0

eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:39:c0:e6 brd ff:ff:ff:ff:ff:ff

    inet 10.1.1.6/24 brd 10.1.1.255 scope global eth1

2、 用另一臺(tái)機(jī)器模擬客戶端,使用ping來訪問以上2個(gè)IP。

client# ip neigh |grep -E "^10.1.1.5 |^10.1.1.6 "

10.1.1.5 dev eth0 lladdr 52:54:00:41:e4:22 REACHABLE

10.1.1.6 dev eth0 lladdr 52:54:00:41:e4:22 REACHABLE

說明:

·按照arp協(xié)議原理, 訪問哪個(gè)IP它才會(huì)回應(yīng)mac地址。

·而現(xiàn)在的結(jié)果是mac地址都為10.1.1.5對(duì)應(yīng)的mac地址。

·這是因?yàn)閘inux系統(tǒng)內(nèi)核參數(shù)默認(rèn)做了設(shè)置, 訪問同臺(tái)機(jī)器的網(wǎng)卡IP,如果這個(gè)網(wǎng)卡掛了,另外一個(gè)同網(wǎng)段的網(wǎng)卡會(huì)幫助回應(yīng)??梢员扔鞒?張三,李四兩個(gè)網(wǎng)卡同一臺(tái)機(jī)器,就是一家人,找張三,張三回,找李四,也張三回)

3、在服務(wù)器上修改內(nèi)核參數(shù)

server# vim /etc/sysctl.conf     # 添加以下參數(shù)

net.ipv4.conf.eth0.arp_ignore = 1

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.eth1.arp_ignore = 1

net.ipv4.conf.eth1.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

server# sysctl -p    # 用此命令讓其生效

說明: 這幾個(gè)參數(shù)的目的就是把上面的一家人(張三又回應(yīng)張三也回應(yīng)李四)的情況變成了原本的arp情況(張三只能回張三,李四只能回李四)

4、再次客戶端測(cè)試

client# arp -d 10.1.1.5

client# arp -d 10.1.1.6


說明: arp -d可清除arp協(xié)議訪問的mac地址緩存。建議清除再測(cè)試

最終結(jié)果:

客戶端只能ping通10.1.1.5了, ping不通10.1.1.6了(這就對(duì)了,因?yàn)橐慌_(tái)機(jī)器雙網(wǎng)卡同網(wǎng)段會(huì)路由沖突)


這個(gè)實(shí)驗(yàn)就驗(yàn)證了場(chǎng)景中的情況:

服務(wù)器多網(wǎng)卡同網(wǎng)段,客戶端從不同網(wǎng)卡IP訪問進(jìn)來,卻都從第1個(gè)網(wǎng)卡回應(yīng)

如果修改內(nèi)核參數(shù),則客戶端只能訪問第一張網(wǎng)卡的服務(wù)。


場(chǎng)景解決方案

如果以上場(chǎng)景已經(jīng)發(fā)生,如何解決?

·將多網(wǎng)卡改成不同網(wǎng)段IP(這樣做可能項(xiàng)目要修改的工作量很大,很多配置要重配)

·通過策略路由來解決(不需要修改IP,只需要添加路由表將多個(gè)網(wǎng)卡流量分開)

策略路由的做法也非常簡(jiǎn)單,在服務(wù)器上做以下操作。

server# echo 100 server1 >> /etc/iproute2/rt_tables 

server# echo 200 server2 >> /etc/iproute2/rt_tables 


server# ip rule add from 10.1.1.5 table server1

server# ip rule add from 10.1.1.6 table server2


server# ip route add default via 10.1.1.5 table server1

server# ip route add default via 10.1.1.6 table server2

說明:

增加了server1與server2兩個(gè)路由表

兩個(gè)路由表里的規(guī)則為訪問10.1.1.5將由10.1.1.5回應(yīng),訪問10.1.1.6將由10.1.1.6回應(yīng)

場(chǎng)景總結(jié)與經(jīng)驗(yàn)值

此解決方案主要是用到了linux上的多路由表功能。

工作中物理服務(wù)器與虛擬機(jī)有多網(wǎng)卡時(shí)都不要犯這種多網(wǎng)卡同網(wǎng)段的錯(cuò)誤。

如果真的需要用到多服務(wù)隔離的話,可考慮虛擬化或容器化環(huán)境。

猜你喜歡

如何安裝配置Supervisor?


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!