• consul总结


    一、介绍 

    内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)
    服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。

    每个被注册到consul中的node上,都部署一个consul agent,这个agent负责对本地的服务进行监控检查,以及将查询请求转发给consul server。 consul server负责存放、备份数据(使用raft协议保证一致性),通常要有多台形成集群,选举出一个leader。 查询服务地址的时候,可以直接向consul server发起查询,也可以通过consul agent查询,后者将转发给consul server。 如果是多数据中心,每个数据中心部署一组consul server。跨数据中心查询通过本数据中心的consul server进行。
    注意:多数据中心的时候,不同数据中心的consul server之间不会同步key-value数据。
    @client
    CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
    
    @server
    SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
    
    @server-leader
    中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

      @raft
      server节点之间的数据一致性保证,一致性协议使用的是raft,而zookeeper用的paxos,etcd采用的也是taft。

      @服务发现协议
      consul采用http和dns协议,etcd只支持http

      @服务注册
       consul支持两种方式实现服务注册,一种是通过consul的服务注册http API,由服务自己调用API实现注册,另一种方式是通过json个是的配置文件实现注册,将需要注册的服务以json格式的配置文件给出。consul官方建议使用第二种方式。

      @服务发现
      consul支持两种方式实现服务发现,一种是通过http API来查询有哪些服务,另外一种是通过consul agent 自带的DNS(8600端口),域名是以NAME.service.consul的形式给出,NAME即在定义的服务配置文件中,服务的名称。DNS方式可以通过check的方式检查服务。

      @服务间的通信协议
      Consul使用gossip协议管理成员关系、广播消息到整个集群,他有两个gossip pool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个。

    二、Consul Agent安装

     2.1server安装

           -server:标识consul为服务端
      -bootstrap-expect:告诉Consul Server预定将要加入的其它服务节点的数量。这个参数的目的是延迟复制日志的启动直到预料数量的Server节点已经成功加入。
      -config-dir:标识可以在哪里找到服务和检查的定义,这种通过json格式注册到consul
      -data-dir:指定数据目录,其他的节点对于这个目录必须有读的权限
      -join:加入到已有的集群中
      --datacenter:数据中心,默认为dc1
      -bind:监听地址
      -node:指定节点名称

    @cn1
    consul agent  -bootstrap-expect 2  -server   -data-dir /data/consul0 -node=cn1 -bind=192.168.1.202 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1 

    @cn2
    consul agent   -server  -data-dir /data/consul0 -node=cn2 -bind=192.168.1.201 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

    @cn3
    consul agent  -server  -data-dir /data/consul0 -node=cn3 -bind=192.168.1.200 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

     2.2client安装

      -http-port: server的端口

    consul agent   -data-dir /data/consul0 -node=cn4 -bind=192.168.1.199  -http-port=8500 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202 

       2.3UI安装  

           -ui:使用自带的ui,
      -ui-dir:指定ui的目录,使用自己定义的ui
      -client:指定web ui、的监听地址,默认127.0.0.1只能本机访问。

    consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198  -client 192.168.1.198   -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

      访问ui:http://192.168.1.198:8500/ui

    服务

    端口
    consul agent服务relplaction、rpc(client-server) 8300                 
    http api端口 8500
    DNS服务端口 8600
    wan gossip 8302
    lan gossip 8301

    三、常用命令

    consul  info  #查看集群信息
    consul members
    curl http://100.101.235.229:8500/v1/health/state/any|python -m json.tool|grep CheckID|grep mysql
    #注册信息

    curl -X PUT -d '{
    "id": "'"${SERVICE_ID}"'",
    "name": "'"${SERVICE_NAME}"'",
    "address": "'"${SERVICE_IP}"'",
    "port": '"${SERVICE_PORT}"',
    "tags": ["'"${TAG1}"','"${TAG2}"'"],
    "checks": [{"http": "http://'"${SERVICE_IP}"':'"${SERVICE_PORT}"'/health","interval": "'"$INTERVAL"'","timeout": "30s"}]
    }'
    http://${CONSUL_IP}:${CONSUL_CLENT_PORT}/v1/agent/service/register

    #查看name为nginx的注册信息
    curl http://clientip:8500/v1/catalog/service/{service名字}
    #查看所有services的注册信息
    curl http://clientip:8500/v1/catalog/services
    #查看健康
    curl http://clientip:8500/v1/health/service/{service名字}?passing
    #从consul集群删除注册信息
    curl -X PUT http://clientip:8500/v1/agent/service/deregister/{service_id}

    四、新加入一个节点有几种方式

    1、这种方式,重启后不会自动加入集群
    #consul  join  192.168.1.202
    
    2、在启动的时候使用-join指定一个集群
    #consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202
    
    3、使用-startjoin或-rejoin
    #consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -rejoin

    http://www.liangxiansen.cn/2017/04/06/consul/#health

  • 相关阅读:
    自己搭建二维码接口
    HTML CSS SPRITE 工具
    Codeforces Round #636 (Div. 3) 题解
    Codeforces Round #612 (Div. 1+Div. 2)
    计树问题小结 version 2.0
    Educational Codeforces Round 85 (Rated for Div. 2) 题解
    luogu6078 [CEOI2004]糖果
    luogu [JSOI2012]分零食
    多项式全家桶
    生成函数小结
  • 原文地址:https://www.cnblogs.com/kevincaptain/p/10100857.html
Copyright © 2020-2023  润新知