运维经典案例学习之GitLab官网在线仓库SSH连接故障排查和经验总结( 八 )
HAProxy为其前端侦听器提供了一个很好的\"速率限制会话\"选项 。 配置后 , 它会限制前端将传递给后端的每秒新TCP连接数 , 并在TCP套接字上保留其他连接 。 如果传入速率超过限制(每毫秒测量) , 则新连接将被延迟 。 TCP客户端(在这种情况下为SSH)只是在建立TCP连接之前看到延迟 , 这样不会有太大影响 , 只要总体从未超过限制太长时间 。 由于Gitlab有27个SSH后端和18个HAproxy前端(16个主要 , 两个alt-ssh) , 并且前端之间没有做过速率限制优化 , 调整比较麻烦 , 必须考虑新的SSH会话需要多长时间通过身份验证:假设MaxStartups为150 , 如果auth阶段需要两秒钟 , 每秒只能向每个后端发送75个新会话 。 计算速率限制需要四个数量:两种服务器类型的数量 , MaxStartups的值和T , 这是SSH会话进行身份验证所需的时间 。 T值很关键 , 但只能估计 。 最后配置为每个前端的速率限制大约为112.5 , 并向下舍入到110 。
调整部署后 , 一切都OK了?错误连接数应该为零 , 但是 , 实际上 , 这个配置并没有对错误率有明显影响 。 陷入深深的沉思 , 一定错过了了啥!
所以回到日志(最终是HAProxy指标) , 确保能够验证速率限制是否生效了 , 并且历史显示这个数字已经更高 , 所以成功地约束了发送连接的速率 。 但显然这个比率仍然太高 , 它还不足以接近正确的数字 , 以产生可衡量的影响 。
推荐阅读
- Ansible自动化运维
- 数据库紧急修复中 微盟系统遭遇自家核心运维破坏
- 爬虫学习之HttpClient练习
- 爬虫学习之HTTP协议初步了解
- 正则表达式学习之替换分组练习
- 正则表达式学习之分割字符及数量词练习
- Scala学习之基础函数
- Scala学习之数据类型和变量
- 编程学习之亲密数(C++描述)
- 企业级IT系统运维者如何才能体现真正价值?