一、背景
項(xiàng)目背景是某企業(yè)的AAA管理系統(tǒng), AAA 即 Authentication(認(rèn)證)、Authorization(授權(quán))、Accounting(記賬),是網(wǎng)絡(luò)設(shè)備的一種集中化管理機(jī)制,可以在不同設(shè)備上為用戶設(shè)置不同的權(quán)限,對(duì)網(wǎng)絡(luò)安全起到監(jiān)視作用。
AAA服務(wù)是基于TACACS+協(xié)議(Terminal Access Controller Access Control System Plus),TACACS+是在 TACACS 協(xié)議的基礎(chǔ)上進(jìn)行了功能增強(qiáng)的安全協(xié)議,最早由Cicso提出并開放標(biāo)準(zhǔn)。該協(xié)議與 RADIUS 協(xié)議的功能類似,采用客戶端/服務(wù)器模式實(shí)現(xiàn) 網(wǎng)元與 TACACS+ 服務(wù)器之間的通信,使用TCP 49端口。
每次TACACS+ 交互主要實(shí)現(xiàn): 認(rèn)證 (Authentication): 確認(rèn)訪問網(wǎng)絡(luò)的用戶身份,判斷訪問者是否合法 授權(quán)( Authorization ): 對(duì)通過認(rèn)證的用戶,授權(quán)其可以使用哪些服務(wù) 記賬( Accounting ):記錄用戶的操作行為、發(fā)生時(shí)間
1.問題描述
系統(tǒng)架構(gòu)如下圖所示,服務(wù)器采用一主一備模式,一般情況下由Master服務(wù)器處理請(qǐng)求,如果它故障或者負(fù)荷過高、無法快速響應(yīng)請(qǐng)求,網(wǎng)元會(huì)將請(qǐng)求發(fā)送到BackUP服務(wù)器處理。AAA Server上運(yùn)行守護(hù)進(jìn)程處理請(qǐng)求,記為TACACSD。

容量計(jì)算>服務(wù)端資源需求T= 認(rèn)證請(qǐng)求規(guī)模g(n) / TACACSD運(yùn)算能力 f(n)
在很長(zhǎng)一段時(shí)間內(nèi),原有架構(gòu)可以滿足應(yīng)用需求,但是隨著集中化的深入推進(jìn),資源不足的問題日益嚴(yán)重:Master負(fù)荷早已爆滿,BackUP的負(fù)荷也幾乎與Master相當(dāng),而且請(qǐng)求從Master切換到BackUP的時(shí)候,非常容易引起失敗。 主要有三個(gè)關(guān)鍵因子的變化: 1、管理設(shè)備數(shù)量增長(zhǎng)10倍,而且還要繼續(xù)增長(zhǎng) 2、網(wǎng)絡(luò)配置自動(dòng)化,單一網(wǎng)元的巡檢、配置操作有數(shù)量級(jí)的提升
3、TACACSD程序本身存在性能瓶頸,CPU消耗隨著設(shè)備數(shù)量增長(zhǎng)而增長(zhǎng)
前兩個(gè)因素屬于業(yè)務(wù)需求,不能調(diào)整,程序性能問題涉及開發(fā)周期問題(這塊以后再單獨(dú)分析),迫于業(yè)務(wù)壓力,我們必須快速尋找一種變通方案。
2.選型要求
在選擇適用方案之前,我們必須考慮以下幾個(gè)要求:
可伸縮性(Scalability)當(dāng)服務(wù)規(guī)模(設(shè)備數(shù)量、自動(dòng)化操作次數(shù))的負(fù)載增長(zhǎng)時(shí),系統(tǒng)能被擴(kuò)展來滿足需求(彈性擴(kuò)展服務(wù)能力),且不降低服務(wù)質(zhì)量。
高可用性(Availability)盡管部分硬件和軟件會(huì)發(fā)生故障,整個(gè)系統(tǒng)的服務(wù)必須是每天24小時(shí)每星期7天可用的。(必須去除原來過于依賴單一服務(wù)器的瓶頸)
可管理性(Manageability)整個(gè)實(shí)現(xiàn)應(yīng)該易于管理,提供靈活的負(fù)載均衡策略支持。
價(jià)格有效性(Cost-effectiveness)整個(gè)實(shí)現(xiàn)是經(jīng)濟(jì)的。這個(gè)怎么說呢,比如這個(gè)問題吧,有人說:買四層交換機(jī)啊? 沒錢!宇宙上最好服務(wù)器來一臺(tái)? 沒錢!! 于是我們的主要探索方向放在了開源軟件,感謝開源社區(qū)解救窮人。
二、前戲
我們首先想到的是HAProxy,一款經(jīng)典的負(fù)載均衡開源軟件。 特別是具備以下幾個(gè)特點(diǎn):配置維護(hù)簡(jiǎn)單,支持熱備,支持后端服務(wù)器的狀態(tài)檢測(cè),可以自動(dòng)摘除故障服務(wù)器;支持TCP 代理;支持Session的保持。
tcp
The instance will work in pure TCP mode. A full-duplex connection will be established between clients and servers, and no layer 7 examination will be performed. This is the default mode. It should be used for SSL, SSH, SMTP, ...
vi haproxy.cfg
listen AAA-Cluster
mode tcp
bind 49
option tcplog
source 0.0.0.0 usesrc clientip
server AAA-Server-210 192.168.3.10:49
server AAA-Server-211 192.168.3.11:49
1.HAProxy+TProxy
當(dāng)我們滿懷希望地推進(jìn)之時(shí),一個(gè)要命的問題擺在面前:后端的AAA服務(wù)器上看到的連接的Source IP都不再是用戶原始的IP,而是前端的HAProxy服務(wù)器的IP,

官方文檔對(duì)于source調(diào)度算法的描述:
source
The source IP address is hashed and divided by the total weight of the > running servers to designate which server will receive the request. This ensures that the same client IP address will always reach the same server as long as no server goes down or up. If the hash result changes due to the number of running servers changing, many clients will be directed to a different server.