Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合 。
从 consul 官网: https://www.consul.io/downloads.html ,进行下载就好,解压 consul_0.6.4_darwin_amd64.zip,将解压后的二进制文件 consul(拷贝到/usr/local/bin下);
sudo scp consul /usr/local/bin
./consul agent -dev
-dev 表示开发模式运行,另外还有 -server 表示服务模式运行
consul agent -dev -client 127.0.0.1
说明: -dev(该节点的启动不能用于生产环境,因为该模式下不会持久化任何状态),该启动模式仅仅是为了快速便捷的启动单节点 consul
consul members
查看 consul cluster 中的每一个 consul 节点的信息
说明:
命令:CTRL+C
说明:该节点离开后,会通知 cluster 中的其他节点
agent:运行一个 consul agent,consul agent -dev
join:将 agent 加入到consul集群,consul join IP
members:列出consul cluster集群中的 members,consul members
leave:将节点移除所在集群,consul leave
老版本叫 -dc,-dc 已经失效)
这边准备了三台 CentOS 7 的虚拟机,主机规划如下,供参考:
主机名称 IP 作用 是否允许远程访问
1、启动 node0 机器上的Consul(node0 机器上执行):
consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1
2、启动 node1 机器上的 Consul(node1 机器上执行):
consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui
3、启动 node2 机器上的 Consul(node2 机器上执行):
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
4、将 node1 节点加入到 node0 上(node1 机器上执行):
consul join 192.168.11.143
5、将 node2 节点加入到 node0 上(node2 机器上执行):
consul join -rpc-addr=192.168.11.145:8400 192.168.11.143
这样一个简单的 Consul 集群就搭建完成了,在 node1 上查看当前集群节点:
consul members -rpc-addr=192.168.11.143:8400
结果如下:
node0 192.168.11.143:8301 alive server 0.7.0 2 dc1
node1 192.168.11.144:8301 alive client 0.7.0 2 dc1
node2 192.168.11.145:8301 alive client 0.7.0 2 dc1
192.168.1.185 启动 consul
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node 192.168.1.185-datacenter huanan –ui
192.168.3.152启动consul
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node 192.168.3.152-datacenter huanan –ui
192.168.1.235启动consul
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node 192.168.1.235-datacenter huanan -ui
此时三台机器都会打印:
2017/09/07 14:54:26 [WARN] raft: no knownpeers, aborting election
2017/09/07 14:54:26 [ERR] agent: failed tosync remote state: No cluster leader
此时三台机器还未 join,不能算是一个集群,三台机器上的 consul 均不能正常工作,因为 leader 未选出
三台机器组成 consul 集群
192.168.3.152 加入 192.168.1.185
consul join 192.168.1.185
Successfully joined cluster by contacting 1nodes.
192.168.1.235 加入 192.168.1.185
consul join 192.168.1.185
Successfully joined cluster by contacting 1nodes.
很快三台机器都会打印:
consul: New leader elected: 192.168.1.235
证明此时 leader 已经选出,集群可以正常工作
consul operator raft list-peers
192.168.1.235 192.168.1.235:8300 192.168.1.235:8300 leader true 2
192.168.1.185 192.168.1.185:8300 192.168.1.185:8300 follower true 2
192.168.3.152 192.168.3.152:8300 192.168.3.152:8300 follower true 2
可以看出集群中 192.168.1.235 是 leader,192.168.1.185 和 192.168.3.152 都是 follower
192.168.1.185 set/get 参数
在 192.168.1.185 可以正常设置 key 的值为 value,并能正常查回来
192.168.1.235 get key 的值
192.168.3.152 get key 的值
三台机器获取 key 的值均为 value,如此可知 key 的值已经在集群中同步。

