equalize補丁可以解決路由的負載均衡問題,然而其實現的代價卻是禁用了均衡路由的快取,每次都要查詢路由表,查詢路由表的開銷抵消了一部分負載均衡帶來的效能提公升。因此最好的方法就是既實現了路由的負載均衡,又實現了路由快取,實現思路如下:
為每一系列需要在其間做負載均衡的路由準備乙個均衡鍊錶t,新增路由的時候鏈結在一起,核心進行下列動作:
1.資料到來,如果快取中沒有找到路由則在路由表中查詢路由
2.如果在快取中找到了路由,但是該路由需要均衡,則按照均衡策略選擇一條路由
2.1.最簡單的方式就是輪轉策略,在鍊錶中依次使用各個路由
然而這樣做會導致乙個問題,那就是快取中到底快取均衡路由的哪一條呢?事實上,由於它們是雙向鍊錶(list_head)彼此鏈結在一起的,隨便存一條就可以了,在快取中查詢的時候,只要發現一條就帶有均衡標誌的,那麼就緊接著遍歷鍊錶上的所有路由,只要鍊錶中有一條命中,就說明快取命中,然後再根據均衡策略進行最終路由的選擇。
以上的方法實現地比較簡單,不是很和諧,並且如何將所有需要均衡的路由鏈結在一起也是個問題,如果是基於linux修改的話,就要大量修改源**。事實上,可以通過netfilter來實現,首先自定義乙個鏈,然後實現乙個target,這條自定義的鏈上新增所有的需要做負載均衡的路由,target中實現均衡策略最終選擇出一條路由,可以使用快取,如果均衡路由很少的話也可以不使用快取,反正怎麼實現都行,只要按照netfilter的介面來即可,這就實現了一種層次化的設計,但是還是需要修改源**,我們將這個hook掛載在prerouting上,然後新增乙個標誌,如果netfilter找到了均衡路由,那麼就設定這個標誌,然後在路由模組中一旦查詢到這個標記就不再按照常規的方式查詢路由了(注意,不能用norouting標誌)。需要注意的是,這種方式暫時還不能用於本地輸出的包,因為output這個hook點是在路由之後進行的。
網路層IP路由的負載均衡實現思路
equalize補丁可以解決路由的負載均衡問題,然而其實現的代價卻是禁用了均衡路由的快取,每次都要查詢路由表,查詢路由表的開銷抵消了一部分負載均衡帶來的效能提公升。因此最好的方法就是既實現了路由的負載均衡,又實現了路由快取,實現思路如下 為每一系列需要在其間做負載均衡的路由準備乙個均衡鍊錶t,新增路...
IP層負載均衡
首先讓我們來看看下面這張大家都非常熟悉的tcp ip協議族的分層圖 關於每層在網路資料報傳輸過程中所起到的作用不是本文的重點,本文主要是講解如何在網路層中使用ip來做伺服器集群的負載均衡,為什麼可以在這一層來做負載均衡。下面在來看ip協議的報頭格式 內紅色框內的源位址和目的位址是ip負載均衡功能的關...
負載均衡總結 四層負載均衡和七層負載均衡的區別
一 四層負載和七層負載的對比 在osi七層模型的第4層工作,即tcp層,其不會理解上層的協議如 http ftp等.由上圖,在四層負載裝置中,把client傳送的報文目標位址 原來是負載均衡裝置的ip位址 根據均衡裝置設定的選擇web伺服器的規則選擇對應的web伺服器ip位址,這樣client就可以...