1.DataCenter 的所有节点都通过 Gossip 协议(常用于 P2P 的通信协议),种子节点(当一个节点启动的时候,它会从配置文件中读取配置信息,这样它就知道它属于哪个集群,它需要跟哪个节点通信以获取其他节点信息,这个通信节点称为种子节点。)每秒都会随机向其他节点发送自己所拥有的节点列表,以及需要传播的消息。任何新加入的节点,就在这种传播方式下很快地被全网所知道。实现彼此之间的通信。Client 到 Server 是通过 LAN Gossip,而 DataCenter 之间的通信和服务请求则通过 WAN Gossip 来随机请求另外一个 DataCenter 的 Server 节点,这个节点获取请求后再 forward 到本 DataCenter 的 leader 节点上。
2.Server leader 的选举是通过 Consul 的 Raft 算法实现,Leader 节点需要负责所有请求和处理,并复制给所有其他的 Server 节点。反之,非 Leader 节点接收到 RPC (Remote Procedure Call Protocol)请求的时候也会 forward 到 leader 节点。
本章主要讲述 consul 的特点和工作机制,接下来将通过实例让大家学会使用 consul 工具。
如何使用 Consul 实现 Docker Swarm 集群的搭建本章将详细讲述使用 Consul 实现 Docker Swarm 集群配置的完整过程。整个过程主要包括三个部分,首先要准备必要的资源,其次创建提供服务的 consul 集群,最后创建 Docker swarm 集群。
配置搭建环境准备 3 台 CentOS 7.0 系统
安装 Docker 1.8.1
编辑 /etc/sysconfig/docker 文件添加如下参数值:
other_args="-H=unix:///var/run/docker.sock-H=0.0.0.0:2375"
(2375 为 docker deamon 的监听端口)
下载 swarm 镜像,consul 安装包和提供 consul UI 界面的 dist 包
为了让大家更直观的了解本环境,特用表格展现所用主机信息及其在集群中扮演的角色和运行模式,表 1 如下所示:
表 1.节点角色定义表格
主机名IP集群角色Agent 模式
consulsvr
192.168.116.111
Server leader
server
consul01
192.168.116.112
Server
server
consul02
192.168.116.113
Server
server
1.在表 1 定义的三台主机上分别安装 consul 和 dist
#unzip 0.5.2_linux_amd64.zip
命令解释:解压缩 consul 安装包
#cp consul /usr/local/bin
命令解释:把 consul 执行文件拷贝到/usr/local/bin 下,这个路径已经添加到系统环境变量中,便于用户在任何路径下都可直接执行 consul 文件。
#unzip 0.5.2_web_ui.zip
命令解释:解压缩提供 web 界面的安装包
2.在表 1 定义的集群角色 Server leader 节点上运行
#consul agent -server -bootstrap -data-dir /home/data_consul -client 0.0.0.0 -bind=192.168.116.111 -ui-dir /home/dist -node=consulsvr -dc=datacenter &
命令解释:定义节点 consulsvr 的 agent 运行在 server 模式;参数"-bootstrap"表示在 datacenter 中只能有一个 server 处于 bootstrap 模式并使自己成为 leader 角色;参数"-data-dir"表示提供一个目录用来存放 agent 的状态;参数"client"表示 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS 等服务,值"0.0.0.0"表示 client 地址不明确,表示的是一个本机的路由表里没有特定条目指明地址的集合;参数"-bind"表示该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,这里定义的 192.168.116.111 是主机 consulsvr 的 IP 地址;参数"-ui-dir"表示提供存放 web ui 资源的路径,该目录必须是可读的;参数"-node"表示节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名;参数"-dc"表示 datacenter 的名称。
3.在表 1 定义的其他 Server 节点上分别运行
#consul agent -server -data-dir /home/data_consul -client 0.0.0.0 -bind=192.168.116.112 -ui-dir /home/dist -node=consul01 -dc=datacenter &
命令解释:用法同上,需要注意的就是不使用参数"-bootstrap","-bind"绑定的地址是表 1 定义的节点 consul01 的 IP 地址,参数"-node"定义的节点主机名是 consul01。
#consul agent -server -data-dir /home/data_consul -client 0.0.0.0 -bind=192.168.116.113 -ui-dir /home/dist -node=consul02 -dc=datacenter &
4.添加成员到 consul 集群
#consul join 192.168.116.112 192.168.116.113
命令解释:把表 1 定义的节点主机名 consul01 和 consul02 添加到 consul 集群中。
5.验证配置 consul 集群是否成功的三种方式
a. #consul members
结果说明:Status 值为 alive 表明节点健康,三个节点状态都是 alive 表明集群运行正常。
b. #curl 192.168.116.111:8500/v1/catalog/nodes
结果说明:这条命令的目的是查看当前集群的所有成员,结果表明三个成员都在集群内。
c. 在浏览器输入 :8500