从刚入职接触Zookeeper开始,简单的认为ZK是作为服务注册与订阅使用的微服务架构组件,zookeeper的入门比较简单,主要就是zoo.cfg文件的配置,还有可视化工具zkui可以很感官的看到服务的注册信息,很方便。
后来又使用ZK进行动态参数配置中心,充分利用了watcher监听通知的功能,但是集成的方式需要自己进行代码维护逻辑,使得开发面向了过程,需要对每一个需要监听的节点创建一个watcher,然后再实现add/update/delete等方法,对开发人员的要求较高,使用频率不怎么大。
再后来公司框架集成Springcloud,开始学习使用EUREKA和Consul,下面是从https://blog.csdn.net/u013068377/article/details/78933654摘过来的
Feature | Consul | zookeeper | etcd(没用过) | euerka |
---|---|---|---|---|
服务健康检查 | 服务状态,内存,硬盘等 | (弱)长连接,keepalive | 连接心跳 | 可配支持 |
多数据中心 | 支持 | — | — | — |
kv存储服务 | 支持 | 支持 | 支持 | — |
一致性 | raft | paxos | raft | — |
cap | ca | cp | cp | ap |
使用接口(多语言能力) | 支持http和dns | 客户端 | http/grpc | http(sidecar) |
watch支持 | 全量/支持long polling | 支持 | 支持 long polling | 支持 long polling/大部分增量 |
自身监控 | metrics | — | metrics | metrics |
安全 | acl /https | acl | https支持(弱) | — |
spring cloud集成 | 已支持 | 已支持 | 已支持 | 已支持 |
因为现在主要使用Consul进行服务发现,其他的先略过。
一、Consul的安装
Consul中心和Zk类似是个客户端执行工具,从官网很容易下载:https://www.consul.io/
https://www.consul.io/downloads.html
直接配置环境变量,或者在加压文件上shift+右击弹出命令框,输入consul即可
consul需要服务器的性能要求
类型 | 中央处理器 | 内存 | 磁盘 | 典型的云实例类型 |
---|---|---|---|---|
小 | 2核心 | 8-16 GB RAM | 50GB | AWS:m5.large,m5.xlarge |
Azure:Standard_A4_v2,Standard_A8_v2 | ||||
GCE:n1-standard-8,n1-standard-16 | ||||
大 | 4-8核心 | 32-64 GB RAM | 100GB | AWS:m5.2xlarge,m5.4xlarge |
Azure:Standard_D4_v3,Standard_D5_v3 | ||||
GCE:n1-standard-32,n1-standard-64 |
小尺寸适用于大多数初始生产部署或开发/测试环境。大尺寸适用于工作负载持续较高的生产环境。
consul集群架构:
上面这图是官网获得的机构图,他分为了两块数据中心,也就是两个集群中心。每个通常是三到五台服务器。Consul通过WAN链接连接的独立集群支持多数据中心部署。在某些情况下,还可以在同一LAN环境中部署两个或多个Consul集群。
主要了解一下节点之间的网络通讯:
代理以客户端或服务器模式运行,都采用的是Gossip协议规范(Redis集群也是如此规范)。初始探测每秒通过UDP发送。如果节点无法在内部进行确认200ms
,则代理将通过TCP进行ping操作。如果TCP探测失败(10秒超时),它会要求可配置数量的随机节点探测同一节点(也称为间接探测)。如果对等体没有关于节点状态的响应,则该代理被标记为关闭。
代理的状态直接影响服务发现结果。如果代理已关闭,则它正在监视的服务也将标记为关闭。
在跨越L2段的较大网络中,流量通常穿过防火墙和/或路由器。必须更新ACL或防火墙规则以允许以下端口:
名称 | 港口 | 旗 | 描述 |
---|---|---|---|
服务器RPC | 8300 | 服务器用于处理来自其他代理的传入请求。仅限TCP。 | |
Serf LAN | 8301 | 用于处理局域网中的Gossip协议。所有代理都使用TCP和UDP。 | |
Serf WAN | 8302 | -1 禁用(在Consul 1.0.7中可用) | 服务器用于通过LAN和WAN连接到其他服务器。TCP和UDP。 |
HTTP API | 8500 | -1 禁用 | 客户端用于与HTTP API通信。仅限TCP。 |
DNS接口 | 8600 | -1 禁用 |
如数据中心设计部分所述,网络区域和网段可用于防止在不同子网之间打开防火墙端口。
默认情况下,代理仅侦听本地接口上的HTTP和DNS流量。
二、Consul的简单介绍
比较详情的https://segmentfault.com/a/1190000005026002
这里主要详细讲解Consul的一些命令操作符
控制台输入:consul
C:\Users\liuguangyu>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 #与目录相关
connect Interact with Consul Connect #与连接相关
debug Records a debugging archive for operators #debug方式
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
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
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul #类似ZK的watcher
1、关于acl的概念查看https://blog.csdn.net/ningmeng_bumeng/article/details/78614362,主要用于网络流量控制,具体在consul上创建策略的方式可以查看官方文档https://learn.hashicorp.com/consul/advanced/day-1-operations/acl-guide
2、consul的启动一般都是通过代理启动,代理指明了客户端的地址,未完待续。。