天天看點

LVS 之 RS 檢測機制調整

這是好幾周前處理的一個問題了,現在記錄下來備忘;

問題是這樣的,我們的服務節點(RS:real service)一個機房是多個的,放在LVS下進行轉發;當所有RS順序重新開機(服務重新開機時間比較長,超過一分鐘,如果時間很短就沒有接下來操作的必要了)的時候,調用LVS的PHP節點會發生短時間内大量的逾時請求,找了下原因:

LVS通過TCP_CHECK來判斷RS是否有效,一般每過3s check一次,超過5次(3s和5次都是可配置的)發現該RS無效之後就暫時把這個節點從LVS摘除;了解了LVS check機制就會發現,當某個RS重新開機的時候,期間3s*5(大約)的時間内LVS都還會把請求轉發給該RS,導緻前端出現大量的請求堆積和逾時,這段時間之後LVS判斷RS失效後就不會把請求轉發給該RS了;

怎麼解決這個問題?我這裡找了一個簡單的方法:

在RS重新開機之前就告知LVS該服務暫時關閉,顯然TCP_CHECK方式就無法通知的,是以這裡就改用了HTTP_CHECK的方式,LVS通過判斷該RS下辨別檔案的MD5值來判斷該RS是否有效。接下來做法就非常簡單了,重新開機之前先将修改辨別檔案,LVS判斷RS辨別檔案MD5值比對不上(這裡check時間現在也是3s*5)就會使RS失效,RS隻要等待一小段時間(超過3s*5,我這裡設定的30s,這個時候重新開機LVS已經不會将請求轉發給該RS了)再重新開機即可,期間(修改标志檔案到重新開機之前這段時間)LVS分發給RS請求還能照常處理,等RS重新開機完了之後再将标志檔案重置為正常的标志檔案,就不會再出現之前的問題了。

繼續閱讀