【Consul】CONSUL环境部署

【Consul】CONSUL环境部署Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件 由 HashiCorp 公司用 Go 语言开发 基于 MozillaPubli 0 的协议进行开源 Consul 支持健康检查 并允许 HTTP 和 DNS 协议调用 API 存储键值对

Consul是一个支持多数据中心分布式高可用的服务发现配置共享的服务软件,由HashiCorp公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源。Consul支持健康检查,并允许HTTP和DNS协议调用 API 存储键值对

1   如何获取

目前最新版本是V0.6.4。

源码地址:

https://github.com/hashicorp/consul

可执行文件地址:

https://www.consul.io/downloads.html

MailList:

https://groups.google.com/group/consul-tool/

官方地址:

Consul by HashiCorp

官方演示:

http://demo.consul.io/ui/

2   搭建CONSUL环境

2.1 网络规划

主机名称

IP

角色

数据中心

node0

192.168.192.120

Server

DataCenter1

node1

192.168.192.121

Server

DataCenter1

node2

192.168.192.122

Server

DataCenter1

node3

192.168.192.123

Client

DataCenter1

2.2 软件环境

CentOS:7.2.1511

Consul:V0.6.4

2.3 构建

1. 安装可执行文件consul

   从上述所属地址中下载(linux类别X64),然后执行

[ceph@node0 cousul]$sudo consul /usr/bin/ [ceph@node0 ~]# chmod755 consul

查看是否安装成功

[ceph@node0 cousul]$consul version Consul v0.6.4 Consul Protocol: 3 (Understands back to: 1) [ceph@node0 cousul]$

 

查看帮助

[ceph@node0 consul]$consul --help usage: consul[--version] [--help]  [ 
    
      ] Available commandsare:     agent          Runs a Consul agent     configtest     Validate config file     event          Fire a new event     exec           Executes a command on Consul nodes     force-leave    Forces a member of the cluster to enter the"left" state     info           Provides debugging information foroperators     join           Tell Consul agent to join cluster     keygen         Generates a new encryption key     keyring        Manages gossip layer encryption keys     leave          Gracefully leaves the Consul clusterand shuts down     lock           Execute a command holding a lock     maint          Controls node or service maintenancemode     members        Lists the members of a Consul cluster     monitor        Stream logs from a Consul agent     reload         Triggers the agent to reloadconfiguration files     rtt            Estimates network round trip timebetween nodes     version        Prints the Consul version     watch          Watch for changes in Consul 
    

Consul有两种方式搭建方式:一是bootstrap模式,二是非bootstrap模式。

2.3.1  bootstrap模式

1. 在启动agent

在第一台节点上启动agent,以server模式运行,指定server角色的节点数目,指定节点名(在datacenter内节点名唯一),同时提供监听地址。

命令如下:

[ceph@node0 cousul]$ consul agent -server-bootstrap-expect=3 -data-dir=/tmp/consul -node=node0 -bind=192.168.192.120-dc=dc1 ==> WARNING: Expect Mode enabled,expecting 3 servers ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running!          Node name: 'node0'         Datacenter: 'dc1'             Server: true (bootstrap: false)        Client Addr: 127.0.0.1 (HTTP: 8500,HTTPS: -1, DNS: 8600, RPC: 8400)      Cluster Addr: 192.168.192.120 (LAN: 8301, WAN: 8302)    Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false              Atlas: 
   
     ==> Log data will now stream inas it occurs:    2016/07/05 20:52:06 [INFO] serf: EventMemberJoin: node0 192.168.192.120    2016/07/05 20:52:06 [INFO] serf: EventMemberJoin: node0.dc1192.168.192.120    2016/07/05 20:52:06 [INFO] raft: Node at 192.168.192.120:8300 [Follower]entering Follower state    2016/07/05 20:52:06 [INFO] consul: adding LAN server node0 (Addr:192.168.192.120:8300) (DC: dc1)    2016/07/05 20:52:06 [INFO] consul: adding WAN server node0.dc1 (Addr:192.168.192.120:8300) (DC: dc1)    2016/07/05 20:52:06 [ERR] agent: failed to sync remote state: No clusterleader    2016/07/05 20:52:08 [WARN] raft: EnableSingleNode disabled, and no knownpeers. Aborting election. 
   

之所以失败,原因在于当前的Datacenter没有 leader server

依次在另外两台机器部署agent作为server

节点node1

[ceph@node1 consul]$ consul agent-server -bootstrap-expect=3 -data-dir=/tmp/consul -node=node1-bind=192.168.192.121 -dc=dc1

节点node2

[ceph@node2 consul]$ consul agent-server -bootstrap-expect=3 -data-dir=/tmp/consul -node=node2-bind=192.168.192.122 -dc=dc1

目前,三个节点均不知道其他Server节点的存在,以node0为例

[ceph@node0 consul]$ consul members Node   Address               Status  Type   Build  Protocol  DC node0  192.168.192.120:8301  alive  server  0.6.4  2        dc1 [ceph@node0 consul]$

查看consul集群信息

[ceph@node0 consul]$ consul info agent:     check_monitors= 0     check_ttls= 0     checks= 0     services= 1 build:     prerelease=     revision= 26a0ef8c     version= 0.6.4 consul:     bootstrap = false     known_datacenters= 1     leader = false     server = true ……

当前节点为follow节点。

2. 触发选举leader

   因为consul一般需要3~5个Server,因此,在节点node0上添加node1和node2。

[ceph@node0 consul]$ consul join192.168.192.121 Successfully joined cluster bycontacting 1 nodes. [ceph@node0 consul]$ consul join192.168.192.122 Successfully joined cluster bycontacting 1 nodes. [ceph@node0 consul]$  

观察三个节点consul日志:

Node0:    2016/07/05 21:10:55 [INFO] agent: (LAN) joining: [192.168.192.122]    2016/07/05 21:10:55 [INFO] serf: EventMemberJoin: node2 192.168.192.122    2016/07/05 21:10:55 [INFO] agent: (LAN) joined: 1 Err: 
  
       2016/07/05 21:10:55 [INFO] consul: adding LAN server node2 (Addr:192.168.192.122:8300) (DC: dc1)    2016/07/05 21:10:55 [INFO] consul: Attempting bootstrap with nodes:[192.168.192.120:8300 192.168.192.121:8300 192.168.192.122:8300]    2016/07/05 21:10:55 [INFO] consul: New leader elected: node2    2016/07/05 21:10:56 [INFO] agent: Synced service 'consul' Node1   2016/07/05 21:10:55 [INFO] serf:EventMemberJoin: node2 192.168.192.122    2016/07/05 21:10:55 [INFO] consul: adding LAN server node2 (Addr:192.168.192.122:8300) (DC: dc1)    2016/07/05 21:10:55 [INFO] consul: Attempting bootstrap with nodes:[192.168.192.121:8300 192.168.192.120:8300 192.168.192.122:8300]    2016/07/05 21:10:56 [INFO] consul: New leader elected: node2 2016/07/05 21:10:57 [INFO] agent:Synced service 'consul' Node2    2016/07/05 21:10:55 [INFO] serf: EventMemberJoin: node0 192.168.192.120    2016/07/05 21:10:55 [INFO] serf: EventMemberJoin: node1 192.168.192.121    2016/07/05 21:10:55 [INFO] consul: adding LAN server node0 (Addr:192.168.192.120:8300) (DC: dc1)    2016/07/05 21:10:55 [INFO]consul: Attempting bootstrap with nodes: [192.168.192.122:.168.192.120:8300 192.168.192.121:8300]    2016/07/05 21:10:55 [INFO] consul: adding LAN server node1 (Addr:192.168.192.121:8300) (DC: dc1)    2016/07/05 21:10:55 [WARN] raft: Heartbeat timeout reached, startingelection    2016/07/05 21:10:55 [INFO] raft: Node at 192.168.192.122:8300[Candidate] entering Candidate state    2016/07/05 21:10:55 [INFO] raft: Election won. Tally: 2    2016/07/05 21:10:55 [INFO] raft: Node at 192.168.192.122:8300 [Leader]entering Leader state    2016/07/05 21:10:55 [INFO] consul: cluster leadership acquired    2016/07/05 21:10:55 [INFO] consul: New leader elected: node2    2016/07/05 21:10:55 [INFO] raft: pipelining replication to peer192.168.192.121:8300    2016/07/05 21:10:55 [INFO] raft: pipelining replication to peer192.168.192.120:8300    2016/07/05 21:10:55 [INFO] consul: member 'node2' joined, marking healthalive    2016/07/05 21:10:55 [INFO] consul: member 'node0' joined, marking healthalive    2016/07/05 21:10:55 [INFO] consul: member 'node1' joined, marking healthalive    2016/07/05 21:10:58 [INFO] agent: Synced service 'consul' 
  
​​​​​​​

由日志可知,举出了leadernode2

在node0查看members

[ceph@node0 consul]$ consul members Node   Address               Status  Type   Build  Protocol  DC node0  192.168.192.120:8301  alive  server  0.6.4  2        dc1 node1  192.168.192.121:8301  alive  server  0.6.4  2        dc1 node2  192.168.192.122:8301  alive  server  0.6.4  2         dc1 [ceph@node0 consul]$

查看info信息

[ceph@node0 consul]$ consul info agent:     check_monitors= 0     check_ttls= 0     checks= 0     services= 1 build:     prerelease=     revision= 26a0ef8c     version= 0.6.4 consul:     bootstrap = false     known_datacenters= 1     leader = false     server = true ……

节点node2上查看consul信息

[ceph@node2 consul]$ consul info agent:     check_monitors= 0     check_ttls= 0     checks= 0     services= 1 build:     prerelease=     revision= 26a0ef8c     version= 0.6.4 consul:     bootstrap= false     known_datacenters= 1     leader = true     server = true

3. 在node3上以client启动agent

[ceph@node3 consul]$ consul agent-data-dir=/tmp/consul -node=node3 -bind=192.168.192.123 -dc=dc1 ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running!          Node name: 'node3'         Datacenter: 'dc1'             Server: false (bootstrap: false)        Client Addr: 127.0.0.1 (HTTP: 8500,HTTPS: -1, DNS: 8600, RPC: 8400)      Cluster Addr: 192.168.192.123 (LAN: 8301, WAN: 8302)    Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false              Atlas: 
   
     ==> Log data will now stream inas it occurs:    2016/07/05 21:21:02 [INFO] serf: EventMemberJoin: node3 192.168.192.123    2016/07/05 21:21:02 [ERR] agent: failed to sync remote state: No knownConsul servers 
   

在节点node0上添加node3

[ceph@node0 consul]$ consul join192.168.192.123 Successfully joined cluster bycontacting 1 nodes. [ceph@node0 consul]$ consul members Node   Address               Status  Type   Build  Protocol  DC node0  192.168.192.120:8301  alive   server  0.6.4 2         dc1 node1  192.168.192.121:8301  alive  server  0.6.4  2        dc1 node2  192.168.192.122:8301  alive   server  0.6.4 2         dc1 node3  192.168.192.123:8301  alive  client  0.6.4 2         dc1 [ceph@node0 consul]$

节点node3的日志如下:

   2016/07/05 21:21:57 [INFO] serf: EventMemberJoin: node0 192.168.192.120    2016/07/05 21:21:57 [INFO] serf: EventMemberJoin: node2 192.168.192.122    2016/07/05 21:21:57 [INFO] serf: EventMemberJoin: node1 192.168.192.121    2016/07/05 21:21:57 [INFO] consul: adding server node0 (Addr:192.168.192.120:8300) (DC: dc1)    2016/07/05 21:21:57 [INFO] consul: adding server node2 (Addr:192.168.192.122:8300) (DC: dc1)    2016/07/05 21:21:57 [INFO] consul: adding server node1 (Addr:192.168.192.121:8300) (DC: dc1)    2016/07/05 21:21:57 [INFO] consul: New leader elected: node2    2016/07/05 21:21:57 [INFO] agent: Synced node info

3. 依次关闭node3 node2:

Node0和node1的日志如下:

Node0    2016/07/05 21:24:00 [INFO] serf: EventMemberLeave: node2 192.168.192.122    2016/07/05 21:24:00 [INFO] consul: removing LAN server node2 (Addr:192.168.192.122:8300) (DC: dc1)    2016/07/05 21:24:00 [WARN] raft: Heartbeat timeout reached, startingelection    2016/07/05 21:24:00 [INFO] raft: Node at 192.168.192.120:8300[Candidate] entering Candidate state    2016/07/05 21:24:01 [INFO] raft: Duplicate RequestVote for same term: 2    2016/07/05 21:24:02 [WARN] raft: Election timeout reached, restartingelection    2016/07/05 21:24:02 [INFO] raft: Node at 192.168.192.120:8300[Candidate] entering Candidate state    2016/07/05 21:24:02 [INFO] raft: Election won. Tally: 2    2016/07/05 21:24:02 [INFO] raft: Node at 192.168.192.120:8300 [Leader]entering Leader state    2016/07/05 21:24:02 [INFO] consul: cluster leadership acquired    2016/07/05 21:24:02 [INFO] consul: New leader elected: node0    2016/07/05 21:24:02 [INFO] raft: pipelining replication to peer192.168.192.121:8300    2016/07/05 21:24:02 [INFO] consul: member 'node2' left, deregistering    2016/07/05 21:24:03 [INFO] agent.rpc: Accepted client: 127.0.0.1:35701 Node1    2016/07/05 21:24:00 [INFO] consul: removing LAN server node2 (Addr:192.168.192.122:8300) (DC: dc1)    2016/07/05 21:24:00 [WARN] raft: Rejecting vote request from192.168.192.120:8300 since we have a leader: 192.168.192.122:8300    2016/07/05 21:24:01 [WARN] raft: Heartbeat timeout reached, startingelection    2016/07/05 21:24:01 [INFO] raft: Node at 192.168.192.121:8300[Candidate] entering Candidate state    2016/07/05 21:24:02 [INFO] raft: Node at 192.168.192.121:8300 [Follower]entering Follower state    2016/07/05 21:24:02 [INFO]consul: New leader elected: node0

3   参考文献

[01]http://www.cnblogs.com/yatingyang/articles/4495098.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208648.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:05
下一篇 2026年3月19日 上午11:05


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号