测验:上游负载均衡
开源版 nginx 的 max_fails=3 fail_timeout=30s 表示什么?
- 每 30 秒调用健康检查 URL,失败 3 次后摘除
- 处理真实请求时,30 秒内失败 3 次就把该服务器摘除 30 秒
- 3 秒无响应就重试 30 次
- 每台服务器最多允许 3 个连接
启用上游 Keep-Alive 时必须同时设置哪三项?
- keepalive, proxy_read_timeout, gzip
- keepalive, proxy_http_version 1.1, proxy_set_header Connection ""
- keepalive, ip_hash, least_conn
- keepalive, client_max_body_size, proxy_buffering
未配置上游 Keep-Alive、每个请求都新建连接,长期会出现什么症状?
- 连接对象无法回收,代理内存持续增长
- 每次都重新协商压缩,gzip 压缩率下降
- 连接建立和关闭都写日志,访问日志快速增长
- TIME_WAIT 套接字堆积,耗尽本地端口并出现间歇性连接失败
使用 ip_hash 的系统增加一台后端服务器时,应注意什么?
- 服务器数量改变会使 ip_hash 产生语法错误,reload 失败
- 新服务器没有权重,已有服务器的 weight 会被重置
- 上游配置改变会清空 SSL 会话缓存,引发集中重协商
- 哈希目标改变,部分客户端会转到其他服务器;若会话在内存中,用户会被登出
对于响应时间差异很大的服务(快速查询与慢报表混合),为什么 least_conn 比轮询更合适?
- 它能把请求数精确平均分给各服务器
- 它把请求发给当前连接较少的一侧,避开积压慢请求的服务器
- 它测量各服务器 CPU 并选择空闲方
- 它缓存平均响应时间并选择更快方
负载均衡环境为何必须在访问日志中记录 $upstream_addr?
- 缩小日志
- 计算 gzip 压缩率
- 验证 SSL 证书
- 识别只发生在某个后端的错误