服务注册发现consul之⼀:consul介绍、安装、及功能介绍
Consul 是⼀套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司⽤ Go 语⾔开发。它具有很多优点。包括:基于 raft 协议,⽐较简洁;⽀持健康检查, 同时⽀持HTTP 和 DNS 协议⽀持跨数据中⼼的 WAN(⼴域⽹) 集提供图形界⾯跨平台,⽀持 Linux、Mac、Windows。
consul是使⽤go语⾔开发的服务发现、配置管理中⼼服务。内置了、实现、、、,。服务部署简单,只有⼀个可运⾏的⼆进制的包。每个节点都需要运⾏agent,他有两种运⾏模式server和client。每个数据中⼼官⽅建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进⾏。
raft(分布式⼀致性协议):见《》
@client
CLIENT表⽰consul的client模式,就是客户端模式。是consul节点的⼀种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本⾝是不持久化这些信息。@server
SERVER表⽰consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都⼀样,唯⼀不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
@server-leader
中间那个SERVER下⾯有LEADER的字眼,表明这个SERVER是它们的⽼⼤,它和其它SERVER不⼀样的⼀点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。
@raft
,⽽zookeeper⽤的paxos,etcd采⽤的也是taft。
@服务发现协议
consul采⽤http和dns协议,etcd只⽀持http
@服务注册
consul⽀持两种⽅式实现服务注册,⼀种是通过consul的服务注册http API,由服务⾃⼰调⽤API实现注册,另⼀种⽅式是通过json个是的配置⽂件实现注册,将需要注册的服务以json格式的配置⽂件给出。consul官⽅建议使⽤第⼆种⽅式。
@服务发现
consul⽀持两种⽅式实现服务发现,⼀种是通过http API来查询有哪些服务,另外⼀种是通过consul ag
ent ⾃带的DNS(8600端⼝),域名是以sul的形式给出,NAME即在定义的服务配置⽂件中,服务的名称。DNS⽅式可以通过check的⽅式检查服务。
@服务间的通信协议
,他有两个gossip pool(LAN pool和WAN pool),LAN pool是同⼀个数据中⼼内部通信的,WAN pool是多个数据中⼼通信的,LAN pool有多个,WAN pool只有⼀个。
⼀、基本概念
在描述架构之前,这⾥提供了⼀些术语来帮助声明正在探讨的东西:
Agent——agent是⼀直运⾏在Consul集中每个成员上的守护进程。通过运⾏ consul agent 来启动。agent可以运⾏在client或者server模式。指定节点作为client或者server是⾮常简单的,除⾮有其他agent实例。所有的agent都能运⾏DNS或者HTTP接⼝,并负责运⾏时检查和保持服务同步。
Client——⼀个Client是⼀个转发所有RPC到server的代理。这个client是相对⽆状态的。client唯⼀执⾏的后台活动是加⼊LAN gossip池。这有⼀个最低的资源开销并且仅消耗少量的⽹络带宽。
Server——⼀个server是⼀个有⼀组扩展功能的代理,这些功能包括参与Raft选举,维护集状态,响应RPC查询,与其他数据中⼼交互WAN gossip和转发查询给leader或者远程数据中⼼。
DataCenter——虽然数据中⼼的定义是显⽽易见的,但是有⼀些细微的细节必须考虑。例如,在EC2中,多个可⽤区域被认为组成⼀个数据中⼼?我们定义数据中⼼为⼀个私有的,低延迟和⾼带宽的⼀个⽹络环境。这不包括访问公共⽹络,但是对于我们⽽⾔,同⼀个EC2中的多个可⽤区域可以被认为是⼀个数据中⼼的⼀部分。
Consensus——在我们的⽂档中,我们使⽤Consensus来表明就leader选举和事务的顺序达成⼀致。由于这些事务都被应⽤到有限状态机上,Consensus暗⽰复制状态机的⼀致性。
Gossip——Consul建⽴在Serf的基础之上,它提供了⼀个⽤于多播⽬的的完整的gossip协议。Serf提供成员关系,故障检测和事件⼴播。更多的信息在gossip⽂档中描述。这⾜以知道gossip使⽤基于UDP的随机的点到点通信。
LAN Gossip——它包含所有位于同⼀个局域⽹或者数据中⼼的所有节点。
WAN Gossip——它只包含Server。这些server主要分布在不同的数据中⼼并且通常通过因特⽹或者⼴域⽹通信。
RPC——远程过程调⽤。这是⼀个允许client请求server的请求/响应机制。
从10000万英尺的⾼度看consul架构:
拆解开这个体系,从每⼀个组件开始了解。⾸先,可以看到有两个数据中⼼,分别标记为“one”和“two”。Consul是⽀持多数据中⼼⼀流,并且是常⽤业务场景。
每个数据中⼼都是由Server和client组成。建议有3~5 Server——基于故障处理和性能的平衡之策。如果增加越多的机器,则Consensus会越来越慢。对client没有限制,可以很容易地扩展到成千上万或数万。
同⼀个数据中⼼的所有节点都要加⼊Gossip协议。这意味着gossip pool包含给定数据中⼼的所有节点。有以下⽬的:⾸先,没有必要为client配置服务器地址参数;发现是⾃动完成的。第⼆,节点故障检测的⼯作不是放置在服务器上,⽽是分布式的。这使故障检测⽐⼼跳机制更可扩展性。第三,可⽤来作为消息层通知重要的事件,如leader选举。
每个数据中⼼的服务器都是属于⼀个Raft peer。这意味着,他们⼀起⼯作,选出⼀个的Leader,Leader server是有额外的职责。负责处理所有的查询和事务。事务也必须通过Consensus协议复制到所有的伙伴。由于这⼀要求,当⾮Leader Server接收到⼀个RPC请求,会转发到集的leader。
Server节点也是作为WAN gossip pool的⼀部分。这个pool是与LAN gossip pool是不同的,它为具有更⾼延迟的⽹络响应做了优化,并且可能包括其他consul集的server节点。设计WANpool的⽬的是让数据中⼼能够以low-touch的⽅式发现彼此。将⼀个新的数据中⼼加⼊现有的WAN Gossip是很容易
的。因为池中的所有Server都是可控制的,这也使跨数据中⼼的要求。当⼀个Serfer接收到不同的数据中⼼的要求时,它把这个请求转发给相应数据中⼼的任⼀Server。然后,接收到请求的Server可能会转发给Leader。
多个数据中⼼之间是低耦合,但由于故障检测、连接缓存复⽤、跨数据中⼼要求快速和可靠的响应。
⼆、consul安装
2、解压
3、启动
consul agent -dev
指定ip:
consul agent -dev -client 10.200.110.100 -ui
D:\workspace\service-producter\build\libs>java -Dserver.port=9999 -sul.host=10.200.110.100 -sul.discovery.hostname=10.200.110.100 -jar service-producter-201810241824.jar
Consul 启动参数说明
启动参数说明
-advertise通知展现地址⽤来改变我们给集中的其他节点展现的地址,⼀般情况下-bind地址就是展现地址
-bootstrap⽤来控制⼀个server是否在bootstrap模式,在⼀个datacenter中只能有⼀个server处于bootstrap模式,当⼀个server处于bootstrap模式时,可以⾃⼰选举为raft leader
-bootstrap-expect 在⼀个datacenter中期望提供的server节点数⽬,当该值提供的时候,consul⼀直等到达到指定sever数⽬的时候才会引导整个集,该标记不能和bootstrap 公⽤
-bind该地址⽤来在集内部的通讯,集内的所有节点到地址都必须是可达的,默认是0.0.0.0
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-config-file明确的指定要加载哪个配置⽂件
-config-dir配置⽂件⽬录,⾥⾯所有以.json结尾的⽂件都会被加载
-data-dir提供⼀个⽬录⽤来存放agent的状态,所有的agent允许都需要该⽬录,该⽬录必须是稳定的,系统重启后都继续存在
-dc该标记控制agent允许的datacenter的名称,默认是dc1
-encrypt指定secret key,使consul在通讯时进⾏加密,key可以通过consul keygen⽣成,同⼀个集中的节点必须使⽤相同的key
-join加⼊⼀个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加⼊任何指定的地址中,则agent会启动失败,默认agent启动时不会加⼊任何节点。
-retry-join和join类似,但是允许你在第⼀次失败后进⾏尝试
-retry-interval两次join之间的时间间隔,默认是30s
-
retry-max尝试重复join的次数,默认是0,也就是⽆限次尝试
-log-level consul agent启动后显⽰的⽇志信息级别。默认是info,可选:trace、debug、info、warn、err
-node节点在集中的名称,在⼀个集中必须是唯⼀的,默认是该节点的主机名
-protocol consul使⽤的协议版本
-rejoin使consul忽略先前的离开,在再次启动后仍旧尝试加⼊集中
-server定义agent运⾏在server模式,每个集⾄少有⼀个server,建议每个集的server不要超过5个
-syslog开启系统⽇志功能,只在linux/osx上⽣效
-ui使⽤⾃带的ui
bootstrap dns 服务器-ui-dir提供存放web ui资源的路径,该⽬录必须是可读的
-pid-file提供⼀个路径来存放pid⽂件,可以使⽤该⽂件进⾏SIGINT/SIGHUP(关闭/更新)agent
4、验证
其它机器如果要访问,则需要加-client参数
consul agent -dev -client 10.200.110.2
更多参数说明如下:
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -advertise 120.76.145.187 -client 120.76.145.187 -ui-dir /software/consul-ui
server 表⽰启动的为consul server ,构建⼀个consul cluster ⼀般建议使⽤3或者5个consul server
bootstrap-expect 1 表⽰期望的服务节点数⽬为1
-data-dir 数据⽬录,如果该⽂件夹不存在则⼿⼯创建,如果在consul发⽣错误后,建议先清理该⽬录⽂件
advertise 设置⼴播地址,ip可以设置为公⽹ip
client 设置client访问的地址
ui-dir web控制台⽬录位置
三、consul功能介绍
consul 具有以下性质:
service discovery(服务发现):consul通过DNS或者HTTP接⼝使服务注册和服务发现变的很容易,⼀些外部服务,例如saas提供的也可以⼀样注册。
health checking(服务健康监测):健康检测使consul可以快速的告警在集中的操作。和服务发现
的集成,可以防⽌服务转发到故障的服务上⾯。
key/value storage(ey/value 存储):⼀个⽤来存储动态配置的系统。提供简单的HTTP接⼝,可以在任何地⽅操作。
multi-datacenter(多数据中⼼):⽆需复杂的配置,即可⽀持任意数量的区域。
consul可运⾏在mac windows 等机器上。
四、consul⾼可⽤集安装
见《》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论