Lvs羣集DR模式處理請求流程爲:客戶端訪問vip發送請求到調度器,調度器根據算法分配到後方節點,然後由後方節點直接吧請求結果反饋給客戶。
調度器在收到請求時根據算法發送到後方節點,在發送時調度器只修改目標mac地址,別的不動
那麼問題就產生了客戶端發送請求時訪問的是調度器vip的地址,後方節點怎麼能處理呢?
所以要在每個節點的迴環接口上設置一個一模一樣的vip。(只能設置在迴環幾口上lo那個接口)
那麼問題又來了每個上面都有vip當路由器收到這個請求後到底給誰呢給調度器,還是給後方節點,因爲每個上面都有這個ip地址。
所以這就需要我們手動設置一下內核參數,調整arp請求使後方節點不接收針對vip的arp請求,由前端的調度器處理。
當後端節點返回給客戶數據時,需要經過路由器轉發出去,後方節點使用源ip(vip地址),以及後方節點的mac地址發送到路由以後,路由器看到原來記錄的vip地址與mac地址與這次的不一樣會更新arp表,更新完以後當再有客戶發送來請求時,會根據更改後的arp表直接發送給後方的節點二跳過調度器,這樣調度器就是失效瞭如何解決呢?
所以這時還需要調整內核參數對節點服務器進行修改:系統不使用源ip(vip)進行發送請求完以後的數據而是採用本地的IP地址進行發送。這樣路由器的arp表就不會進行更新了。
好了說了這麼多到底如何進行調整呢?
在節點服務器的內核配置文件中添加下面四行即可
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
在末行添加這幾行內容
[root@bogon ~]# vim /etc/sysctl.conf