概述
上文我们使用了consul作为服务注册和发现中间件,然后将namerd配置为由consul来进行服务查询。但是路由规则dtab仍然存储在namerd的内存中,每次重启namerd之后都需要通过namerctl来创建规则。接下来我们示例如何将dtab路由规则存储到consul kv中。
Namerd配置
1、修改namerd.yaml配置文件
$ vi config\namerd.yaml
storage:
# storage配置,将inMemory改为consul
# kind: io.l5d.inMemory
kind: io.l5d.consul
#consul host
host: 127.0.0.1
#consul port
port: 8500
#在consul kv中的前缀
pathPrefix: /namerd/dtabs
2、重启namerd服务
$./namerd config/namerd.yaml
3、创建dtab规则,我们可以直接在consul kv中创建,也可以通过namerctl创建
$ ./namerctl dtab create web config/dtab-consul-config --base-url http://127.0.0.1:4180
Created web
4、打开consul 管理页,我们看到规则在consul kv中被创建了
我们看到也可以在consul管理页编辑和删除规则。
4、打开namerd管理页,我们看到规则被正确加载了。
5、测试访问
$ curl -H "Host:test" http://127.0.0.1:4140
It works!
6、重启namerd,可以看到规则依旧从consul加载。
配置详解
Consul
kind: io.l5d.consul
dtab存储在Consul KV storage。
键
|
默认值
|
说明
|
host
|
localhost
|
consul api 主机名或ip
|
port
|
8500
|
consul api 端口
|
pathPrefix
|
/namerd/dtabs
|
dtab存储的kv前缀
|
token
|
no auth
|
API的认证token
|
datacenter
|
uses agent’s datacenter
|
指定consul的数据中心
|
readConsistencyMode
|
default
| |
writeConsistencyMode
|
default
| |
failFast
|
false
|
如设置 false,禁用failfast,增加Consul Client的错误。在agent模式下设置 false,直接访问高可用集群API设置 true
|
backoff
|
exponential backoff from 1ms to 1min
|
补偿算法,See
retry backoff
|
tls
|
no tls
|