自动化网络配置,发现服务并启用跨任何云或运行时的安全连接。
Consul介绍
Consul是一种服务发现和配置工具。Consul具有分布式,高可用性和极高的可扩展性。
Consul提供了几个关键功能:
服务发现 - 使用简单的服务来注册自己并通过DNS或HTTP接口发现其他服务。也可以注册SaaS提供商等外部服务。
运行状况检查 - 运行状况检查使Consul能够快速向运营商发出有关群集中任何问题的警报 与服务发现的集成可防止将流量路由到不健康的主机,并启用服务级别的断路器。
密钥/值存储 - 灵活的密钥/值存储可以存储动态配置,功能标记,协调,领导者选举等。简单的HTTP API使其易于在任何地方使用。
多数据中心 - Consul可以识别数据中心,并且可以支持任意数量的区域而无需复杂的配置。
服务分段 - Consul Connect通过自动TLS加密和基于身份的授权实现安全的服务到服务通信。
快速开始
可以在Consul网站上查看广泛的快速入门:
https://www.consul.io/intro/getting-started/install.html
文档
可以在Consul网站上查看完整、全面的文档:
参考资料:
Consul使用
创建名称为Consul的Windows服务,并读取D:\Consul\configs文件夹中的配置:
sc create “Consul” binPath= “D:\Consul\consul.exe agent -config-dir D:\Consul\configs” start= auto
已注册的服务即使关闭了也不会从Consul移除,需要手动移除无效的服务,-id参数后面是服务的ID:
consul services deregister -id=ServiceId
Consul启动读取配置文件夹会按名称顺序读取,如先读取a.json,然后读取b.json,如果a、b中存在相同的配置项,则 b 会覆盖 a 的值。
特别注意:
当服务独立部署的时候可以正常注册到 Consul,但是部署到 IIS 后,服务直到第一次接受请求才会注册。当所有服务都是通过网关请求时,网关首先要从 Consul 获取服务信息,但是服务启动后未注册导致网关无法获取服务信息,请求失败。
解决这个问题有两种思路,一是IIS启动和回收时立即请求一次服务(预加载),二是使用定时服务一直请求服务。
第一种方式可参考微软官方方案:IIS 8.0 Application Initialization,几次尝试未成功后我使用了第二种方式,使用调度一直请求服务.
Consul服务配置示例:
{
"datacenter": "ctl1",
"node_name": "node1",
"data_dir": "data",
"performance": {
"raft_multiplier": 3
},
"server": true,
"ui": true,
"ports":{
"http": 8500,
"dns": 8600,
"grpc": 8400,
"serf_lan": 8301,
"serf_wan": 8302,
"server": 8300
},
"log_level": "TRACE",
"log_file": "logs/",
"bootstrap_expect": 1,
"client_addr": "0.0.0.0"
}
注意:”client_addr”: 默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0。如果是默认127.0.0.1,无法从外部访问Consul的UI界面
从配置文件注册服务:
{
"services": [
{
"id": "service1",
"name": "ConsulServer",
"tags": [
"primary"
],
"address": "localhost",
"port": 8282,
"checks": [
{
"http": "http://localhost:8282/Server.svc",
"interval": "10s",
"timeout": "1s"
}
]
},
{
"id": "service2",
"name": "ConsulServer",
"tags": [
"primary"
],
"address": "localhost",
"port": 8283,
"checks": [
{
"http": "http://localhost:8283/Server.svc",
"interval": "10s",
"timeout": "1s"
}
]
}
]
}
acl_token:agent会使用这个token和consul server进行请求
acl_ttl:控制TTL的cache,默认是30s
addresses:一个嵌套对象,可以设置以下key:dns、http、rpc
advertise_addr:等同于-advertise
bootstrap:等同于-bootstrap
bootstrap_expect:等同于-bootstrap-expect
bind_addr:等同于-bind
ca_file:提供CA文件路径,用来检查客户端或者服务端的链接
cert_file:必须和key_file一起
check_update_interval:
client_addr:等同于-client
datacenter:等同于-dc
data_dir:等同于-data-dir
disable_anonymous_signature:在进行更新检查时禁止匿名签名
enable_debug:开启debug模式
enable_syslog:等同于-syslog
encrypt:等同于-encrypt
key_file:提供私钥的路径
leave_on_terminate:默认是false,如果为true,当agent收到一个TERM信号的时候,它会发送leave信息到集群中的其他节点上。
log_level:等同于-log-level “trace”, “debug”, “info”, “warn”, 和 “err”
node_name:等同于-node
ports:这是一个嵌套对象,可以设置以下key:dns(dns地址:8600)、http(http api地址:8500)、rpc(rpc:8400)、serf_lan(lan port:8301)、serf_wan(wan port:8302)、server(server rpc:8300)
protocol:等同于-protocol
rejoin_after_leave:等同于-rejoin
retry_join:等同于-retry-join
retry_interval:等同于-retry-interval
server:等同于-server
syslog_facility:当enable_syslog被提供后,该参数控制哪个级别的信息被发送,默认Local0
ui_dir:等同于-ui-dir
- 本文链接:http://uncmd.github.io/microservice/consul/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues