什么是consul?
Consul是一个分布式高可用的系统,主要用来作微服务架构的服务发现和服务注册。
它有如下特色:
1) 服务发现:用来注册服务,和查找服务。好比注册一个商品服务。
客户端经过网关(gateway)获取而且调用服务,获取商品的列表。
2) 健康检查:consul能够定时的去检测注册的服务是否可用。固然也
能够在调用服务主动检测。
3)key/value存储:consul能够将注册的服务,以key/value结构进行
数据存储。
4)多数据中心:支持多个数据中心。php
如何使用consul?
启动方式:以代理方式启动。
1) consul agent -dev // 开发模式
2) consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul/ -node=ali_1 -ui -client 0.0.0.0 -bind 内网ip
-join 内网ipnode
参数详解:
-server:角色是server,用来存储数据。
-bootstrap-expect 1:等待多少个节点后再启动,1个,表示本身一个就能够启动。
-data-dir:数据存储目录。
-node :节点名称。
-ui : 启动默认ui界面。
-client:这个表示注册或者查询等一系列客户端对它操做的IP,若是不指定这个IP,默认是127.0.0.1。
-join:启动加入集群
-bind:绑定内网ipbootstrap
有人要问server,和client参数是什么意思呢?这个是consul的角色
consul中有3种角色服务器
client角色:就是客户端模式,是consul节点的一种模式,这种模式下,只接受服务注册,不保存信息。会将注册的服务信息,转发到server自己不会持久化这些信息。架构
server角色:表示consul的server模式,代表这个consul是个server。这种模式下功能和client一致。可是它会把信息持久化到本地
,而且还能够参与server的领导者选举。curl
server-leader角色:代表这个server是集群的leader。它和其它server不同的是,leader须要负责同步注册的信息,给其它server,同时负责各个节点的健康检查。tcp
consul对外提供的端口,不一样的端口有何不一样的做用,了解便可。
tcp/8300 8300端口,用于服务器节点,客户端经过该端口rpc协议调用服务端节点。服务器节点之间相互调用。
tcp/udp/8301 8301端口用于单个数据中心全部节点之间的互相通讯,集群中节点的数据同步,
它使得整个数据中心可以自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举)
8500 http协议访问分布式
查看agent成员
curl -X GET http://localhost:8500/v1/agent/members?prettyide
如何注册服务。
能够经过http协议来注册服务。
curl -X PUT
http://localhost:8500/v1/agent/service/register -d "{
"ID": "user", //服务id
"Name": "username", //服务名
"Tags": [微服务
"primary", "v1"
],
"Address": "127.0.0.1", //服务的ip
"Port": 8000, //服务的端口
"EnableTagOverride": false,
"Check": { //健康检查部分
"DeregisterCriticalServiceAfter": "90m", "HTTP": "127.0.0.1/rpc/health.php", //指定健康检查的URL,调用后只要返回20X,consul都认为是健康的 "Interval": "10s" //健康检查间隔时间,每隔10s,调用一次上面的URL
}
}"
取消注册的服务:
curl -X PUT http://localhost:8500/v1/agent/service/deregister/user {ID}
如何发现服务:
经过name来查找
curl -X GET http://127.0.0.1:8500/v1/catalog/service/username {Name}
获取本地健康的服务
curl -X GET http://127.0.0.1:8500/v1/health/service/username {Name}
查询服务列表
curl http://127.0.0.1:8500/v1/agent/services?pretty