应用水平扩展, 使用Tengine 和负载均衡

193 阅读2分钟

apache vs nginx(epoll)

apache 每个请求 单独开启一个现成

nginx 每个请求使用异步处理

  • 协程在IO的地方 await 交出cpu时间片 释放出资源给其他的任务
  • 当IO处理完成后 重新获取cpu时间片 将结果返回

Tengine

nginx的加强版 官方文档 tengine.taobao.org/

  • Tengine完全兼容Nginx, 同时提供了额外的强大功能
  • 增强相关运维、监控能力,比如异步打印日志及回滚,本地DNS缓存,内存监控等;
  • 动态脚本语言Lua支持。扩展功能简单高效;
  • 更加强大的负载均衡能力,
    • 包括一致性hash模块、
    • 会话保持模块
      • 同一个请求 落到同一台机器上
  • 主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
    • nginx 必须的主动访问异常页面 才能检查出问题
  • 输入过滤器机制支持,更强大的防攻击(访问速度限制)模块;方便实现应用防火墙;

安装 Tengine

安装依赖 pcre 

wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

./configure --prefix=/usr/local/pcre && make && make install

指定pcre源码目录安装tengine

wget https://tengine.taobao.org/download/tengine-2.3.2.tar.gz 

tar zxvf tengine-2.3.2.tar.gz && cd /data/tengine-2.3.0 

./configure --prefix=/data/tengine/ --with-http_realip_module --with-http_gzip_static_module --with-pcre=/data/pcre-8.44 

make && make install

最简单配置: 路由转发请求到 Gunicorn/uWSGI 服务

image.png

负载均衡配置

image.png

  • 请求路由到两台后端服务器
    • 两台后端服务器 Upstream
    • 服务器运行 Gunicorn/uWSG
    • 单台服务器运行有两个实例

image.png

Tengine 的分流策略

  • round-robin
    • 平均分配流量:轮询模式
  • least-connected — 最少连接优先,下一个请求分到活跃连接最少的服务器
  • ip-hash
    • — 按照客户端 IP 哈希来分配服务器 IP
  • 带权重流量分配
  • 一致性哈希 (Tengine)
  • 会话保持 (Tengine 特性)

Tengine 的分流策略:最少连接优先

  • 前面配置的为平均分配流量;
  • 按照最少连接优先/ip hash 的配置:

image.png

Tengine 的分流策略:按权重分配

  • 按照权重分配(适合机器配置不一样时)
  • 6个请求里面,3个走到第一台,其它3台没台1个请求。

image.png

Tengine 的分流策略: 会话保持

  • 尽可能保证同一个客户端访问的都是同一个后端服务器

image.png

被动健康检查

被动健康检查: ngx_http_upstream_module 实现了被动的健康检查功

image.png

主动健康检查

  • 主动健康检查: http_upstream_check_module,主动定时检查

image.png