1. 什么是consul?
是一个服务管理软件。
支持多数据中心下,分布式高可用的,服务发现和配置共享。
consul支持健康检查,允许存储键值对。
一致性协议采用 Raft 算法,用来保证服务的高可用.
成员管理和消息广播 采用GOSSIP协议,支持ACL访问控制。
ACL技术在路由器中被广泛采用,它是一种基于包过滤的流控制技术。控制列表通过把源地址、目的地址及端口号作为数据包检查的基本元素,并可以规定符合条件的数据包是否允许通过。
gossip就是p2p协议。他主要要做的事情是,去中心化。
这个协议就是模拟人类中传播谣言的行为而来。首先要传播谣言就要有种子节点。种子节点每秒都会随机向其他节点发送自己所拥有的节点列表,以及需要传播的消息。任何新加入的节点,就在这种传播方式下很快地被全网所知道。
什么是服务注册?
一个服务将其位置信息在“中心注册节点”注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。
什么是服务发现?
服务发现可以让一个应用或者组件发现其运行环境以及其它应用或组件的信息。用户配置一个服务发现工具就可以将实际容器跟运行配置分离开。常见配置信息包括:ip、端口号、名称等。
当一项服务存在于多个主机节点上时,client端如何决策获取相应正确的IP和port。
在传统情况下,当出现服务存在于多个主机节点上时,都会使用静态配置的方法来实现服务信息的注册。
而当在一个复杂的系统里,需要较强的可扩展性时,服务被频繁替换时,为避免服务中断,动态的服务注册和发现就很重要。
相关开源项目:Zookeeper,Doozer,Etcd,强一致性的项目,这些项目主要用于服务间的协调,同时又可用于服务的注册。
什么是强一致性协议?
按照某一顺序串行执行存储对象读写操作, 更新存储对象之后, 后续访问总是读到最新值。 假如进程A先更新了存储对象,存储系统保证后续A,B,C进程的读取操作都将返回最新值。强一致性模型有几种常见实现方法, 主从同步复制, 以及quorum复制等。
http://blog.csdn.net/shlazww/article/details/38736511
2. consul的具体应用场景
1. docker、coreos 实例的注册与配置共享
2. vitess集群
3. SaaS应用的配置共享
4.与confd服务集成,动态生成nignx与haproxy配置文件
3. 优势
1. 使用 Raft 算法来保证一致性,比poxes算法更直接。zookeeper采用的时poxes算法。
Raft大概将整个过程分为三个阶段,leader election,log replication和commit(safety)。
每个server处于三个状态:leader,follower,candidate。正常情况下,所有server中只有一个是leader,其它的都是follower。server之间通过RPC消息通信。follower不会主动发起RPC消息。leader和candidate(选主的时候)会主动发起RPC消息。
首先选择一个leader全权负责管理日志复制,leader从客户端接收log entries,将它们复制给集群中的其它机器,然后负责告诉其它机器什么时候将日志应用于它们的状态机。举个例子,leader可以在无需询问其它server的情况下决定把新entries放在哪个位置,数据永远是从leader流向其它机器。一个leader可以fail或者与其他机器失去连接,这种情形下会有新的leader被选举出来。
http://www.jdon.com/artichect/raft.html
http://blog.csdn.net/cszhouwei/article/details/38374603
2. 支持多数据中心,内外网的服务采用不同的端口进行监听。这样可以避免单点故障。
zookeeper等不支持多数据中心功能的支持
3. 支持健康检查
4. 提供web界面
5. 支持http协议与dns协议接口
4. 安装
下载
wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip
解压unzip consul_0.6.4_linux_amd64.zip
将解压后的二进制文件consul拷贝到/usr/local/bin下
sudo scp consul /usr/local/bin/
查看是否安装成功
./consul
出现如下结果,表示安装成功:
启动
1、执行命令
在bin文件夹下 ./consul agent -dev
显示:
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
Node name: 'localhost.localdomain'
Datacenter: 'dc1'
Server: true (bootstrap: false)
Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
Cluster Addr: 192.168.122.1 (LAN: 8301, WAN: 8302)
Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false
Atlas: <disabled>
==> Log data will now stream in as it occurs:
2017/11/27 18:57:43 [INFO] serf: EventMemberJoin: localhost.localdomain 192.168.122.1
2017/11/27 18:57:43 [INFO] serf: EventMemberJoin: localhost.localdomain.dc1 192.168.122.1
2017/11/27 18:57:43 [INFO] raft: Node at 192.168.122.1:8300 [Follower] entering Follower state
2017/11/27 18:57:43 [INFO] consul: adding LAN server localhost.localdomain (Addr: 192.168.122.1:8300) (DC: dc1)
2017/11/27 18:57:43 [INFO] consul: adding WAN server localhost.localdomain.dc1 (Addr: 192.168.122.1:8300) (DC: dc1)
2017/11/27 18:57:43 [ERR] agent: failed to sync remote state: No cluster leader
2017/11/27 18:57:44 [WARN] raft: Heartbeat timeout reached, starting election
2017/11/27 18:57:44 [INFO] raft: Node at 192.168.122.1:8300 [Candidate] entering Candidate state
2017/11/27 18:57:44 [DEBUG] raft: Votes needed: 1
2017/11/27 18:57:44 [DEBUG] raft: Vote granted from 192.168.122.1:8300. Tally: 1
2017/11/27 18:57:44 [INFO] raft: Election won. Tally: 1
2017/11/27 18:57:44 [INFO] raft: Node at 192.168.122.1:8300 [Leader] entering Leader state
2017/11/27 18:57:44 [INFO] raft: Disabling EnableSingleNode (bootstrap)
2017/11/27 18:57:44 [DEBUG] raft: Node 192.168.122.1:8300 updated peer set (2): [192.168.122.1:8300]
2017/11/27 18:57:44 [INFO] consul: cluster leadership acquired
2017/11/27 18:57:44 [DEBUG] consul: reset tombstone GC to index 2
2017/11/27 18:57:44 [INFO] consul: member 'localhost.localdomain' joined, marking health alive
2017/11/27 18:57:44 [INFO] consul: New leader elected: localhost.localdomain
2017/11/27 18:57:44 [INFO] agent: Synced service 'consul'
说明:
- -dev(该节点的启动不能用于生产环境,因为该模式下不会持久化任何状态),该启动模式仅仅是为了快速便捷的启动单节点consul
- 该节点处于server模式
- 该节点是leader
- 该节点是一个健康节点
、停止服务
命令:CTRL+C
windows下安装配置consul参考 : http://blog.csdn.net/zhaokejin521/article/details/78659049