精华内容
下载资源
问答
  • consul集群部署
    2020-07-28 23:47:29


    高可用性单集群架构
    在这里插入图片描述
    所有的 Consul 主机上都要完成以下步骤。

    • 下载 Consul
    • 安装 Consul
    • 配置 systemd
    • 配置 Consul (server) 或 (client)
    • 启动 Consul

    本手册适用于运行着 systemd 和服务管理器的类 Linux 主机。

    下载 Consul

    可以从 https://releases.hashicorp.com/consul/ 下载预编译好的二进制文件。企业版请从指定地址下载。

    下载完成后校验一下压缩包完整性。官方提供了校验方案。

    CONSUL_VERSION="1.8.0"
    curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
    curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS
    curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS.sig
    

    安装 Consul

    解压已下载的包,移动 consul 到 /usr/local/bin,检查是否在系统路径可用。

    unzip consul_${CONSUL_VERSION}_linux_amd64.zip
    sudo chown root:root consul
    sudo mv consul /usr/local/bin/
    consul --version
    

    consul 命令支持参数、标识和子命令的自动补全,建议启用:

    consul -autocomplete-install
    

    创建一个没有权限的系统用户来运行 Consul,并分配一个数据目录:

    sudo useradd --system --home /etc/consul.d --shell /bin/false consul
    sudo mkdir --parents /opt/consul
    sudo chown --recursive consul:consul /opt/consul
    

    配置 systemd

    Systemd 使用文档中的默认设置,所以需要写配置文件来定义非默认服务。
    创建一个配置文件:

    sudo touch /etc/systemd/system/consul.service
    

    配置 Consul 服务:

    [Unit]
    Description="HashiCorp Consul - A service mesh solution"
    Documentation=https://www.consul.io/
    Requires=network-online.target
    After=network-online.target
    ConditionFileNotEmpty=/etc/consul.d/consul.hcl
    
    [Service]
    User=consul
    Group=consul
    ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
    ExecReload=/usr/local/bin/consul reload
    KillMode=process
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    

    下面是 [Unit] 节的参数说明:

    • Description - 服务描述
    • Documentation - 文档地址
    • Requires - 指定网络依赖
    • After - 指定网络服务必须在该服务之前启动
    • ConditionFileNotEmpty - 检查配置文件是否为空

    下面是 [Service] 节的参数说明:

    • User, Group - 以 consul 用户和组来运行 Consul
    • ExecStart - 用 agent 命令启动并制定配置文件目录
    • ExecReload - 服务重新加载的执行指令
    • KillMode - 把 Consul 当成单个进程
    • Restart - 如果异常退出就重新启动进行
    • LimitNOFILE - 限制文件描述符数量

    下面是 [Install] 节的参数说明:

    • WantedBy - 为多用户运行级别创建弱依赖

    配置 Consul (server)

    Consul 使用该文档的默认配置,自定义的配置可以从多个文件中读取,参见文档了解配置是如何加载和覆盖默认值的。

    Consul server agent 需要的配置是 client agent 的超集。我们用 consul.hcl 表示普通 Consul 配置文件,用 server.hcl 表示 server agent 的配置。

    通常配置

    创建一个配置文件 /etc/consul.d/consul.hcl:

    sudo mkdir --parents /etc/consul.d
    sudo touch /etc/consul.d/consul.hcl
    sudo chown --recursive consul:consul /etc/consul.d
    sudo chmod 640 /etc/consul.d/consul.hcl
    

    向 consul.hcl 加入如下配置:

    提示 datacenter 参数标识该集群所在的数据中心。encrypt 参数用 consul keygen 的输出来替换,而且每台机器配置都要保持一致。

    datacenter = "dc1"
    data_dir = "/opt/consul"
    encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
    
    • datacenter - agent 所在的数据中心。
    • data_dir - agent 存储状态的目录。
    • encrypt - Consul 网络通信的加密密钥。

    自动加入集群

    retry_join 参数可以通过 DNS 地址、IP 地址或云机制,通过一个 Consul server配置集群里所有 Consul agent,而不需要手动加入这些节点了。

    该参数可以写到 consul.hcl 配置里:

    提示 可以用 DNS 地址、IP 地址或者云服务自动加入标识来配置 retry_join 参数。

    retry_join = ["172.16.0.11"]
    
    • retry_join - 要加入的集群某个 agent 的地址。

    Server 配置

    创建配置文件 /etc/consul.d/server.hcl

    sudo mkdir --parents /etc/consul.d
    sudo touch /etc/consul.d/server.hcl
    sudo chown --recursive consul:consul /etc/consul.d
    sudo chmod 640 /etc/consul.d/server.hcl
    

    按如下修改 server.hcl:
    提示 bootstrap_expect 是你要用的 server 数,推荐 3 或 5。

    server = true
    bootstrap_expect = 2
    
    • server - 表示该 agent 运行在 server 模式还是 client 模式。
    • bootstrap-expect - 表示该数据中心有多少 server 节点。集群中的所有 server 节点的该字段都应一致。

    Consul UI

    Consul 提供了基于 Web 的用户界面,可以在上面查看所有服务、节点和 Intention,比使用 CLI 或者 API 方便得多。

    提示 你应该选择一台服务器来提供 Consul UI 服务。

    将 UI 选项加入 server.hcl 即可启用 Consul UI:

    ui = true
    

    配置 Consul (client)

    Consul client agent 的配置其实是 server 的一个子集,参见前面配置一下 consul.hcl 就可以了。其他特殊配置,也只需要逐一写配置文件即可。

    启动 Consul

    使用 systemctl 来添加和启用 Consul 服务。也可以用 systemctl 查看 Consul 服务状态:

    sudo systemctl enable consul
    sudo systemctl start consul
    sudo systemctl status consul
    

    或者s

    consul agent -server -bind=0.0.0.0 -client=0.0.0.0  -config-dir=/etc/consul.d/
    
    更多相关内容
  • Consul 集群部署

    2022-07-19 10:39:30
    Consul是HashiCorp公司推出的开源软件,通过GO语言编写,提供服务注册和发现、配置、多数据中心的高可用方案等能力,分布式一致方面采用raft算法实现,并且很容易和SpringCloud等微服务框架集成,使用起来非常简单,...

    Consul 简介

    Consul是HashiCorp公司推出的开源软件,基于 GO 语言编写,提供服务注册和发现、配置、多数据中心的高可用方案等能力,分布式一致方面采用 raft 算法实现,并且很容易和 Spring Cloud 等微服务框架集成,使用起来非常简单,具有简单、易用、可插排等特点。

    简而言之,Consul 是服务网格的控制平面,Consul 提供了一种完整的服务网格解决方案。

    在这里插入图片描述
    Consul 运行的节点连接在一起,称为数据中心,一个数据中心将有 3 到 5 台服务器和许多客户端。Consul集群架构如下:
    在这里插入图片描述

    Consul 集群部署

    此处采用的是 3Server + 1Client 的集群架构,3 台 Server 在单独的虚拟机上,1 台 Client 则直接在部署服务的宿主机运行。

    节点名称节点IPAgent类型OS版本
    consul-01192.168.94.10serverUbuntu 22.04 LTS
    consul-02192.168.94.11serverUbuntu 22.04 LTS
    consul-03192.168.94.12serverUbuntu 22.04 LTS
    consul-client192.168.94.13clientUbuntu 22.04 LTS

    1、安装 Consul

    配置主机名,命令示例:(以下操作在所有节点配置)

     hostnamectl set-hostname consul-01
     hostnamectl set-hostname consul-02
     hostnamectl set-hostname consul-03
     hostnamectl set-hostname consul-client
    

    下载consul二进制文件

    export VER="1.12.3"
    wget https://releases.hashicorp.com/consul/${VER}/consul_${VER}_linux_amd64.zip
    

    解压安装

    apt install -y unzip
    unzip consul_${VER}_linux_amd64.zip -d /usr/local/bin/
    

    查看版本

     consul version
    

    创建consul用户和组

    sudo groupadd --system consul
    sudo useradd -s /sbin/nologin --system -g consul consul
    

    创建consul安装目录

    mkdir -p /data/consul/{config,data,logs}
    chown -R consul:consul /data/consul
    chmod -R 775 /data/consul
    

    设置 DNS 或编辑/etc/hosts 文件以配置所有服务器的主机名,替换example.com为您的实际域名。

    cat >/etc/hosts<<EOF
    192.168.94.10 consul-01.example.com consul-01
    192.168.94.11 consul-02.example.com consul-02
    192.168.94.12 consul-03.example.com consul-03
    192.168.94.13 consul-client.example.com consul-client
    EOF
    

    2、Server 节点配置

    生成Consul secret

    consul keygen
    

    为server节点创建json配置文件,其他节点配置修改IP地址及节点名称即可

    consul-01节点

    cat >/data/consul/config/consul.json<<EOF
    {
        "advertise_addr": "192.168.94.10",
        "bind_addr": "192.168.94.10",
        "bootstrap_expect": 3,
        "client_addr": "0.0.0.0",
        "datacenter": "DC1",
        "node_name": "consul-01", 
        "data_dir": "/data/consul/data",
        "domain": "consul",
        "enable_script_checks": true,
        "dns_config": {
            "enable_truncate": true,
            "only_passing": true
        },
        "enable_syslog": true,
        "encrypt": "F0VSq05Die32sMUimbZ2LAzUIc5Ry4jCL2ouwz/Gu8Q=",
        "leave_on_terminate": true,
        "log_level": "INFO",
        "rejoin_after_leave": true,
        "retry_join": [
         "consul-01",
         "consul-02",
         "consul-03"
        ],
        "server": true,
        "start_join": [
            "consul-01",
            "consul-02",
            "consul-03"
        ],
        "ui": true
    }
    EOF
    

    配置参数说明:

    • datacenter:此标志控制运行代理的数据中心。如果未提供,则默认为dc1。Consul 对多个数据中心有一流的支持,但它依赖于正确的配置。同一数据中心中的节点应位于单个 LAN 上。

    • data_dir:该标志为代理提供了一个数据目录来存储状态。

    • node_name:节点名字,一般为主机名。

    • server:指定是否为server节点。

    • bootstrap_expect:在一个datacenter中期望提供的server节点数目,当提供该值的时候,consul一直等到达到指定sever数目才会引导整个集群,该标记不能和bootstrap公用。

    • bind_addr:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0。

    • client_addr:Consul 将绑定客户端接口的地址,包括 HTTP 和 DNS 服务器。默认情况下,这是127.0.0.1,仅允许环回连接。在 Consul 1.0 及更高版本中,这可以设置为要绑定到的以空格分隔的地址列表。

    • log_json:此标志使代理能够以 JSON 格式输出日志。默认为false。

    • log_level:在 Consul 代理启动后显示的日志级别。默认为 info 。可用的日志级别是tracedebuginfowarnerr

    • retry_join:指定将要置入集群的IP列表,如果失败,会自动重试,知道直到成功加入。

    • start_join:启动时加入集群的地址

    • ui_config:此对象允许设置多个子键,用于控制 UI 中可用的显示或功能。

    • rejoin_after_leave :允许重新加入集群

    consul-02节点

    cat >/data/consul/config/consul.json<<EOF
    {
        "advertise_addr": "192.168.94.11",
        "bind_addr": "192.168.94.11",
        "bootstrap_expect": 3,
        "client_addr": "0.0.0.0",
        "datacenter": "DC1",
        "node_name": "consul-02", 
        "data_dir": "/data/consul/data",
        "domain": "consul",
        "enable_script_checks": true,
        "dns_config": {
            "enable_truncate": true,
            "only_passing": true
        },
        "enable_syslog": true,
        "encrypt": "F0VSq05Die32sMUimbZ2LAzUIc5Ry4jCL2ouwz/Gu8Q=",
        "leave_on_terminate": true,
        "log_level": "INFO",
        "rejoin_after_leave": true,
        "retry_join": [
         "consul-01",
         "consul-02",
         "consul-03"
        ],
        "server": true,
        "start_join": [
            "consul-01",
            "consul-02",
            "consul-03"
        ],
        "ui": true
    }
    EOF
    

    consul-03节点

    cat >/data/consul/config/consul.json<<EOF
    {
        "advertise_addr": "192.168.94.12",
        "bind_addr": "192.168.94.12",
        "bootstrap_expect": 3,
        "client_addr": "0.0.0.0",
        "datacenter": "DC1",
        "node_name": "consul-03", 
        "data_dir": "/data/consul/data",
        "domain": "consul",
        "enable_script_checks": true,
        "dns_config": {
            "enable_truncate": true,
            "only_passing": true
        },
        "enable_syslog": true,
        "encrypt": "F0VSq05Die32sMUimbZ2LAzUIc5Ry4jCL2ouwz/Gu8Q=",
        "leave_on_terminate": true,
        "log_level": "INFO",
        "rejoin_after_leave": true,
        "retry_join": [
         "consul-01",
         "consul-02",
         "consul-03"
        ],
        "server": true,
        "start_join": [
            "consul-01",
            "consul-02",
            "consul-03"
        ],
        "ui": true
    }
    EOF
    

    3、Client 节点配置

    client是consul客户端,客户端不保存数据,客户端将接收到的请求转发给Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。

    创建consul-client节点配置文件

    cat >/data/consul/config/consul.json<<EOF
    {
        "advertise_addr": "192.168.94.13",
        "bind_addr": "192.168.94.13",
        "client_addr": "0.0.0.0",
        "datacenter": "DC1",
        "node_name": "consul-client", 
        "data_dir": "/data/consul/data",
        "domain": "consul",
        "enable_script_checks": true,
        "dns_config": {
            "enable_truncate": true,
            "only_passing": true
        },
        "enable_syslog": true,
        "encrypt": "F0VSq05Die32sMUimbZ2LAzUIc5Ry4jCL2ouwz/Gu8Q=",
        "leave_on_terminate": true,
        "log_level": "INFO",
        "rejoin_after_leave": true,
        "retry_join": [
         "consul-01",
         "consul-02",
         "consul-03"
        ],
        "server": false,
        "start_join": [
            "consul-01",
            "consul-02",
            "consul-03"
        ],
        "ui": true
    }
    EOF
    

    4、systemd 启动文件

    所有节点创建systemd 服务文件/etc/systemd/system/consul.service,所有节点具有相同内容,配置如下:

    cat >/etc/systemd/system/consul.service<<EOF
    [Unit]
    Description=Consul Service Discovery Agent
    Documentation=https://www.consul.io/
    After=network-online.target
    Wants=network-online.target
    
    
    [Service]
    Type=simple
    User=consul
    Group=consul
    ExecStart=/usr/local/bin/consul agent -config-dir=/data/consul/config/consul.json
    
    
    ExecReload=/bin/kill -HUP $MAINPID
    KillSignal=SIGINT
    TimeoutStopSec=5
    Restart=on-failure
    SyslogIdentifier=consul
    
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

    所有节点启动consul服务

    systemctl enable --now consul.service
    

    查看consul服务运行状态

    root@consul-01:~# systemctl status consul
    ● consul.service - Consul Service Discovery Agent
         Loaded: loaded (/etc/systemd/system/consul.service; enabled; vendor preset: enabled)
         Active: active (running) since Tue 2022-07-19 11:17:02 CST; 3s ago
           Docs: https://www.consul.io/
       Main PID: 46248 (consul)
          Tasks: 8 (limit: 4537)
         Memory: 23.3M
            CPU: 249ms
         CGroup: /system.slice/consul.service
                 └─46248 /usr/local/bin/consul agent -config-dir=/data/consul/config/consul.json
    
    Jul 19 11:17:03 consul-01 consul[46248]: agent: Joining cluster
    Jul 19 11:17:03 consul-01 consul[46248]: agent: (LAN) joining: lan_addresses=[consul-01, consul-02, consul-03]
    Jul 19 11:17:03 consul-01 consul[46248]: agent: (LAN) joined: number_of_nodes=3
    Jul 19 11:17:03 consul-01 consul[46248]: agent: Join cluster completed. Synced with initial agents: cluster=LAN num_agents=3
    Jul 19 11:17:03 consul-01 consul[46248]: agent: (LAN) joined: number_of_nodes=3
    Jul 19 11:17:03 consul-01 consul[46248]: agent: Join completed. Initial agents synced with: agent_count=3
    Jul 19 11:17:03 consul-01 consul[46248]: agent: started state syncer
    Jul 19 11:17:03 consul-01 consul[46248]: agent: Consul agent running!
    Jul 19 11:17:03 consul-01 consul[46248]: 2022-07-19T11:17:03.431+0800 [INFO]  agent: Synced node info
    Jul 19 11:17:03 consul-01 consul[46248]: agent: Synced node info
    

    5、查看 Consul 集群状态

    3 台 Server 和 1 台 Client 上的 Consul 服务都启动后会根据 consul.json 中的配置自动组成一个集群,并且 Server 会通过 Raft 协议在 Server 节点中选举出 leader 节点。

    可以用如下命令在任意一台机器上查看集群节点状态:

    root@consul-01:~# consul members
    Node           Address             Status  Type    Build   Protocol  DC   Partition  Segment
    consul-01      192.168.94.10:8301  alive   server  1.12.3  2         dc1  default    <all>
    consul-02      192.168.94.11:8301  alive   server  1.12.3  2         dc1  default    <all>
    consul-03      192.168.94.12:8301  alive   server  1.12.3  2         dc1  default    <all>
    consul-client  192.168.94.13:8301  alive   client  1.12.3  2         dc1  default    <default>
    

    查看server节点成员状态信息:

    root@consul-01:~# consul operator raft list-peers
    Node       ID                                    Address             State     Voter  RaftProtocol
    consul-02  edefb129-e0fd-804d-bbfb-76e259077d03  192.168.94.11:8300  leader    true   3
    consul-01  50f9830f-45cd-683c-2382-77e1cf6d6e48  192.168.94.10:8300  follower  true   3
    consul-03  5dae09d2-7079-4611-1ab5-7728d0966cbe  192.168.94.12:8300  follower  true   3
    

    访问Consul UI:http://192.168.94.10:8500/ui

    在这里插入图片描述

    参考:

    展开全文
  • Consul集群部署

    千次阅读 2020-09-02 18:53:20
    Agent:是在 Consul 集群的每个成员上长期运行的守护进程,通过命令 consul agent 启动运行。由于所有节点都必须运行一个 Agent,因此 Agent 可以分为 client 或 Server。 所有的 Agent 都可以运行DN

    Consul介绍

    Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul 是分布式的、高可用的、可横向扩展的。

    官网:https://www.consul.io,最新版本:1.8.3

    • 概念:
    Agent:是在 Consul 集群的每个成员上长期运行的守护进程,通过命令 consul agent 启动运行。由于所有节点都必须运行一个 Agent,因此 Agent 可以分为 client 或 Server。
           所有的 Agent 都可以运行DNS或HTTP接口,并负责运行监测和保持服务同步
    
    Client:是将所有RPC转发到 Server 的 Agent。Client 是相对无状态的,Client 唯一执行的后台活动是加入 LAN gossip 池。这只有最小的资源开销,且只消耗少量的网络带宽
    
    Server:是一个有一组扩展功能的 Agent,这些功能包括参与 Raft 选举、维护集群状态、响应RPC查询、与其他数据中心交互 WAN gossip 和转发查询给 leader 或远程的数据中心
    
    Datacenter:是一个私有的、低延迟和高带宽的网络环境。这不包括通过公网的通信,但就目的而言,单个 EC2 中的多个可用区域被视为数据中心的一部分
    
    Consensus:一致性。Consul 使用 Consensus 协议(具体由 Raft 算法实现)来提供一致性(由 CAP 定义),表明 leader 选举和事务的顺序达成一致
    
    Gossip:Consul 使用 Gossip 协议来管理成员资格并向集群广播消息。Serf 提供了完整的 Gossip 协议,可用于多种目的,而 Consul 建立在 Serf 之上。
            Gossip 涉及节点到节点的随机通信,主要是通过UDP。Gossip 协议也被称为 Epidemic 协议(流行病协议)
    
    LAN Gossip:指包含所有位于同一局域网或数据中心的节点的 LAN gossip 池
    
    WAN Gossip:指仅包含 Server 的 WAN gossip 池。这些 Server 主要分布在不同的数据中心,通常通过Internet或者广域网进行通信
    
    RPC:远程过程调用。一种 请求/响应 机制,允许 Client 向 Server 发起请求
    
    • 架构图:

    在这里插入图片描述

    可以看到有两个数据中心,每个数据中心中都有 Client 和 Server。Server的数量建议是 3 或 5 台,这能平衡故障情况下的可用性和集群性能。Server 数量越多,达成一致性也会越慢,但是 Client 的数量没有限制。

    其次,数据中心中的所有 Agent 都加入 gossip 协议,这意味着存在一个给定数据中心的所有 Agent 的 gossip 池。这样做有几个目的:

    1. 不需要为 Client 配置 Server 地址,发现是自动完成的;
    
    2. 检测 Agent 故障的工作不是放在 Server 上、而是分布式的,这使得故障检测更具可伸缩性;
    
    3. 它被用作一个消息层,已通知何时发生重要事件(例如 leader 选举)
    

    每个数据中心的 Server 都是单个 Raft 对等集的一部分,这意味着它们将共同选举出一个 leader,leader 负责处理所有查询和事务。作为 consensus 协议的一部分,事务必须复制到所有对等方。由于这一需求,当 非 leader Server 收到RPC请求时,它将转发给 leader Server。

    Server 还作为 WAN gossip 池的一部分运行。WAN gossip 池与 LAN gossip 池不同,因为它针对Internet更高的延迟进行了优化,并且仅包含其他 Consul Server。WAN gossip 池的目的是允许数据中心以一种低接触的方式发现彼此,在线连接新的数据中心就像加入现有的 WAN gossip 池一样简单。由于 Server 都在 WAN gossip 池中运行,因此它还支持跨数据中心请求。Server 收到其他数据中心的请求时,会将其转发到正确的数据中心的随机 Server,然后该 Server 可以转发给本地的 leader。这就让数据中心之间的耦合非常低,由于故障检测、连接缓存和多路复用,跨数据中心的请求相对较快且可靠。

    通常,不会在不同的 Consul 数据中心之间复制数据。当请求另一个数据中心的资源时,本地 Consul Server 将RPC请求转发到该资源的远程 Consul Server 并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会影响本地数据中心。在某些特殊情况下,可以复制有限的数据子集,例如使用 Consul 内置的 ACL复制 功能,或使用诸如 consul-replicate 之类的外部工具。

    • 特点:
    多数据中心: Consul 支持任意数量的数据中心,而不需要复杂的配置
    
    服务网格/服务细分:Consul Connect通过自动TLS加密和基于身份的授权来实现安全的服务间通信。
                     应用程序可以在服务网格配置中使用sidecar代理来为入站和出站连接建立TLS连接,而根本不知道Connect
    
    服务发现: Consul 使服务易于注册自己,并通过DNS或HTTP接口发现其他服务。诸如SaaS提供程序之类的外部服务也可以注册
    
    运行状态检测: Consul 提供了健康检查的机制,与服务发现的集成可防止将流量路由到不正常的主机,并启用服务级别的断路器
    
    Key/Value 存储: 灵活的kv存储可以实现动态配置、功能标记、leader选举等,简单的HTTP API使它可以在任何地方轻松使用
    
    • 端口:

    Consul最多需要6个不同的端口才能正常工作,某些端口需要使用TCP、UDP或同时使用这两种协议。

    DNS:DNS server(TCP和UDP)     8600
    HTTP:HTTP API(仅TCP)         8500
    HTTPS:HTTPs API        disabled(8501)*
    gRPC:gRPC API          disabled(8502)*
    LAN Serf:Serf LAN 端口(TCP和UDP)         8301
    Wan Serf:Serf WAN 端口(TCP和UDP)         8302
    server:server RPC 地址(仅TCP)            8300
    Sidecar Proxy Min:包含的最小端口号,用于自动分配的sidecar服务注册      21000
    Sidecar Proxy Max:包含的最大端口号,用于自动分配的sidecar服务注册      21255
    

    对于HTTPSgRPC,表中指定的端口为推荐值。


    环境准备

    • 主机说明:
    系统ip角色
    CentOS 7.8192.168.30.128Server
    CentOS 7.8192.168.30.129Server
    CentOS 7.8192.168.30.130Server
    CentOS 7.8192.168.30.131Client
    • 全部关闭防火墙和selinux:
    systemctl stop firewalld && systemctl disable firewalld
    
    sed -i 's/=enforcing/=disabled/g' /etc/selinux/config  && setenforce 0
    

    Consul安装

    • 安装consul:
    mkdir /software && cd /software
    
    wget https://releases.hashicorp.com/consul/1.8.3/consul_1.8.3_linux_amd64.zip
    
    unzip consul_1.8.3_linux_amd64.zip
    
    mv consul /usr/local/bin/
    
    consul version
    
    Consul v1.8.3
    Revision a9322b9c7
    Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
    
    consul -autocomplete-install                #命令补全
    

    然后打开新的窗口即可。

    • 命令参数:
    acl            与 Consul 的ACL进行交互
    agent          运行一个 Consul agent
    catalog        与 Consul 的目录进行交互
    config         与 Consul 的配置进行交互
    connect        与 Consul 的Connect子系统进行交互
    debug          记录 Consul operators 的调试归档
    event          触发一个新事件
    exec           在 Consul 节点上执行命令
    force-leave    强制一个集群成员进入离开状态,一般用来强制删除发生故障或已关闭且没有正常离开的节点
    info           对 Consul operators 提供调试的信息
    intention      与通过Connect对服务的访问控制交互
    join           将 Consul agent 加入集群
    keygen         生成新的加密密钥
    keyring        检查和修改 gossip 池中使用的加密密钥
    kv             与 k/v 存储进行交互
    leave          Consul agent 正常离开集群并关闭
    lock           在 k/v 存储中的给定前缀处创建一个锁
    login          使用所请求的auth方法将提供的第三方凭据交换为新创建的 Consul ACL令牌
    logout         销毁从 consul login 命令中创建的 Consul 令牌
    maint          提供对节点或服务的维护模式的控制
    members        列出 Consul 集群的所有成员
    monitor        用于连接并追踪正在运行的 Consul agent 的日志
    operator       为 Consul operators 提供集群级别的工具
    reload         触发 agent 配置文件的重载
    rtt            估计两个节点之间的网络往返时间
    services       与注册的服务进行交互
    snapshot       保存、还原和检查 Consul Server 状态以进行灾难恢复
    tls            内置帮助创建Consul TLS的CA和证书
    validate       对 Consul 的配置文件或目录执行完整性测试
    version        显示 Consul 版本信息
    watch          监视 Consul 特定数据视图(节点列表,服务成员,k/v等)中的更改
    
    • 运行Agent:

    Agent 可以运行为 Server 或 Client 模式,每个数据中心至少有一个 Server。一个集群中建议有3个或5个 Server,单个 Server 在出现故障时会不可避免的造成数据丢失。

    Client是一个非常轻量级的进程,用于注册服务、健康检查和转发对 Server 的查询。Agent 必须在集群中的每个节点上运行。

    consul agent -dev               #开发模式
    

    新开一个窗口,

    consul members              #查看集群成员
    
    Node    Address         Status  Type    Build  Protocol  DC   Segment
    master  127.0.0.1:8301  alive   server  1.8.3  2         dc1  <all>
    

    可以看到当前节点名称、运行的地址、健康状态以及集群角色等信息,添加-detailed可以看到额外的信息。

    分别使用HTTP和DNS接口查看信息:

    curl localhost:8500/v1/catalog/nodes                #HTTP API查看
    
    [
        {
            "ID": "f134d82f-1c59-50be-8437-8feb9c1a9351",
            "Node": "master",
            "Address": "127.0.0.1",
            "Datacenter": "dc1",
            "TaggedAddresses": {
                "lan": "127.0.0.1",
                "lan_ipv4": "127.0.0.1",
                "wan": "127.0.0.1",
                "wan_ipv4": "127.0.0.1"
            },
            "Meta": {
                "consul-network-segment": ""
            },
            "CreateIndex": 10,
            "ModifyIndex": 12
        }
    ]
    
    yum install -y bind-utils
    
    dig @127.0.0.1 -p 8600 master.node.consul               #DNS接口查看
    
    ;; QUESTION SECTION:
    ;master.node.consul.		IN	A
    
    ;; ANSWER SECTION:
    master.node.consul.	0	IN	A	127.0.0.1
    
    • 停止Agent:
    consul leave -http-addr=127.0.0.1:8500              #正常退出
    
    consul force-leave -http-addr=127.0.0.1:8500                #强制退出
    
    • 注册服务:
    mkdir -p /consul/config
    
    echo '{"service": {"name": "nginx", "tags": ["web"], "port": 80}}' | sudo tee /consul/config/nginx.json
    
    consul agent -dev -config-dir=/consul/config
    

    通过HTTP API和DNS接口查看,

    curl http://localhost:8500/v1/catalog/service/nginx
    
    dig @127.0.0.1 -p 8600 nginx.service.consul
    

    Consul集群

    • 创建 consul server:
    mkdir -p /consul/{config,data}
    
    consul agent -server -bootstrap-expect=3  \
        -data-dir=/consul/data \
        -node=agent128 -bind=192.168.30.128 \
        -enable-script-checks=true -config-dir=/consul/config \
        -client 0.0.0.0 -ui &> /consul/data/consul.log &
    

    参数:

    -node:节点的名称 
    -bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址 
    -server:表示这个节点是个Server
    -bootstrap-expect:表示期望提供的Server节点数目。数目一达到,它就会被激活,然后就是leader了
    -data-dir:Agent用于存储状态的数据目录,这是所有Agent所必需的
    -datacenter:指明数据中心的名字,默认是"dc1"。同一数据中心中的节点应位于单个LAN上
    -client:将Client接口(包括HTTP和DNS服务器)绑定到的地址
    -ui:启动UI
    

    其他两台机器也创建 consul server,与 192.168.30.128 类似。

    • 创建 consul client:
    mkdir -p /consul/{config,data}
    
    consul agent -data-dir=/consul/data \
        -node=agent131 -bind=192.168.30.131 \
        -enable-script-checks=true -config-dir=/consul/config \
        -client 0.0.0.0 -ui &> /consul/data/consul.log &
    
    • 加入集群:

    除 192.168.30.128 外的其他机器加入集群,

    consul join 192.168.30.128
    
    consul members
    
    Node      Address              Status  Type    Build  Protocol  DC   Segment
    agent128  192.168.30.128:8301  alive   server  1.8.3  2         dc1  <all>
    agent129  192.168.30.129:8301  alive   server  1.8.3  2         dc1  <all>
    agent130  192.168.30.130:8301  alive   server  1.8.3  2         dc1  <all>
    agent131  192.168.30.131:8301  alive   client  1.8.3  2         dc1  <default>
    

    可以看得,集群中有3个server和1个client,它们在数据中心dc1中。

    • 访问ui:

    打开http://192.168.30.128:8500/ui,访问consul ui界面,

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    可以看到,之前演示注册的web服务nginx是正常状态,节点agent130是集群 leader。

    • 配置kv:

    consul kv 是consul的核心功能,并随consul agent一起安装。consul kv允许用户存储索引对象,尽管其主要用途是存储配置参数和元数据。

    consul kv 数据存储在server上,可以由任何agent(client或server)访问。consul允许在所有server之间自动复制数据,如果发生故障,拥有一定数量的server将减少数据丢失的风险。

    数据存储位于server上的数据目录中,为确保在完全中断的情况下不会丢失数据,可以使用 consul snapshot 命令备份数据。

    另外,还可以通过 consul kv 子命令、HTTP API 和 Consul UI 访问kv存储。

    在这里插入图片描述

    kv当前为空,即没有存储配置信息。

    查询数据:

    consul kv get --recurse             #查询所有数据
    

    新建数据:

    consul kv put username lzx              #创建kv对
    
    consul kv get username
    
    lzx
    

    在这里插入图片描述

    更新数据:

    consul kv put username liu              #更新kv对
    
    consul kv get username
    
    liu
    

    删除数据:

    consul kv delete username               #删除kv对
    
    consul kv get username
    
    Error! No key exists at: username
    

    consul 集群部署完毕,整个过程非常简单。


    展开全文
  • consul集群部署

    2019-12-25 16:06:14
    一、环境准备 服务器01:192.168.1.160 服务器02:192.168.1.230 服务器03:192.168.1.177 二、consul安装 1、下载:...export PATH=$PATH:/opt/consul/consul1.6.2/bin 4、创建consul配置文件(三台...

    一、环境准备

    服务器01:192.168.1.160
    服务器02:192.168.1.230
    服务器03:192.168.1.177

    二、consul安装

    1、下载:https://www.consul.io/downloads.html
    2、解压
    在这里插入图片描述
    3、配置环境变量

    export PATH=$PATH:/opt/consul/consul1.6.2/bin
    

    在这里插入图片描述
    4、创建consul配置文件(三台均需配置,根据不同服务器调整IP地址)

    vi /opt/consul/consul1.6.2/conf/consul.json
    
     {
        "datacenter": "BMS",
        "data_dir": "/opt/consul/consul1.6.2/data/consul",
        "log_level": "INFO",
        "node_name": "BMS201",
        "server": true,
        "ui": true,
        "bootstrap_expect": 2,
        "bind_addr": "192.168.1.160",
        "client_addr": "192.168.1.160",
        "retry_join": ["192.168.1.230","192.168.1.177"],
        "retry_interval": "10s",
        "protocol": 3,
        "raft_protocol": 3,
        "enable_debug": false,
        "rejoin_after_leave": true,
        "enable_syslog": false
    }
    

    5、启动集群

    ./consul agent -server -bootstrap-expect=3 -data-dir=/opt/consul/consul1.6.2/data -node=192.168.1.160 -bind=192.168.1.160 -client=0.0.0.0 -datacenter=dc1 -ui
    ./consul agent -server -bootstrap-expect=3 -data-dir=/opt/consul/consul1.6.2/data -node=192.168.1.177 -bind=192.168.1.177 -client=0.0.0.0 -datacenter=dc1 -ui
    ./consul agent -server -bootstrap-expect=3 -data-dir=/opt/consul/consul1.6.2/data -node=192.168.1.230 -bind=192.168.1.230 -client=0.0.0.0 -datacenter=dc1 -ui
    

    在这里插入图片描述登录170和230服务器,执行以下命令加入集群

    ./consul join 192.168.1.160
    

    在这里插入图片描述
    6、验证

    ./consul operator raft list-peers
    

    在这里插入图片描述看到了节点都已加入.
    访问:http://192.168.1.160:8500/
    在这里插入图片描述成功!

    展开全文
  • Consul集群部署与多数据中心组建.docx
  • SpringCloudGateway+Consul集群部署笔记

    千次阅读 2022-03-25 09:50:59
    spring cloud gateway已经使用了较长一段时间,一直有想法,整理整理一下,形成一个有效的记录,近期终于抽空写成笔记。 1、基本环境 版本:consul-1.7.2 服务:192.168.11.45...3、集群架构 1.三个consul
  • Consul集群部署

    2021-08-07 04:51:47
    Consul的集群部署一、Consul的认识1、服务注册与发现2、何为consul二、consul集群的部署流程 一、Consul的认识 1、服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障...
  • Consul集群部署与使用

    2019-05-10 10:36:44
    服务发现:Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去... 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机. Key/Value存储:应用程
  • 目录一....建立Consul服务(192.168.121.22)①安装consul服务②查看集群信息③通过http api获取集群信息2.registrator服务器(192.168.121.33)①安装Gliderlabs/Registrator②创建web容器③浏览器访问...
  • Centos7.4 consul集群部署

    千次阅读 2018-02-26 23:04:00
    一、概述Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件.Consul 由 HashiCorp公司用Go语言开发, 基于Mozilla Public License 2.0的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS...
  • consul集群部署-01

    2021-02-06 16:24:41
    consul介绍Consul包含多个组件,可是做为一个总体,为你的基础设施提供服务发现和服务配置的工具.他提供如下关键特性:服务发现 Consul的客户端可用提供一个服务,好比 api 或者mysql ,另一些客户端可用使用Consul去发现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,943
精华内容 5,177
关键字:

consul集群部署

友情链接: exprep.rar