consul
用于实现分布式系统的服务发现与配置。
https://www.consul.io/downloads.html
分布式、高可用、可横向扩展
服务注册:http\dns
健康检查
k,v存储
multi-datacenter:无需复杂的配置,即可支持任意数量的区域
consul agent -dev -bind 192.168.26.113 -client=0.0.0.0
http://localhost:8500/ui/dc1/services

- 服务端:
nohup consul agent -server -bootstrap-expect 1 -config-dir /etc/consul.d/ -data-dir /var/opt/consul -bind=193.112.27.150 >> /var/opt/consul/consul.log 2>&1注册服务:
curl -X PUT -d '{"type":"localService","outPort":8085,"outPath":"/websocket", "forwardAddress":"193.112.27.150", "forwardPort":"8085"}' http://localhost:8500/v1/kv/websocket/my - 客户端:
nohup consul agent -config-dir /etc/consul.d/ -data-dir /var/opt/consul -bind=121.42.204.73 -join=193.112.27.150 >consul.log 2>&1 &
-bootstrap:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。 -bootstrap-expect:设定一个数据中心需要的服务节点数,可以不设置,设置的数字必须和实际的服务节点数匹配。consul会等待直到数据中心下的服务节点满足设定才会启动集群服务。初始化leader选举,不能和bootstrap混用。必须配合-server配置。 -bind:绑定的内部通讯地址,默认0.0.0.0,即,所有的本地地址,会将第一个可用的ip地址散播到集群中,如果有多个可用的ipv4,则consul启动报错。[::]ipv6,TCP UDP协议,相同的端口。防火墙配置。 -client:客户端模式,http dns,默认127.0.0.1,回环令牌网址 -config-file:配置文件位置 -config-dir:配置文件所在文件夹,会加载其下所有配置文件,.json或者.hcl文件,加载顺序为字母表顺序;可用配置多个此配置,从而加载多个文件夹,子文件夹的配置不会被加载。 -config-format:配置文件格式,配置了,则加载相应个是的文件。不配置,则consul自动识别。 -data-dir:状态数据存储文件夹,所有的节点都需要。文件夹位置需要不收consul节点重启影响,必须能够使用操作系统文件锁,unix-based系统下,文件夹文件权限为0600,注意做好账户权限控制, -datacenter:数据中心名称,默认dc1,一个数据中心的所有节点都必须在一个LAN中。 -dev:开发模式,去掉所有持久化选项,内存服务器模式。 -disable-host-node-id:不使用host信息生成node ID,适用于同一台服务器部署多个实例用于测试的情况。随机生成nodeID -dns-port:v7.0以后,自定义dns 端口,覆盖默认8600 -enable-script-checks:是否允许使用脚本进行健康检查,默认false,最好配置enable acl -encrypt:consul网络通讯加密key,base64加密,16比特;consul keygen产生。集群中的每个实例必须提供相同的,只需提供一次,然后会保存到数据文件。重启自动加载。consul节点启动后提供,会被忽略。 -hcl:添加hcl格式配置,和已有的配置合并。可以使用多个此配置。 -http-port:http api端口,覆盖默认的8500。适用于云环境指定。 -log-file:日志记录文件,如果没有提供文件名,则默认Consul-时间戳.log -log-level:日志级别,默认info,包含:trace,debug,info,warn,err;consul monitor监控 -log-rotate-bytes:新日志文件生成大小阈值。 -log-rotate-rotation:新日志生成时间阈值 -join:需要加入的其它节点地址,可以多次使用,加入多个节点。 -retry-join:会进行加入重试,适用于认定加入节点最终会正常的情况。ipv4,ipv6,dns -retry-interval:上述,重试间隔,默认30s -retry-max:重试次数,默认0,无限次重试 -join-wan, -retry-join-wan, -retry-interval-wan, -retry-max-wan -node:节点名称,默认主机名 -node-id:节点ID, -pid-file:consul 存储 pid 的文件位置,用于主动发信号。如停止节点,重载配置等。 -protocol:使用的协议,升级时使用。consul -v查看协议版本 -raft-protocol:使用raft协议版本,默认3 -raft-snapshot-threshold:raft执行快照,提交次数阈值。一般不需要设置,io密集型应用可以调高。避免所有的节点同一时间快照。此值过大,会造成相应日志文件变大,节点重启恢复会耗费更长时间。1.1.0后,默认16384,之前8192. -raft-snapshot-interval:执行快照间隔,影响类似上个配置,1.1.0后默认30s,之前5s。 -rejoin:节点会尝试重新加入集群。 -server:服务端节点模式。 -server-port:服务端RPC端口,v1.2.2后提供。 -non-voting-server:服务节点不参与选举,接受日志复制,用于横向扩展,服务查询请求。(类比zookeeper 观察者节点) -syslog:linux OSX系统,配置日志输出到系统日志。 -ui:内置web ui界面。 -ui-dir:web ui 资源文件夹,使用此配置,则不需也不能使用再-ui配置。 默认使用端口: 服务端RPC:默认8300,TCP。 Serl LAN:处理LAN gossip,默认8301,TCP UDP。 Serl WAN:处理LAN gossip,默认8302,TCP UDP。 HTTP API:8500,TCP. DNS:8600,TCP,UDP. 可重载配置: Log level Checks Services Watches HTTP Client Address Node Metadata Metric Prefix Filter Discard Check Output RPC rate limiting

server端的网络连接资源有限。对于一个分布式系统,一般情况下访问量是很大的,如果用户不通过 client直接访问数据中心,那么数据中心必然要为每个用户提供一个单独的连接资源(线程,端口号), 那么server端的负担会非常大。所以很有必要用大量的client端来分散用户的连接请求,在client端 统一整合用户的服务请求,然后一次性地通过一个单一的链接发送大量的请求给server端,能够大量减少 server端的网络负担。其次在client端可以对用户的请求进行一些处理来提高服务的效率,比如将相同 的请求合并成一个查询,再比如将之前的查询通过cookie的形式缓存下来,但是这些功能都需要消耗不少的 计算和存储资源。如果在server端提供这些功能,必然加重server端的负担,使得server端更加不稳定。 而通过client来进行这些服务就没有问题了,因为client不提供实际服务,有很充足的计算资源来进行 处理这些工作。consul规定只要接入一个client就能将自己注册到一个服务网络中。这种架构使得系统的可扩展性非常的 强,网络的拓扑变化可以特别的灵活。这也是以来于client-server结构的。如果系统中只有几个数据中心存在, 那网络的扩张也无从谈起了。

浙公网安备 33010602011771号