楊衛(wèi)中 王軍利
傳統(tǒng)的linux主機(jī)在做網(wǎng)絡(luò)配置時(shí),主要采用bond方式,模式一般采用mode=1,實(shí)現(xiàn)鏈路冗余的目標(biāo)。本文主要針對(duì)redhat的鏈路聚合技術(shù)的應(yīng)用和實(shí)踐,實(shí)現(xiàn)鏈路冗余的同時(shí),主機(jī)單側(cè)交換機(jī)速率將由原有10GB提升至20GB主備鏈路從而達(dá)到IO性能翻倍的目標(biāo)。
2019年是高質(zhì)量發(fā)展、提升客戶感知的一年。 BSS3.0成功上線讓原IT架構(gòu)由集中式升級(jí)為分布式,應(yīng)用模型和基礎(chǔ)設(shè)施架構(gòu)較之前發(fā)生了巨大變化,如何讓主機(jī)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)等基礎(chǔ)設(shè)施更好為上層應(yīng)用提供支撐,如何提升基礎(chǔ)設(shè)施性能就成為一個(gè)必須解決的課題。
在去IOE的背景下眾多oracle數(shù)據(jù)庫(kù)業(yè)務(wù)已經(jīng)從小型機(jī)遷移到了X86架構(gòu)上,并且完成了向Oracle12c的版本升級(jí)。隨著數(shù)據(jù)庫(kù)新特性的增加以及業(yè)務(wù)量的增長(zhǎng),數(shù)據(jù)庫(kù)主機(jī)的網(wǎng)絡(luò)帶寬面臨嚴(yán)峻的壓力。
為了更好的支撐業(yè)務(wù)需求,主流做法是采用萬(wàn)兆交換機(jī)接入。數(shù)據(jù)庫(kù)主機(jī)業(yè)務(wù)端口分別連接兩臺(tái)萬(wàn)兆交換機(jī),將單側(cè)鏈路的帶寬提升至10Gbps,同時(shí)為了保證高可用性,會(huì)在主機(jī)層面采用網(wǎng)絡(luò)組的方式對(duì)鏈路做捆綁,即配置Bond,一般情況下會(huì)采用Mode=1(active-backup)的模式,即主備模式,兩個(gè)10Gbps端口為主備工作方式,端口匯聚后流量經(jīng)過(guò)主用端口轉(zhuǎn)發(fā),當(dāng)主用端口故障后會(huì)切換備用端口,且端口匯聚后速率仍10Gbps。在前期的時(shí)候這樣的速率是充分滿足生產(chǎn)需求的,但是隨著新特性的增加、新業(yè)務(wù)量的增長(zhǎng)、備份策略的調(diào)整,10Gbps的帶寬速率已經(jīng)無(wú)法滿足當(dāng)前Oracle數(shù)據(jù)庫(kù)大流量的生產(chǎn)需求,尤其是PDB(Pluggable Databases)的數(shù)據(jù)庫(kù)遷移。為了解決端口流量帶寬問(wèn)題,需要對(duì)Oracle主機(jī)進(jìn)行網(wǎng)絡(luò)端口擴(kuò)容,從原來(lái)的10Gbps帶寬提升至20Gbps。
(一)當(dāng)前主機(jī)環(huán)境
操作系統(tǒng):Red Hat Enterprise Linux 7.5 X86_64
數(shù)據(jù)庫(kù)版本:Oralce12cforLinux
網(wǎng)絡(luò)配置:每臺(tái)主機(jī)配置4個(gè)10Gbps網(wǎng)口接口,分別兩臺(tái)萬(wàn)兆業(yè)務(wù)交換機(jī)和兩臺(tái)萬(wàn)兆心跳交換機(jī)。主機(jī)采用Bonding 內(nèi)核模塊Mode=1(active-backup)的方式配置主備鏈路從而達(dá)到高可用性要求。
(二)優(yōu)化后主機(jī)環(huán)境
操作系統(tǒng):Red Hat Enterprise Linux 7.5 X86_64
數(shù)據(jù)庫(kù)版本:Oralce12cforLinux
網(wǎng)絡(luò)配置:每臺(tái)主機(jī)配置6個(gè)10G b p s網(wǎng)口接口,使用4個(gè)端口分別接入兩臺(tái)萬(wàn)兆業(yè)務(wù)交換機(jī),剩余的2個(gè)端口接入兩臺(tái)萬(wàn)兆心跳交換機(jī)。主機(jī)采用teamdMode=4(802.3ad)的方式配置和交換機(jī)的聚合LACP方式配合單側(cè)交換機(jī)速率將由原有10GB提升至20GB主備鏈路從而達(dá)到高可用性要求。
(一)了解網(wǎng)絡(luò)成組
聯(lián)合或合并網(wǎng)絡(luò)連接,以提供具有較高吞吐量的本地連接或冗余的方式可稱為“頻道綁定”、“以太網(wǎng)綁定”、“端口聚合”、“頻道成組”、“NIC 成組”、“鏈接合并”等等。這個(gè)最初在 Linux 內(nèi)核中應(yīng)用的概念泛指“綁定”?,F(xiàn)使用網(wǎng)絡(luò)成組(Network Teaming)代表這個(gè)概念的最新應(yīng)用。
網(wǎng)絡(luò)成組或成組旨在通過(guò)提供小內(nèi)核驅(qū)動(dòng)程序,以便使用不同的方法應(yīng)用這個(gè)概念,實(shí)現(xiàn)數(shù)據(jù)包流的快速處理,并讓各種用戶空間應(yīng)用程序在用戶空間執(zhí)行各種任務(wù)。該驅(qū)動(dòng)程序有一個(gè)應(yīng)用程序編程接口(API),即“成組 Netlink API”,可使用該接口進(jìn)行 Netlink 通訊。用戶空間程序庫(kù)使用這個(gè) API 與該驅(qū)動(dòng)程序通訊。庫(kù)指的是“l(fā)ib”,可用來(lái)進(jìn)行成組 Netlink 通訊及RT Netlink信息在用戶空間的換行。同時(shí)還提供應(yīng)用程序守護(hù)進(jìn)程teamd 使用 Libteam 庫(kù)。teamd 的實(shí)例可控制成組驅(qū)動(dòng)程序中的實(shí)例。該守護(hù)進(jìn)程通過(guò)使用附加代碼(即“運(yùn)行程序”)采用負(fù)載平衡及 active-backup 邏輯(比如輪詢)。通過(guò)使用這個(gè)方式分離代碼,可方便網(wǎng)絡(luò)成組對(duì)負(fù)載平衡及冗余要求的擴(kuò)展及延伸解決方案。例如:使用teamd 編寫自定義運(yùn)行程序應(yīng)用新的邏輯可相對(duì)簡(jiǎn)單,即使 teamd 為自選程序,用戶仍可編寫其自己的應(yīng)用程序以便使用 libteam。
teamdctl 提供一個(gè)用來(lái)控制使用 D-bus 運(yùn)行 teamd實(shí)例的工具。它可為 teamd D-Bus API 提供 D-Bus 換行程序。默認(rèn)情況下,teamd 使用 Unix 域套接字(Unix Domain Socket)進(jìn)行偵聽(tīng)和通訊,但仍監(jiān)控 D-Bus。這樣做是保證能夠在沒(méi)有 D-Bus 或者尚未載入 D-Bus 的環(huán)境中使用 teamd。例如:引導(dǎo) teamd 鏈接時(shí)不一定載入D-Bus??稍谶\(yùn)行時(shí)使用 teamdctl 工具讀取配置、連接監(jiān)控程序狀態(tài)、端口狀態(tài)檢查及變更、添加和刪除端口以及將端口狀態(tài)在 active 和 backup 狀態(tài)間切換。
成組 Netlink API 通信使用 Netlink 信息與用戶空間應(yīng)用程序通訊。用戶空間庫(kù) libteam 不會(huì)直接與這個(gè) API互動(dòng),但會(huì)使用 libnl 或 teamnl 與驅(qū)動(dòng)程序 API 互動(dòng)。
總之,不會(huì)直接配置或控制內(nèi)核中運(yùn)行的成組驅(qū)動(dòng)程序?qū)嵗?。所有配置均采用用戶空間應(yīng)用程序完成,比如 teamd 程序。然后該程序會(huì)根據(jù)需要指向內(nèi)核驅(qū)動(dòng)程序。
(二)端口聚合目標(biāo)
將原有bond端口聚合模式變更為teamd聚合模式,并且將原有業(yè)務(wù)聚合的2個(gè)端口拓展至4個(gè)端口,業(yè)務(wù)端口速率由10GB拓展至20GB。
(三)teamd原理
Teamd和bond0功能類似,redhat7之前沒(méi)有teamd,在redhat7.0以上版本中網(wǎng)絡(luò)方面的相關(guān)服務(wù)被NetworkManager所接管,所以在配置多網(wǎng)卡綁定時(shí),redhat專門提供了teamd工具來(lái)實(shí)現(xiàn)多網(wǎng)卡的綁定。Teamd不需要手動(dòng)加載相應(yīng)內(nèi)核模塊,具有更強(qiáng)的拓展性。
Teamd的種類:
broadcast(可將數(shù)據(jù)傳送到所有端口)
round-robin(可按順序?qū)?shù)據(jù)傳送到所有端口)
active-backup(使用一個(gè)端口或鏈接時(shí)其他則處于備用狀態(tài))
loadbalance(使用主動(dòng) Tx 負(fù)載平衡及基于 BPF 的Tx 端口選擇程序)
lacp(采用 802.3ad 鏈接合并控制協(xié)議)
此外還可使用以下鏈接監(jiān)視程序:
ethtool(Libteam lib 使用 ethtool 監(jiān)視鏈接狀態(tài)變化)。若沒(méi)有在配置中指定其他鏈接監(jiān)控程序,則默認(rèn)使用該程序。
arp_ping(使用 arp_ping 程序監(jiān)控使用 ARP 數(shù)據(jù)包的遠(yuǎn)端硬件地址狀態(tài)。)
nsna_ping(使用 IPv6 鄰居發(fā)現(xiàn)協(xié)議中的的鄰居播發(fā)和鄰居請(qǐng)求給你監(jiān)控鄰居的接口狀態(tài)。)
(四) 配置思路
停止oracle數(shù)據(jù)庫(kù)相關(guān)服務(wù)。每臺(tái)數(shù)據(jù)庫(kù)主機(jī)增加一塊新的2-port萬(wàn)兆網(wǎng)卡。每臺(tái)數(shù)據(jù)庫(kù)主機(jī)拓展兩個(gè)10GB業(yè)務(wù)端口。將每臺(tái)數(shù)據(jù)庫(kù)主機(jī)上聯(lián)的四個(gè)業(yè)務(wù)端口使用LACP做端口聚合。為每臺(tái)主機(jī)安裝teamd軟件并將網(wǎng)口聚合模式由bond更改為teamd。如果是現(xiàn)網(wǎng)主機(jī)改造,需要注意聚合后的接口名稱需要與原來(lái)的bond方式保持一致,否則數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)。全新配置的數(shù)據(jù)庫(kù)主機(jī)不存在此問(wèn)題。測(cè)試業(yè)務(wù)可用性,檢查Aggregate ID配置是否正確。啟用oracle數(shù)據(jù)庫(kù)服務(wù)。
(一)性能提升:可靠性、穩(wěn)定性、IO性能
業(yè)務(wù)端口聚合后,對(duì)端口流量帶寬進(jìn)行測(cè)試,通過(guò)觀察測(cè)試結(jié)果,4個(gè)業(yè)務(wù)端口通過(guò)teamd做聚合后,流量帶寬達(dá)到20GB甚至更高,是原來(lái)的2倍。
原單鏈路升級(jí)為多鏈路,網(wǎng)絡(luò)、鏈路都有多份冗余,可靠性和穩(wěn)定性比傳統(tǒng)網(wǎng)絡(luò)有成倍的提升。
前端業(yè)務(wù)感知為:業(yè)務(wù)辦理等提交的工單更快入庫(kù),數(shù)據(jù)查詢達(dá)到實(shí)時(shí)回應(yīng)。
(二)架構(gòu)優(yōu)化
該成果應(yīng)用后,無(wú)需單獨(dú)另外部署備份網(wǎng)絡(luò),由SAN(光纖網(wǎng)絡(luò))備份升級(jí)為L(zhǎng)AN(IP網(wǎng)絡(luò))備份,節(jié)省了機(jī)房空間、網(wǎng)絡(luò)布線、設(shè)備投資等多方資源。
原san網(wǎng)絡(luò)需要特有的光纖交換機(jī)、om3規(guī)格的光纖,每次項(xiàng)目上線均需3個(gè)月甚至更久時(shí)間,采用新的架構(gòu)后,數(shù)據(jù)備份等需求可根據(jù)需要在1天內(nèi)完成,時(shí)間成本是原來(lái)的1%左右。為前端業(yè)務(wù)提供了更為優(yōu)化的服務(wù)。
(一)商業(yè)價(jià)值
該成果被成功推廣后,原有SAN(光纖網(wǎng)絡(luò))備份方式將升級(jí)為L(zhǎng)AN(IP網(wǎng)絡(luò))備份方式,備份網(wǎng)絡(luò)將發(fā)生很大變化。新購(gòu)SAN設(shè)備、光纖布線、機(jī)房空間等一系列工作將不再是棘手問(wèn)題,底層數(shù)據(jù)備份等工作項(xiàng)目時(shí)間可由原來(lái)3個(gè)月甚至更久變?yōu)?周或1天完成,時(shí)間、人力等成本有明顯降低。
(二)技術(shù)價(jià)值
Teamding功能主要由kernel里的teamd driver、用來(lái)作為通訊接口的libteamd lib和userspace的teamdd 三部分組成,teamding也支持不同的工作模式。
實(shí)質(zhì)上teamding的目的就是要把網(wǎng)卡綁定的功能從kernel里搬出來(lái),把這些功能放到userspace來(lái)解決,保持kernel的簡(jiǎn)潔,讓它只做kernel應(yīng)該做的事情。
采用teamd端口聚合具有以下幾個(gè)方面價(jià)值體現(xiàn):
1. 最多支持8塊網(wǎng)卡聚合
2. 更好的冗錯(cuò)性
3. 提高吞吐量
4. 具有更好的性能以及擴(kuò)展性
作者單位:中國(guó)電信股份有限公司河南分公司