bingmous

欢迎交流,不吝赐教~

导航

Consul学习笔记(详细)

常见的注册中心:

  • Netflix Eureka
  • Alibaba Nacos
  • HashiCorp Consul
  • Apache Zookeeper
  • CoreOS Etcd
  • CNCF CoreDNS

介绍

 特性

角色

流行病协议 

工作原理

安装和简单使用

 官网地址:https://www.consul.io/

下载地址:https://www.consul.io/downloads

consul只有一个执行文件,使用consul命令进行启动:

consul agent -dev -client=0.0.0.0 
    # -dev 开发模式启动
    # -client 表示允许访问的地址

web页面端口为8500

入门案例

提供者注册到consul,消费者消费,通过配置文件关联

spring-boot-starter-consul-discovery

Consul集群

Client只是代理,做请求转发,占用资源小,一般是在微服务端 

启动,每个节点都启动

./consul agent -server -bind=192.168.33.101 -client=0.0.0.0 -ui -bootstrap-expect=3 -data-dir=/usr/local/consul/data -node=server-01
    # -server 作为服务端启动
    # -bind 与哪个ip地址绑定
    # -client 允许哪些客户端访问
    # -ui 开启web页面
    # -bootstrap-expect 集群最少的节点数
    # -data-dir 数据存储目录
    # -node 节点名称

启动客户端

./consul agent -client=0.0.0.0 -bind=192.168.33.104 -data-dir=/usr/local/consul/data -node=client-01

关联集群,每个server和client都执行,显式定义的主server

./consul join 192.168.33.101

查看集群状态

./consul members

在任意server节点都可以在8500端口查看集群状态,nodes可以查看所有节点(server和client)

测试

提供者和消费者都可以注册到client上,它会将请求转发到server,这样如果服务与server不在同一台服务器上,只需要在服务所在的服务器上扩展client就可以了,它会与server通信,占用资源很小。

总结:数据中心内是一个LAN(本地局域网),通过gossip(流行病协议)通信(8301端口),server选举使用raft算法(8300端口通信),支持数据中心与数据中心之间交互通过WLAN(8302端口)

Consul 配置

优先级:命令行 > 配置文件,配置文件的优先级是按文件名的字母顺序,有写配置是添加,有写是覆盖,Consul也支持重新加载配置(部分配置是支持重新加载的),通过sighup或命令行触发重新加载配置

命令行配置

-advertise # 通知展现地址, 改变向其他集群中的节点展现的地址, 默认使用-bind的地址,因为有些情况下地址可以路由但是不能被绑定,这个参数可以使用一个不同的地址,比如有两个跨dc的集群,集群内部可以使用lan内的地址,对外的地址如果使用lan内的肯定不行的,这时就需要使用这个参数
-bootstrap-expect # 集群期望的server数量,值必须与集群中的其他服务器一直
-domain     # 默认consul回应DNS查询为"consul."
-hcl         # 配置片段,会追加到配置后面,所有配置文件中的配置都可以在命令行指定
-retry-join  # 尝试重新加入,默认间隔30s,无限次重试,如果不是默认的Serf LAN port,需要指定
-config-file # 指定配置文件
-config-dir  # 指定配置目录,可以有多个配置文件

配置文件

json单一对象格式

{
  "disable_host_node_id": true, //防止consul生成相同的node id
  "ports": {
    "dns": 8611,         # dsn服务器port 默认8600 tcp udp 
    "http": 8500,        # HTTP API 默认8500 tcp
    "grpc": 8411,        # gPRC API 暴露代理 默认-1关闭
    "serf_lan": 8331,     # 局域网port 默认8301 tcp udp
    "serf_wan": 8332,     # 广域网port 默认8302 tcp udp
    "server": 8333        # server RPC port 默认8300 tcp server之间通信
  },
  "datacenter":"dc1",
  "acl": {
    "enabled": true                   # 开启acl
    "default_policy": "deny",         # 是一个allowlist,不在list的里的操作是不允许的
    "enable_token_persistence": true, # 允许持久化token
    "tokens": {
      "master": "xxx",
      "agent": "xxx"
    }
  }
}

出现的问题:

  • 有时token在前端不好使,需要在创建一个
    curl --request PUT --header "X-Consul-Token:YourToken" --data '{"Name": "dc1", "Type": "management"}' 'http://localhost:8500/v1/acl/create' > ./acltoken

posted on 2021-09-26 22:21  Bingmous  阅读(167)  评论(0编辑  收藏  举报