您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页CentOS8 Consul微服务架构安装(1)

CentOS8 Consul微服务架构安装(1)

来源:欧得旅游网

1 Consul

Consul包含多个组件,是为基础设施提供服务发现和服务配置的工具。关键特性:
1. 服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
2. 健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
3. Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
4. 多数据中心: Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.

2 基础架构

Consul是一个分布式高可用的系统.

每个提供服务给Consul的节点都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.

Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.

基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .

每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.

3 安装

Consul集群的每个节点都必须先安装Consul.

yum install -y yum-utils

yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

yum -y install consul

consul -autocomplete-install

#验证:
[root@controller ~]# consul
Usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    acl            Interact with Consul's ACLs
    agent          Runs a Consul agent
    catalog        Interact with the catalog
    config         Interact with Consul's Centralized Configurations
    connect        Interact with Consul Connect
    debug          Records a debugging archive for operators
    event          Fire a new event
    exec           Executes a command on Consul nodes
    force-leave    Forces a member of the cluster to enter the "left" state
    info           Provides debugging information for operators.
    intention      Interact with Connect service intentions
    join           Tell Consul agent to join cluster
    keygen         Generates a new encryption key
    keyring        Manages gossip layer encryption keys
    kv             Interact with the key-value store
    leave          Gracefully leaves the Consul cluster and shuts down
    lock           Execute a command holding a lock
    login          Login to Consul using an auth method
    logout         Destroy a Consul token created with login
    maint          Controls node or service maintenance mode
    members        Lists the members of a Consul cluster
    monitor        Stream logs from a Consul agent
    operator       Provides cluster-level tools for Consul operators
    reload         Triggers the agent to reload configuration files
    rtt            Estimates network round trip time between nodes
    services       Interact with services
    snapshot       Saves, restores and inspects snapshots of Consul server state
    tls            Builtin helpers for creating CAs and certificates
    validate       Validate config files/directories
    version        Prints the Consul version
    watch          Watch for changes in Consul

4 启动

完成Consul的安装后,必须运行agent. agent可以运行为server或client模式.每个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server.部署单一的server,在出现失败时会不可避免的造成数据丢失.

其他的agent运行为client模式.一个client是一个非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.agent必须在集群中的每个主机上运行.

[root@controller ~]# consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
           Version: '1.11.4'
           Node ID: '76590d82-0f5e-b8be-1248-ec1e4ab1'
         Node name: 'controller'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

   。。。。(省略)

5 集群成员

新开一个终端窗口运行consul members, 你可以看到Consul集群的成员.

[root@controller ~]# consul members
Node        Address         Status  Type    Build   Protocol  DC   Partition  Segment
controller  127.0.0.1:8301  alive   server  1.11.4  2         dc1  default    <all>

6 停止Agent

Ctrl-C

7 注册服务

7.1 定义一个服务

可以通过提供服务定义或者调用HTTP API来注册一个服务.服务定义文件是注册服务的最通用的方式.

然后,将编写服务定义配置文件.假设有一个名叫web的服务运行在 80端口.另外,我们将给他设置一个标签.这样我们可以使用他作为额外的查询方式:

echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
    >/etc/consul.d/web.json
consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
...
    [INFO] agent: Synced service 'web'
...

7.2 查询服务

可以通过DNS或者HTTP的API来查询服务.

DNS API

在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称.

上面注册的Web服务.它的域名是 web.service.consul :

dig @127.0.0.1 -p 8600 web.service.consul

HTTP API

curl http://localhost:8500/v1/catalog/service/web
[{"Node":"hdp2","Address":"10.0.0.52","ServiceID":"web","ServiceName":"web","ServiceTags":["rails"],"ServiceAddress":"","ServicePort":80,"ServiceEnableTagOverride":false,"CreateIndex":4,"ModifyIndex":2}]

7.3 更新服务

服务定义可以通过配置文件并发送SIGHUP给agent来进行更新.这样你可以让你在不关闭服务或者保持服务请求可用的情况下进行更新.

8 建立集群

当一个agent启动时,他开始不知道其他节点的信息,他是一个成员的孤立集群.为了了解其他集群成员这个agent必须加入一个已经存在的集群.要加入一个已经存在的集群,只需要知道一个已经存在的集群成员.通过与这个成员的沟通来发现其他成员,Consul agent可以加入任何agent而不只是出于server模式的agent.

启动了另外的2台主机, 192.168.143.192 和192.168.143.194,先安装consul

第一个节点将扮演集群的唯一server,我们使用-server指定他.

最后,加入 config-dir选项,指定服务和健康检查定义文件存放的路径.

创建server

#创建文件夹
mkdir -p /consul/{config,data}

#配置10.10.20.200节点
consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.203 -bind=10.10.20.200 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &

[1] 20336

#配置10.10.20.194节点
consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.194 -bind=10.10.20.194 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &


[1] 2083

参数解释:

-node:节点的名称 

-bind:绑定的一个地址,用于节点之间通信的地址,可以是内,必须是可以访问到的地址 

-server:表示这个节点是个Server

-bootstrap-expect:表示期望提供的Server节点数目。数目一达到,它就会被激活,然后就是leader了

-data-dir:Agent用于存储状态的数据目录,这是所有Agent所必需的

-datacenter:指明数据中心的名字,默认是"dc1"。同一数据中心中的节点应位于单个LAN上

-client:将Client接口(包括HTTP和DNS服务器)绑定到的地址

-ui:启动UI

创建client

consul agent -data-dir=/consul/data -node=192.168.143.192 -bind=10.10.20.192 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &

[1] 160873

报错:

加入集群

重开一个终端
除了203以外的节点:

[root@stone ~]# consul join 10.10.20.200
Successfully joined cluster by contacting 1 nodes.

正确输出:

2022-04-15T11:39:27.230+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.194 10.10.20.194
2022-04-15T11:39:27.230+0800 [INFO]  agent.server: Adding LAN server: server="192.168.143.194 (Addr: tcp/10.10.20.194:8300) (DC: dc1)"
2022-04-15T11:39:27.230+0800 [INFO]  agent.server: member joined, marking health alive: member=192.168.143.194 partition=default
2022-04-15T11:39:27.231+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: 192.168.143.194.dc1 10.10.20.194
2022-04-15T11:39:27.231+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=192.168.143.194.dc1 area=wan
2022-04-15T11:39:36.037+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.192 10.10.20.192
2022-04-15T11:39:36.037+0800 [INFO]  agent.server: member joined, marking health alive: member=192.168.143.192 partition=default

验证:

root@controller ~]# consul members
Node             Address            Status  Type    Build   Protocol  DC   Partition  Segment
192.168.143.194  10.10.20.194:8301  alive   server  1.11.4  2         dc1  default    <all>
192.168.143.203  10.10.20.200:8301  alive   server  1.11.4  2         dc1  default    <all>
192.168.143.192  10.10.20.192:8301  alive   client  1.11.4  2         dc1  default    <default>

9 访问ui

10 健康检查

10.1 定义检查

一个检查可以通过检查定义或HTTP API请求来注册.
使用和检查定义来注册检查.和服务类似,因为这是建立检查最常用的方式.

echo '{"check":{"name":"ping","script":"ping -c1 baidu.com >/dev/null", "interval":"30s"}}' >/etc/consul.d/ping.json

echo '{"service":{"name":"web", "tags":["rails"], "port":80, "check":{"script":"curl localhost >/dev/null 2>&1", "interval":"10s"}}}' >/etc/consul.d/web.json

第一个定义增加了一个主机级别的检查,名字为 “ping” . 这个检查每30秒执行一次,执行 ping -c1 163.com. 在基于脚本的健康检查中,脚本运行在与Consul进程一样的用户下.如果这个命令以非0值退出的话这个节点就会被标记为不健康.这是所有基于脚本的健康检查的约定.

第二个命令定义了名为web的服务,添加了一个检查.每十分钟通过curl发送一个请求,确定web服务器可以访问.和主机级别的检查一样.如果脚本以非0值退出则标记为不健康.

现在重启第二个agent或者发送SIGHUP信号

consul reload

10.2 检查健康状态

首先检查有哪些失败的检查.使用这个命令(注意:这个命令可以运行在任何节点)

curl http://192.168.143.203:8500/v1/health/state/critical [{"Node":"192.168.143.194","CheckID":"service:web","Name":"Service 'web' check","Status":"critical","Notes":"","Output":"","ServiceID":"web","ServiceName":"web","CreateIndex":878,"ModifyIndex":878}]

dig @127.0.0.1 -p 8600 web.service.consul

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务