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

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

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

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

場景背景與需求

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

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

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

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

場景分析

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

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

假設(shè)兩個網(wǎng)卡eth0,eth1分別配置10.1.1.5/24與10.1.1.6/24. 則會產(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


如果不同客戶端通過這兩個IP進來訪問不同的服務(wù)。進來會從不同網(wǎng)卡進,但回去時就會都從eth0回去(因為路由會從上往下讀取,所以默認只會讀上面一條)

測試實驗:

1、準備一個虛擬機模擬服務(wù)器,開兩個網(wǎng)卡,都為同一個網(wǎng)絡(luò), 配置兩個同網(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、 用另一臺機器模擬客戶端,使用ping來訪問以上2個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é)議原理, 訪問哪個IP它才會回應(yīng)mac地址。

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

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

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    # 用此命令讓其生效

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

4、再次客戶端測試

client# arp -d 10.1.1.5

client# arp -d 10.1.1.6


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

最終結(jié)果:

客戶端只能ping通10.1.1.5了, ping不通10.1.1.6了(這就對了,因為一臺機器雙網(wǎng)卡同網(wǎng)段會路由沖突)


這個實驗就驗證了場景中的情況:

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

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


場景解決方案

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

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

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

策略路由的做法也非常簡單,在服務(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兩個路由表

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

場景總結(jié)與經(jīng)驗值

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

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

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

猜你喜歡

如何安裝配置Supervisor?


分享到:
在線咨詢 我要報名
和我們在線交談!