一切福田,不離方寸,從心而覓,感無不通。

带你入门consul

consul

consul用于微服务下的服务治理,主要特点有:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等。

什么叫服务治理发现?起初我们的服务比较单一,各服务之间通过接口就能访问。后面服务越来越复杂出现了分布式,为了不引起单点问题,必然是多服务部署,如果还用原来的方式直接连接,那么在某个服务挂掉或者修改了信息,就会导致连接失败。如果连接端能够不去关心具体的服务配置,他只要连接到那个服务,后续的工作由其它服务保证,包括负载均衡、健康检查等,保证总有可用的连接那就行了,consul就是做这个的,当然,它的功能远不止这些,这里只是以服务发现为例。

与它同类的东西,还有Eureka、zooKeeper、etcd等也能做这些事,说不上谁好谁坏,看场景挑合适的吧,不过Eureka现在已经闭源了,这个还是建议不要去用这个了。

consul下载

consule的安装超级简单,去官方下载地址Download ,找到自已对应系统的压缩包,解压后里面就一个文件consul, 将这个文件放到你的PATH中,就能直接用了。

验证下安装成功没有, 看到下面的提示就行了。


 

consul的CLI操作

consul提供了cli的命令操作,如启动代理、键值存储、注册/注销服务、加入集群等,这个consul提供的HTTP的API操作也是一样的,只是这里都是shell的操作。


 

Agent启动

consul是通过Agent来运行的,Agent又分为Server Agent和Client Agent两种类型,这两类型基本上是没区别的,Server Agent会将服务的消息存储起来,至少要启动一个Server Agent,为了防止单点,集群环境中推荐3-5个。

Client Agent主要用于注销服务、健康检查及转发Server Agent的查询等,它相当于一个代理,所以他必须在集群的每台主机上都要运行。

先看下Agent的常用配置


 

  • --server 定义运行server agent
  • --data-dir 配置consul数据存储路径
  • --bootstrap-expect :期望的server节点数目,consul一直等到指定sever数目的时候才会引导整个集群
  • --bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
  • --node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
  • --ui: web的管理ui,查看服务和节点
  • --config-dir:配置文件目录,所有以.json结尾的文件都会被加载,可以是服务或consul自身的配置
  • --client:提供HTTP、DNS、RPC等服务,默认是127.0.0.1,不对外提供服务,如果需要则改成0.0.0.0

我本地没有虚拟机,也没用Docker操作,所以,如果要同时启动Server和Client的话,我就用的改端口的方式,当然生产环境肯定就没有这个了,它都是一台机器启动一个Agent, 这里只是测试用的。

启动一个Server Agent


 

上面的 --server表示以server方式,--ui 会开启一个web ui管理界面, --dev 表示开发者模式,不需要ACL验证。不然那个web ui的打不开会报没有权限。


 

启动Client Agent


 

上面有一个--join表示加入到集群中,写server agent的地址就行。 config-dir的配置目录下面一个服务的配置


 

上面的命令运行后,会启动一个名字为“web"的服务,并提供健康检查。


 

查看下,启动的Agent


 

web管理界面

可以查看服务的定义和节点,访问[web管理界面](127.0.0.1:8500/ui)

HTTP API

consul除了提供DNS外,还提供Http的操作,如注册服务、查看节点、查看服务信息等,一般都是通过API来操作的。

如我上面定义的 "web"服务,通过下面的API查询,就能得到具体的IP地址和端口,这样就能直接连到那台服务了。

其它更详情API操作,可以自已去参照官方的文档 API


 

from:https://zhuanlan.zhihu.com/p/122340918