keepalived https健康检查性能优化

来源:互联网 发布:ajax datatype json 编辑:程序博客网 时间:2024/05/20 05:08

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

0 0
原创粉丝点击