zoukankan      html  css  js  c++  java
  • Docker搭建Consul集群

    了解 Consul

    • Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 Consul 支持 健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对.
    • 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
    • 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.

    Consul关键特性

    • 服务发现:支持服务发现。你可以通过 DNS 或 HTTP 的方式获取服务信息。
    • 健康检查:支持健康检查。可以提供与给定服务相关联的任何数量的健康检查(如 web 状态码或 cpu 使用率)。
    • K/V 存储:键/值对存储。你可用通过 consul 存储如动态配置之类的相关信息。
    • 多数据中心:支持多数据中心,开箱即用。
    • WEB-UI:支持WEB-UI。点点点,你就能够了解你的服务现在的运行情况,一目了然,对开发运维是非常友好的。

    Consul集群概念

    • Client:表示 Consul 客户端模式,是 Consul 节点的一种模式,所有注册到 Client 节点的服务会被转发到 Server 。本身无状态不持久化如何数据。Client 通过 HTTP、DNS、GRPC 接口请求转发给局域网内的服务端集群。
    • Server:表示 Consul 的服务端模式, Server 功能和 Client 都一样,不同的是 Server 持久化数据到本地。在局域网内与本地 Client 通讯,通过广域网与其他数据中心通讯。每个数据中心的 Server 数量推荐为 3 个或是 5 个。
    • Server-Leader :表示这个 Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server 节点,同时也要负责各个节点的健康监测。如果 Leader 宕机了,通数据中心的所有 Server 内部会使用 Raft 算法来在其中选取一个 Leader 出来。
    • Agent :Agent 是 Consul 的核心进程,Agent 的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul 集群的每一个节点都必须运行 agent 进程。

    Consul与其他同类产品优势

    开始实战

    拉取Consul镜像

    docker pull consul
    

    Consul挂载目录

    /consul/data 持久化数据存储
    
    /consul/config 配置文件
    

    创建Consul Server节点

    docker run -d -p 8001:8500 --restart=always 
    --mount type=volume,source=consul-data-1,target=/consul/data 
    --mount type=volume,source=consul-conf-1,target=/consul/config 
    -e CONSUL_BIND_INTERFACE='eth0' 
    --name consul-server-1 consul agent -server -node server-1 
    --bootstrap-expect 3 -client 0.0.0.0 -ui 
    -data-dir=/consul/data -config-dir=/consul/config -datacenter=dh_dc
    

    创建其他Consul节点并且加入集群

    docker run -d -p 8001:8500 --restart=always 
    --mount type=volume,source=consul-data-1,target=/consul/data 
    --mount type=volume,source=consul-conf-1,target=/consul/config 
    -e CONSUL_BIND_INTERFACE='eth0' 
    --name consul-server-1 consul agent -server -node server-1 
    --bootstrap-expect 3 -client 0.0.0.0 -ui 
    -data-dir=/consul/data -config-dir=/consul/config -datacenter=dh_dc -join=172.17.0.2
    

    创建Consul Client节点

    docker run -d -p 8500:8500 --restart=always 
    --mount type=volume,source=consul-data-4,target=/consul/data 
    --mount type=volume,source=consul-conf-4,target=/consul/config 
    -e CONSUL_BIND_INTERFACE='eth0' --name=consul-client-1 consul 
    agent -node=client-1 -join=172.17.0.2 -client='0.0.0.0' -datacenter=dh_dc 
    -ui -config-dir /consul/config -data-dir=/consul/data
    

    查询Consul集群信息

    docker exec consul-server-1consul members
    

    命令介绍

    agent : 表示启动 Agent 进程。
    -server:表示启动 Consul Server 模式。
    -client:表示启动 Consul Cilent 模式。
    -bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。
    -bootstrap-expect:集群期望的 Server 节点数,只有达到这个值才会选举 Leader
    -ui:表示启动 Web UI 管理器
    -node:节点的名称,集群中必须是唯一的。
    -client:表示 Consul 将绑定客户端接口的地址,0.0.0.0 表示所有地址都可以访问。
    -join:表示加入到某一个集群中去。 如:-join=192.168.1.23
    -bind: 指定节点绑定的地址
    -datacenter: 数据中心
    -config-file: 要加载的配置文件
    ---
    **环境变量介绍**
    CONSUL_CLIENT_INTERFACE :配置 Consul 的 -client=<interface ip> 命令参数。
    CONSUL_BIND_INTERFACE :配置 Consul 的 -bind=<interface ip> 命令参数。
    CONSUL_DATA_DIR :配置 Consul 的数据持久化目录。
    CONSUL_CONFIG_DIR:配置 Consul 的配置文件目录。
    

    端口介绍

    TCP/8300	8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。服务器节点之间相互调用
    TCP/UDP/8301	8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN 池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。
    TCP/UDP/8302	8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。
    8500	8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。
    8600	8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。
    

    使用ACL控制权限

    开启ACL,在Consul配置文件增加如下配置 acl.json

    {
      "acl": {
        "enabled": true,
        "default_policy": "deny",
        "down_policy": "extend-cache"
      }
    }
    

    进入consul容器

    docker exec -it consul-name bin/sh
    

    生成第一个无限权限的令牌

    consul acl bootstrap
    

    Consul策略表

    在UI 操作ACL,添加策略,分配角色,生成角色Token。

    添加策略示例
    service_prefix "" {
      policy = "write"
      }
    key_prefix "" {
      policy = "write"
      }
    node_prefix "" {
      policy = "write"
      }
    

    为什么有了server端,还要再弄一个client?

    一个Client是一个转发所有RPC到server的代理,它本身不持久化这些信息。client是相对无状态的。client唯一执行的后台动作是加入LAN gossip池。client会提供最低的资源开销并且仅消耗少量的网络带宽。
    
  • 相关阅读:
    打标签tag
    高阶函数
    anywhere执行时端口被占用Address already in use:8080解决方法
    时间戳常见转化
    generator(生成器)
    Promise详解(转载)
    在手机上预览自己的本地h5页面
    箭头函数中的this
    扩展运算符
    38.线程
  • 原文地址:https://www.cnblogs.com/net666/p/12944655.html
Copyright © 2011-2022 走看看