转载请注明出处: 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升高。

本文探讨了线上环境中LVS使用keepalived进行https健康检查时遇到的CPU利用率高问题。主要原因是SSL连接的握手阶段消耗过多资源。通过线下测试,优化后CPU使用率显著下降,但每隔300秒因后端Nginx SSL session超时导致CPU飙升,这提示我们需要调整session超时设置以维持稳定性能。

5201

被折叠的 条评论
为什么被折叠?



