本项目中对于网关的要求:
1.流量控制
2.灰度发布
3.负载均衡
4.服务上线、下线不停服务,不影响正常业务的运行
网关架构图如下:
采用nginx+nginx-upsync-module+consul实现
nginx版本:1.9.2
consul版本:1.2.0
1.安装consul
将下载的consul_1.2.0_linux_amd64.zip解压后放到/usr/local/consul/目录下
2.启动consul:
./consul agent -server -bootstrap-expect=1 -data-dir=/data/consul_data -node=192.168.10.112 -bind=192.168.10.112 -config-dir=/etc/consul.d -client 0.0.0.0 -ui
agent:运行一个consul代理。
-server :切换代理到服务器模式。
-bootstrap :将服务器设置为引导模式。
-ui:启用内置的静态web UI服务器。
-data-dir:路径到数据目录存储代理状态。
-bind:设置集群通信的绑定地址。
-client:设置用于绑定客户端访问的地址。这包括RPC、DNS、HTTP和HTTPS(如果配置)。
-node:此节点的名称。 在集群中必须是唯一的,如果你运行第2台consul,可以写trade_server02、trade_server03等。
3.访问consul:
http://192.168.10.112:8500/ui
4.配置服务:
key/Value中增加两个服务列表,路径upstreams/itms/
6.nginx安装
nginx安装需要编译nginx-upsync-module:服务发现模块
7.nginx&upstream配置
nginx从consul的数据中心抓取。新的upstream配置如下:
upstream itms {
# fake server otherwise ngx_http_upstream will report error when startup
# 后端使用consul存储
upsync 192.168.10.112:8500/v1/kv/upstreams/itms upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
include /usr/local/nginx/conf/servers/servers_test.conf;
}
服务转发:
location /trade {
proxy_pass http://itms;
}
查询服务列表:
location = /upstream_show {
upstream_show;
}
8.测试
配置consul服务下的值测试
{"weight":12,"max_fails":2,"fail_timeout":10,"down":0}
1.down为 1表示单前的server暂时不参与负载,0表示参与
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。