• 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会提供最低的资源开销并且仅消耗少量的网络带宽。
    
  • 相关阅读:
    CS224n, lec 10, NMT & Seq2Seq Attn
    CS231n笔记 Lecture 11, Detection and Segmentation
    CS231n笔记 Lecture 10, Recurrent Neural Networks
    CS231n笔记 Lecture 9, CNN Architectures
    CS231n笔记 Lecture 8, Deep Learning Software
    CS231n笔记 Lecture 7, Training Neural Networks, Part 2
    pytorch坑点排雷
    Sorry, Ubuntu 17.10 has experienced an internal error
    VSCode配置python插件
    tmux配置与使用
  • 原文地址:https://www.cnblogs.com/net666/p/12944655.html
Copyright © 2020-2023  润新知