keepalived https健康檢查效能優化
阿新 • • 發佈:2019-01-26
轉載請註明出處: http://blog.csdn.net/hliyuxin/article/details/43018309
之前線上LVS如果https健康檢查的rs 配置較多,會出現cpu利用率高的問題。通過工具測試發現,整個https健康檢查過程中,cpu耗時主要發生在SSL_connect()函式上,也就是握手階段。
下面我們來看ssl協議,主要有以下幾個步驟:1. Client -> Server:Client Hello
2. Server -> Client:Server Hello, Certificate, Server Hello Done
3. Client -> Server:Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
4. Server -> Client:Change Cipher Spec, Encrypted Handshake Message
5. Client -> Server:Application data
6. Server -> Client:Application data
在這幾個階段中,演算法複雜度最高的就是第3步,這一步也是整個ssl協議中的關鍵,這一步是客戶端使用伺服器的公鑰加密,將生成的會話金鑰傳給伺服器。這個加密方式是非對稱加密演算法(RSA或DH),非對稱加密有致命的缺點就是加解密效率太低,很少應用在實際通訊中應用,所以SSL協議只在握手階段使用,用於協商傳輸階段的對稱金鑰。
所以,要提高https健康檢查的效能,首先需要減少交換會話金鑰的動作,因為ssl會話有reuse的功能,所以我們對每個rs的健康檢查,儲存一個ssl_session的資料結構,每次通訊儘量reuse上一次發起健康檢查的session。
線上下環境進行了測試,keepalived使用rr演算法,配置2540個rs,使用https健康檢查。測試結果如下:
圖中可以看出,CPU使用率在優化之後有了很大的改善,但是隔300s又有一次飆高,這是由於後端nginx中ssl
session的預設超時時間是5min, 超時之後要重新協商key, 引發cpu升高。