Consul docker 集群部署与测试
in Tutorial with 0 comment
Consul docker 集群部署与测试
in Tutorial with 0 comment

认识 Consul

Consul有多个组件,但是整体来看,它是你基础设施中用于发现和配置服务的一个工具。它提供如下几个关键功能:

Consul被设计为对DevOps群体和应用开发者友好,他非常适合现代的、可伸缩的基础设施。

下面开始搭建 Consul 集群和测试

配置过程

1、拉取官方镜像

docker search consul
docker pull consul

2、启动consul

docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node1 consul agent -server -bind=172.26.0.2 -bootstrap-expect=3 -node=node1

-node:节点的名称

-bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址

-server:这个就是表示这个节点是个SERVER

-bootstrap-expect:这个就是表示期望提供的SERVER节点数目,数目一达到,它就会被激活,然后就是LEADER了

docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node2 consul agent -server -bind=172.26.0.3  -join=172.26.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}')  -node=node2
docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node3 consul agent -server -bind=172.26.0.4  -join=172.26.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}')  -node=node3 -client=172.26.0.4

-join:这个表示启动的时候,要加入到哪个集群内,这里就是说要加入到节点1的集群

-node-id:这个貌似版本8才加入的,这里用这个来指定唯一的节点ID,可以查看这个issue

-client:这个表示注册或者查询等一系列客户端对它操作的IP,如果不指定这个IP,默认是127.0.0.1。

docker run -d -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' --name=node4 consul agent -bind=172.26.0.5 -retry-join=172.26.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}')  -node=node4

测试过程

3、查看集群状态

docker exec -t node1 consul members

返回

Node   Address          Status  Type    Build  Protocol  DC   Segment
node1  172.26.0.2:8301  alive   server  1.0.6  2         dc1  <all>
node2  172.26.0.3:8301  alive   server  1.0.6  2         dc1  <all>
node3  172.26.0.4:8301  alive   server  1.0.6  2         dc1  <all>
node4  172.26.0.5:8301  alive   client  1.0.6  2         dc1  <default>

4、查看 leader

curl http://172.26.0.4:8500/v1/status/leader
// 返回
"172.26.0.2:8300"

5、添加新节点

docker run -d -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' --name=node6 consul agent -bind=172.26.0.6 -retry-join=172.26.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}')  -node=node6

查看node1日志 docker logs node1,成功添加信息如下,可以再检查一下集群状态

2018/03/21 02:56:21 [INFO] serf: EventMemberJoin: node6.dc1 172.26.0.6
2018/03/21 02:56:21 [INFO] consul: Handled member-join event for server "node6.dc1" in area "wan"
2018/03/21 02:56:21 [INFO] serf: EventMemberJoin: node6 172.26.0.6
2018/03/21 02:56:21 [INFO] consul: Adding LAN server node6 (Addr: tcp/172.26.0.6:8300) (DC: dc1)

6、节点异常consul的处理

停掉 node1 , 其他节点会重新选举出新的 leader

docker stop node1

看看其他节点的日志 docker logs node2,日志打印,心跳检查node1的ip超时,接着开始选举,node6被选举为新的leader。

Heartbeat timeout from "172.26.0.2:8300" reached, starting election
consul: New leader elected: node6

收官~

Responses