Consul:服务管理软件。支持多数据中心下,分布式高可用,服务发现和配置共享,成员管理和消息广播,支持ACL访问控制。(相关的其他类似软件Zookeeper、Etcd、spring里的eureka)
官网:
https://www.consul.io/intro/index.html
安装:
1、下载解压之后就是一个可执行文件
2、拷贝到你的/usr/local/bin目录中(或者其他你喜欢的环境变量目录)
#查看版本(显示版本号表示安装成功)
consul -v
接下来我们要学习:
1、服务端模式
负责保存信息、集群控制、与客户端通信、与其他数据中心通信
2、客户端模式
无状态,将请求转发服务端(集群)
3、基于Agent守护进程
Consul Agent
https://www.consul.io/docs/agent/basics.html
Agent是Consul的核心业务。Agent维护成员信息、注册服务、运行检查、响应查询等等。Agent必须在Consul 集群的每个节点上运行。
Agent Configuration
https://www.consul.io/docs/agent/options.html
Agent具有可以通过命令行或配置文件指定的各种配置选项。所有配置选项都是完全可选的。
比如:
consul agent -data-dir=/root/consul-data -bind=10.211.55.17 -server -bootstrap -client -ui -client=0.0.0.0
-data-dir consul数据目录
-bind 绑定ip地址
-server 代表以服务的方式启动
-bootstrap 指定自己为leader而不需要选举
-ui 启动一个内置管理的web界面
-client 指定客户端可以访问的IP。设置为0.0.0.0则任意访问,否则默认本机才可以访问。
这样就启动了一个Consul agent。
新打开一个终端,执行:
consul members
#可以看到当前节点情况
当然我们还可以通过Agent提供的HTTP API方式来查看
https://www.consul.io/api/agent.html
curl http://10.211.55.17:8500/v1/agent/members
注册service
https://www.consul.io/api/agent/service.html
curl --request PUT --data @payload.json http://10.211.55.17:8500/v1/agent/service/register
注册服务参数较多,官网提示我们可以把参数写到json文件中。
比如上面的payload.json
内容如下:
{
"ID": "sw_service1",
"Name": "sw_service1",
"Tags": [
"primary"
],
"Address": "10.211.55.17",
"Port": 9501,
"Check": {
"HTTP": "http://10.211.55.17:9501",
"Interval": "5s"
}
}
ID 服务id
Name 服务名词
Address 主机IP
Port 端口
Check 是用来检查服务健康状态。我们这里使用http的方式,只要请求这个路径返回状态为200就表示正常
上面注册service之后,我们可以开查看一下:
curl http://10.211.55.17:8500/v1/agent/services
检查服务Api
http://10.211.55.17:8500/v1/agent/checks
Status为passing
表示检查通过。
反注册(就是把已经注册的service删除)
API如下:
curl --request PUT http://10.211.55.17:8500/v1/agent/service/deregister/sw_service1
sw_service1
是我们前面注册服务的id。
deregister之后再查看服务列表,{}
空了。
如果服务异常(不是deregister掉的)
为了测试,我们保证已经注册好
#注册service
curl --request PUT --data @payload.json http://10.211.55.17:8500/v1/agent/service/register
#查看service列表
curl http://10.211.55.17:8500/v1/agent/services
curl http://10.211.55.17:8500/v1/agent/checks
#检查服务的状态
如果我们的服务有异常了,我们看看会是什么一个表现。
还记得注册的是 payload.json文件么?
配置的Check,是访问http://10.211.55.17:9501
我们知道http://10.211.55.17:9501就是我们swoole的一个HttpServer。
我们去强制停掉这个HttpServer.
http://10.211.55.17:9501停掉之后,再检查
Status变为critical
了。
从 Consul Agent启动窗口 也可以看出: