Consul

内容纲要

功能

实现分布式系统的服务发现与配置

特点

分布式、高可用、可横向扩展

角色

  • Server
    • 维护 Cluster 信息(建议至少 3 个节点以上)
    • 多节点选举使用 Raft 协议
  • Client
    • 维护自身状态
    • 将 DNS 、HTTP 接口请求转发给服务端

Cluster

由部署了 Consul Agent 的节点组成;Cluster 由 Server 和 Client 组成

特性

  • 服务发现
    • 通过 DNS 或 HTTP 的方式来注册或发现服务
  • 健康检测
    • Client 提供健康检查
  • K/V 存储
    • 动态配置、功能标记、领袖选举
  • 多数据中心

优点

  • 简单易用、不需集成SDK
  • 自带健康检查
  • 支持多数据中心
  • 提供 Web 管理界面

缺点

  • 不能实时获取服务信息变化的通知

使用

端口

  • Server RPC:8300
  • Serf LAN:8301
  • Serf WAN:8302
  • HTTP API:8500
  • DNS Interface:8600

Docker 部署、使用

开启第1台Server
[-p=8900:8500]把8500端口映射到外部主机的8900端口,使用http://ip:8900/ui访问
[-p=10080:80]把80端口映射到外部主机的10080端口,使用http://ip:80访问等会使用的nginx测试,这一步不是必须的
[-client=0.0.0.0]表示响应所有外部请求,不开启的话会导致webgui无法访问

$ docker run -d --name=server_1 -p=8900:8500 -p=10080:80 -e CONSUL_BIND_INTERFACE=eth0 consul agent -server -bootstrap-expect=3 -client=0.0.0.0 -ui

# 查看所有docker的ip地址
$ docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

# 启动第2台 Server,join 上面得到的 server_1 的IP地址
$ docker run -d --name=server_2 -e CONSUL_BIND_INTERFACE=eth0 consul agent -server -ui -join=172.17.0.2 -client=0.0.0.0

# 启动第3台 Server
$ docker run -d --name=server_3 -e CONSUL_BIND_INTERFACE=eth0 consul agent -server -ui -join=172.17.0.2 -client=0.0.0.0

# 启动第1台 Client
$ docker run -d --name=client_1  -e CONSUL_BIND_INTERFACE=eth0 consul agent -ui -join=172.17.0.2 -client=0.0.0.0

# 检查 Consul 集群状况
$ docker exec -t server_1 consul members

####################
# 集群2
$ docker run -d --name=consul5 -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -bootstrap-expect 3 -datacenter=dc2

$ docker run -d --name=consul6 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.6
$ docker run -d --name=consul7 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.6
$ docker run -d --name=consul8 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=false --client=0.0.0.0 --join 172.17.0.6
# 多数据中心关联
$ docker exec -it consul6 consul join -wan 172.17.0.2

使用说明

Environment Variable(环境变量)

指令 功能
CONSUL_BIND_INTERFACE=eth0 在容器启动时,自动绑定eth0端口的IP地址
CONSUL_UI_LEGACY 使用旧版ui

Command(命令)

指令 功能
acl Interact with Consul’s ACLs
agent 运行Consul agent
catalog Interact with the catalog
connect Interact with Consul Connect
debug 记录操作者的错误日志
event 构建一个事件
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info 向操作者提供错误信息
intention Interact with Connect service intentions
join 告诉Consul agent加入哪个簇
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv 启用顶层KV键值功能
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
tls Builtin helpers for creating CAs and certificates
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul

Args(参数)

Docker参数 功能
-e 将时区信息传入到容器内部。
-d Daemon模式
-p 绑定端口
–name 指定实例名称
Consul参数 功能
-data-dir 指定agent储存状态的数据目录
-config-dir 指定service的配置文件和检查定义所在的位置;通常会指定为"某一个路径/consul.d"(通常情况下,.d表示一系列配置文件存放的目录)
-config-file 指定一个要装载的配置文件;选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)
-dev 创建一个开发环境下的server节点;该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
-bootstrap-expect 该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。
-node 指定节点在集群中的名称;该名称在集群中必须是唯一的(默认采用机器的host);推荐直接采用机器的IP
-bind 指明节点的IP地址
-server 指定节点为server;每个数据中心(DC)的server数推荐为3或5(理想的是,最多不要超过5)
-client consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
-join 将节点加入到集群
-domain 绑定域名
-dc 指定加入哪个数据中心
–retry-join [Server A的IP地址] 通过连接Server A加入集群
–ui 开启网页GUI

权限控制

架构图

图片标题
图片标题

Tags:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注