上一节是有关consul
的安装,这节主要看Consul
的使用。安装consul之后,必须运行代理程序,代理可以在服务器或客户端模式下运行。每个数据中心必须至少有一台服务器,但建议使用3或5台服务器。由于在故障情况下数据丢失是不可避免的,因此非常不鼓励进行单个服务器部署。所有其他代理都以客户端模式运行,客户端是一个非常轻量级的进程。它注册服务,运行状态检查,并将查询转发给服务器。代理作为集群的一部分必须运行在每个节点上。
启动代理
简单起见,现在以开发模式启动Consul
代理。在命令行运行consul agent -dev
,然后就会看到Consul
代理已经启动并输出了一些日志数据。
集群成员
在另外一个命令行中运行consul members
命令,你就可以看到Consul
集群的成员。例如在上面代理启动的情况下,你将会看到:
C:\Users\dell>consul members
Node Address Status Type Build Protocol DC Segment
DESKTOP-7K5OQUC 127.0.0.1:8301 alive server 1.4.4 2 dc1 <all>
打印输出就是我们自己的节点,它运行的地址,健康状态,在集群中的角色以及一些版本信息。增加-detailed
标志可以查看其他元数据。
停止代理
你可以使用ctrl-c
正常的暂停代理,中断代理后,你从log
输出中可以看到它离开集群并关闭。如果优雅的停止,那么Consul
会通知其他集群成员该节点已经离开。如果你强行终止了代理进程,那么当成员连接失败,其健康状态仅标记为关键,而不会从目录中删除其服务。Consul
会自动尝试重新连接到故障节点,允许它从某些网络状况中恢复。
定义服务
可以通过提供服务定义或者通过对HTTP API
进行适当调用来注册服务。服务定义是注册服务的最常用方式,因此我们将在此步骤中使用该方法。
首先创建配置文件,在unix
上一般命名/etc/consul.d
。.d
标识这个目录包含配置文件。假设我们有一个服务,名称为web
,运行在80
端口上。例如我们在D:\Cousul
目录下有consul.d
目录,那么该目录下新建配置文件web.json
,内容如下:
{
"service": {
"name": "web",
"tags": [
"rails"
],
"port": 80
}
}
然后运行consul agent -dev -config-dir=./consul.d
,然后就可以看到下面的内容。
图片中框出的synced
表示代理从配置文件加载了服务定义,并已成功将其注册到服务目录中。如果你希望注册多个服务,那么你需要在Consul
配置目录下创建多个服务定义文件。
一旦代理启动和同步了服务,我们就可以利用DNS
或者HTTP API
来查询服务。
DNS API
下面使用DNS API来查询我们服务,对于DNS API来说,服务的DNS名字是NAME.service.consul
。尽管可以配置DNS名字,但是默认情况下,所有的DNS名字都在consul命名空间中。名字中的service
告诉Consul我们查询服务,Name
就是查询的服务名称。
对于之前注册的web服务,我们查询的名称就应该是web.service.consul
。例如:
如图所示,返回的A记录包含服务可用节点的IP地址。
HTTP API
除了DNS API
,HTTP API
也可以用来查询服务。例如:
$ curl http://localhost:8500/v1/catalog/service/web
目录API会告诉我们所有指定服务上的所有节点,通常我们指向查询健康检查通过的实例,那么用下面的查询:
culr http://localhost:8500/v1/health/service/web?passing
更新服务
通过更改配置文件和发送SIGHUP
给代理,我们可以更新服务定义。这可以使你在不停机或不查询服务的情况下更新服务。还有另一种方式,HTTP API
也可以用来动态添加、移除以及修改服务。
参考文章