Docker之Consul基础及环境部署

Docker之Consul基础及环境部署

了解Consul

首先 Consul 有如下几个关键特性:web

服务发现:支持服务发现。你能够经过 DNS 或 HTTP 的方式获取服务信息。

健康检查:支持健康检查。能够提供与给定服务相关联的任何数量的健康检查(如 web 状态码或 cpu 使用率)。

K/V 存储:键/值对存储。你可用经过 consul 存储如动态配置之类的相关信息。

多数据中心:支持多数据中心,开箱即用。

WEB-UI:支持 WEB-UI。你可以了解你的服务如今的运行状况,一目了然,对开发运维是很是友好的。

常用组件对比图如下

Docker之Consul基础及环境部署_第1张图片

服务发现组件的选型主要从如下几个方面进行

  1. CAPdocker

一致性的强制数据统一要求,必然会致使在更新数据时部分节点处于被锁定状态,此时不可对外提供服务,影响了服务的可用性。

2. 一致性算法服务器

Raft算法将 Server 分为三种类型:Leader、Follower 和 Candidate。Leader 处理全部的查询和事务,并向 Follower 同步事务。Follower 会将全部的 RPC 查询和事务转发给 Leader 处理,它仅从 Leader 接受事务的同步。数据的一致性以 Leader 中的数据为准实现。

如下是几种常见的一致性算法

Docker之Consul基础及环境部署_第2张图片

3. 多数据中心

Consul 经过 WAN 的 Gossip 协议,完成跨数据中心的同步;而其余的产品则须要额外的开发工做来实现;

Gossip 协议是 P2P 网络中比较成熟的协议。Gossip 协议的最大的好处是,即便集群节点的数量增长,每一个节点的负载也不会增长不少,几乎是恒定的。这就容许 Consul 管理的集群规模能横向扩展到数千个节点。

Consul 的每一个 Agent 会利用 Gossip 协议互相检查在线状态,本质上是节点之间互 Ping,分担了服务器节点的心跳压力。若是有节点掉线,不用服务器节点检查,其余普通节点会发现,而后用 Gossip 广播给整个集群。

Docker之Consul基础及环境部署_第3张图片

Consul 架构

关于consul,官方有一个很直观的图片可供大家了解

Docker之Consul基础及环境部署_第4张图片

单独看数据中心 1,能够看出 consul 的集群是由 N 个 SERVER,加上 M 个 CLIENT 组成的。而不论是 SERVER 仍是 CLIENT,都是 consul 的一个节点,全部的服务均可以注册到这些节点上,正是经过这些节点实现服务注册信息的共享。

CLIENT

CLIENT 表示 consul 的 client 模式,就是客户端模式。是 consul 节点的一种模式,这种模式下,全部注册到当前节点的服务会被转发到 SERVER,自己是不持久化这些信息。

SERVER

SERVER 表示 consul 的 server 模式,代表这个 consul 是个 server,这种模式下,功能和 CLIENT 都同样,惟一不一样的是,它会把全部的信息持久化的本地,这样遇到故障,信息是能够被保留的。

SERVER-LEADER

中间那个 SERVER 下面有 LEADER 的字眼,代表这个 SERVER 是它们的老大,它和其它 SERVER 不同的一点是,它须要负责同步注册的信息给其它的 SERVER,同时也要负责各个节点的健康监测。

Docker 环境搭建

docker-compose-consul-cluster.yml

version: '3'
services:
  consul-server1:
    image: consul:latest
    hostname: "consul-server1"
    ports:
      - "8500:8500"
      - "53"
    volumes:
      - ./consul/data1:/consul/data
    command: "agent -server -bootstrap-expect 3 -ui -disable-host-node-id -client 0.0.0.0"
  consul-server2:
    image: consul:latest
    hostname: "consul-server2"
    ports:
      - "8501:8500"
      - "53"
    volumes:
      - ./consul/data2:/consul/data
    command: "agent -server -ui -join consul-server1 -disable-host-node-id -client 0.0.0.0"
    depends_on:
      - consul-server1
  consul-server3:
    image: consul:latest
    hostname: "consul-server3"
    ports:
      - "8502:8500"
      - "53"
    volumes:
      - ./consul/data3:/consul/data
    command: "agent -server -ui -join consul-server1 -disable-host-node-id -client 0.0.0.0"
    depends_on:
      - consul-server1
  consul-node1:
    image: consul:latest
    hostname: "consul-node1"
    command: "agent -join consul-server1 -disable-host-node-id"
    depends_on:
      - consul-server1
  consul-node2:
    image: consul:latest
    hostname: "consul-node2"
    command: "agent -join consul-server1 -disable-host-node-id"
    depends_on:
      - consul-server1

执行 docker-compose -f docker-compose-consul-cluster.yml up -d 启动,而后访问

h ttp://localhost:8500,如果可以看到下图那就算启动成功了。

Docker之Consul基础及环境部署_第5张图片

小结:docker consul,consul是领事(零食)的意思,欢迎大家开袋即食,吃的开心!~

Docker之Consul基础及环境部署_第6张图片

Docker之Consul基础及环境部署_第7张图片

Docker之Consul基础及环境部署_第8张图片

你可能感兴趣的:(docker,consul)