常见的注册中心:

  • 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

Consul学习笔记(详细)的更多相关文章

  1. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  2. Consul 学习笔记—服务发现

    前言: 上一篇文章简单实用Consul试下服务注册,本篇继续学习Consul中的另外特性:服务发现.KV操作 :以及对上篇文章中存在的问题进行解决 问题解决 在上一篇文章中,注册服务提示检查失败. 通 ...

  3. Consul 学习笔记-服务注册

    Consul简介: Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面.这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格.Consul需要 ...

  4. java学习笔记(详细)

    java平台 1.J2SE java开发平台标准版 2.J2EE java开发平台企业版 java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序.不同系统上要安装对应的虚 ...

  5. 关于高淇JAVA中SORM总结学习笔记详细个人解释

    代码来源于高淇JAVA教学视频 谢谢高淇老师的教学. 因为自己在学习的过程中发现了很多困难点,总结下希望对自己接下来学框架提升.给像我一样得初学者方便. SORM框架是一个简单的ORM,关系对象映射, ...

  6. Linux线程互斥学习笔记--详细分析

    一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...

  7. MySql学习笔记--详细整理--上

    目录 MySql MySql安装 连接数据库 操作数据库 数据库的列类型 数据库的字段属性 创建数据库 修改删除表 数据管理 外键 DML语言 添加 修改 删除 DQL查询数据(重点) 查询 去重 w ...

  8. MySql学习笔记--详细整理--下

    目录 索引 测试索引 索引原则 权限管理和备份 备份 规范数据库设计 三大范式 JDBC JDBC程序 Statement对象 工具类实现 sql注入 PreparedStatement对象 事务 数 ...

  9. 学习笔记:APP切图那点事儿–详细介绍android和ios平台

    学习笔记:APP切图那点事儿–详细介绍android和ios平台 转载自:http://www.woofeng.cn/articles/168.html   版权归原作者所有 作者:亚茹有李 原文地址 ...

随机推荐

  1. Redisson 实现分布式锁原理分析

    Redisson 实现分布式锁原理分析   写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题.​ 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有 ...

  2. openstack,docker,mesos,Kubernetes(k8s)

    作者:张乾链接:https://www.zhihu.com/question/62985699/answer/204233732来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. undo和redo的区别

    undo和redo的区别: undo一般用于事务的取消与回滚,记录的是数据修改前的值: redo一般用于恢复已确认但未写入数据库的数据,记录的是数据修改后的值.

  4. 普罗米修斯+grafana监控k8s

    其实现原理有点类似ELK.node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, prometheus负责存储这些数据,grafana将这些数据通过 ...

  5. 安卓开发常见Bug-数据库未加载

    安卓的数据库是本地的,所以在项目启动后也就是在onCreat()进行时就要进行数据库加载操作 将数据库加载的操作放在onCreat()中,根据安卓运行生命周期,就实现了数据库的全局化,也就是始终存在于 ...

  6. python 如何获取当前系统的时间

    1.导入包 import datetime 2.获取当前的时间 curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 < ...

  7. 创建一个python类 ,self init相关参数的简单介绍

    一 创建 ''' 一 使用python 语法 创建一个类, 探究self 是干啥的 1 创建一个对象 car 2 写入两个行参 3 定义两个方法 ''' class Car(): ''' 二 init ...

  8. Spring源码-IOC部分-容器简介【1】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  9. vue组件中使用watch响应数据

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: 普通用法: <template> //视图 <input v-mode ...

  10. Redis哨兵模式高可用解决方案

    一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使 ...