Consul 摘要

1
consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册和发现的方案相比,consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(ZooKeeper)。

优势

1
2
3
4
5
1、使用了Raft算法来保证一致性,比复杂的Paxos算法更直接,相比较而言,zookeeper采用的是Paxos,而etcd使用的则是Raft。
2、支持多数据中心,内外网的服务采用不通的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟、分片等情况。zookeeper和etcd均不提供多数据中心的支持。
3、支持健康检查
4、支持http和dns协议接口。zookeeper的集成较为复杂,etc仅支持http协议
5、支持web管理页面;etc无此功能

特性

1
2
3
4
服务发现
健康检查
Key/Value存储
多数据中心

角色

1
2
3
4
client端:无状态,将http和DNS接口请求转发给局域网内的服务端集群
server端:保存配置信息,高可用集群,在局域网内与本地客户端通讯,通过广域网与其他数据中心通讯。每个数据中心的server数据推荐为3或者5个

Consul的客户端、服务端还支持跨数据中心的使用,因此更加提高了它的高可用性

工作原理

1
2
3
4
1、当Producer启动的时候,会给Consul发送一个post请求,告诉Consul自己的IP地址和端口
2、Consul接收到Producer的注册后,每10s会向producer发送一个健康检查的请求,以此来检查producer的状态
3、当consumer发送GET方式请求/api/address到producer时,会先从consul中拿到一个存储服务器IP和Port的临时表,从临表中拿到Producer的IP和Port后再发送GET方式请求/api/address
4、该临时表每隔10s会更新,只包含通过了健康检查的producer

下载 Consul

Download Consul v1.12

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-advertise:通告地址用于更改时将此信息告知给其他节点的地址。默认情况下,-bind地址是通告的,但是在某种情况下可能存在无法绑定的可路由地址。
-advertise-wan:WAN地址用于更改我们向通过WAN加入的服务器节点发布的地址。这也可以在与translate_wan_addres配置选项结合使用时在客户端代理设置。默认情况下,-advertise是用来通告的,但是所有数据中心的成员不能同时处于同一个物理设备或虚拟网络中,尤其是混合云和专用数据中心的混合设置。
-bootstrap:该标志用于控制服务器是否处于引导模式,每个数据中心最多只能运行一个服务器,一个处于引导模式的服务器可以通过Raft自行选择为领导者。只有一个节点处于这个模式是非常重要的,否则将无法保证集群的一致性。
-bootstrap-expect:该参数表示数据中心预期的数量。该值必须与集群中服务器的数量保持一致。提供时consul会等待指定数量的服务可用,接着进行引导。
-bind:应为内部集群通信绑定的地址。这事集群中所有其他节点都应该可以访问的地址。默认为“0.0.0.0“,这意味着consul将绑定到本地计算机上的所有地址,并将第一个可用的私有ipv4地址通知给集群中的其他即诶点,如果含有多个IPv4地址可用,consul将在启动时退出并出现错误。如果你指定"[::]",则consul将使用第一个可用的ipv6的公共地址,如果含有多个,则启动时退出并报错。consul同时使用TCP和UDP相同的端口。
-client:consul将绑定客户端接口的地址,包括HTTP和DNS服务器。默认情况下为127.0.0.1,只允许会送连接。
-config-file:需要加载的配置文件
-config-dir:需要加载的配置文件的目录。consul将加载后缀为".json"的所有文件。加载顺序是按字母顺序排列的,并使用上述config-file选项相同的合并例程。
-config-format:要加载配置文件的格式。consul通常有两种配置文件的格式分别是'.json'和'.hcl'。
-data-dir:该参数表示为存储状态提供了一个数据目录。这对所有的代理都是必须的,该目录必须是持久化的,。该目录必须支持使用文件系统锁定,这意味着某些类型的潜入文件夹不能够被使用。服务器和非服务器代理都可以在此目录中的状态下存储ACL令牌,因此读取访问权限可以授予对服务器上的任何令牌的访问权限,并允许访问非服务器上的服务注册期间使用的任何令牌。
-datacenter:此参数标志着运行代理程序的数据中心,如果不提供,则为”dc1“。
-dev:启用开发服务器模式。(此模式不适用于生产,因为所有数据都留存在内存当中并不会持久化)
-disable-host-node-id: