动态upstream管理

Consul介绍

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。
它具备以下特性:

  • 分布式、高可用、可横向扩展
  • 服务发现
    consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。
  • 健康检测
    consul的client提供了健康检查的机制, 可以通过用来避免流量被转发到有故障的服务上。
  • Key/Value存储
    应用程序可以根据自己的需要使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口, 结合其他工具可以实现动态配置,功能标记,领袖选举等等功能。
  • 多数据中心
    Consul支持开箱即用的多数据中心,用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

consul.png

Etcd

etcd是一个分布式可靠的键值存储系统。
它具备以下特性:

  • 简单
    curl命令可以调用的API接口(http+JSON)
  • 保密
    可选的SSL客户端认证
  • 快速
    标准检测每个实例每秒1000读写能力
  • 可靠
    恰到地实现分布式协调,采用Raft一致性算法

Upsync介绍

upsync是微博开源的基于nginx的动态流量管理方案. github地址: https://github.com/weibocom/nginx-upsync-module.

nginx-upsync-module,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。 consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。

Upsync最新版本是支持ectd。

Upsync工作流程

upsync.png

  1. 每个Work进程定时的去Consul拉取相应upstream的配置,若Consul发现对应upstream的值没有变化,便会hang住这个请求五分钟(默认值)。在这五分钟内对此upstream的任何操作,都会立刻返回给Nginx对相应路由进行更新。
  2. upstream变更后,除了更新Nginx的缓存路由信息,还会把本upstream的后端server列表dump到本地,保持本地server信息与consul的一致性。
  3. 除了注册/注销后端的server到consul,会更新到Nginx的upstream路由信息外,对后端server属性的修改也会同步到nginx的upstream路由。

Upsync模块支持修改的属性

属性 说明
weight 服务器权重,默认为1。修改权重可以动态的调整后端的流量。
max_fails 最大尝试失败次数,默认为1,将其设置为0可以关闭检查。
fail_timeout 失效时间,默认为10秒。在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用。
down 标记服务器处于离线状态。1:离线;0:在线。

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
0%