Consul 是什么

说明

本文介绍了一个服务发现和配置共享的软件,简单介绍了 Consul 的原理和使用, 一篇小文抛砖引玉,希望能吸引感兴趣的童鞋一起探讨研究。

Consul 是什么

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对.
命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.

Consul 的使用场景

  • docker 实例的注册与配置共享
  • coreos 实例的注册与配置共享
  • vitess 集群
  • SaaS 应用的配置共享
  • 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

Consul 的优势

  • 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
  • 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持.
  • 支持健康检查. etcd 不提供此功能.
  • 支持 http 和 dns 协议接口. zookeeper 的集成较为复杂, etcd 只支持 http 协议.
  • 官方提供web管理界面, etcd 无此功能.

综合比较, Consul 作为服务注册和配置管理的新星, 比较值得关注和研究.

Consul 的角色

client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.

<img src="https://www.consul.io/assets/images/consul-arch-b2478674.png" alt="consul-arch" class="bubble-markdown-image" target="_blank" rel="nofollow" "="" style="text-size-adjust: none; -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); outline: 0px; max-width: 99%; height: auto; vertical-align: top; border: 1px solid rgb(222, 232, 239); margin: 10px 0px;">

安装 Consul

mac os x:

brew cask install consul

Linux 64bit:

wget https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip
unzip 0.4.1_linux_amd64.zip
sudo mv consul /bin

其他系统的安装步骤,请参考官网文档.

初体验

启动:
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node Litao-MacBook-Pro -dc sz-1

查看成员:

consul members

查看节点:

curl 127.0.0.1:8500/v1/catalog/nodes

使用DNS协议查看节点信息:

dig @127.0.0.1 -p 8600 Litao-MacBook-Pro.node.consul

注册服务

注册两个 Mysql 服务的实例, 数据中心在 sz-1, 端口都是 3306. 具体为以下命令:

curl -X PUT -d '{"Datacenter": "sz-1", "Node": "mysql-1", "Address": \
"mysql-1.node.consul","Service": {"Service": "mysql", "tags": ["master","v1"], \
"Port": 3306}}' http://127.0.0.1:8500/v1/catalog/register
curl -X PUT -d '{"Datacenter": "sz-1", "Node": "mysql-2", "Address": \
"mysql-2.node.consul","Service": {"Service": "mysql", "tags": ["slave","v1"],\
"Port": 3306}}' http://127.0.0.1:8500/v1/catalog/register

curl http://127.0.0.1:8500/v1/catalog/service/mysql

 [
    {
        "Address": "mysql-1.node.consul",
        "Node": "mysql-1",
        "ServiceID": "mysql",
        "ServiceName": "mysql",
        "ServicePort": 3306,
        "ServiceTags": [
            "master",
            "v1"
        ]
    },
    {
        "Address": "mysql-2.node.consul",
        "Node": "mysql-2",
        "ServiceID": "mysql",
        "ServiceName": "mysql",
        "ServicePort": 3306,
        "ServiceTags": [
            "slave",
            "v1"
        ]
    }
]

dig @127.0.0.1 -p 8600 mysql.service.consul SRV

; <<>> DiG 9.10.0-P2 <<>> @127.0.0.1 -p 8600 mysql.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12821
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;mysql.service.consul.    IN  SRV

;; ANSWER SECTION:
mysql.service.consul. 0 IN  SRV 1 1 3306 mysql-2.node.sz-1.consul.
mysql.service.consul. 0 IN  SRV 1 1 3306 mysql-1.node.sz-1.consul.

;; ADDITIONAL SECTION:
mysql-2.node.sz-1.consul. 0 IN  CNAME mysql-2.node.consul.
mysql-1.node.sz-1.consul. 0 IN  CNAME mysql-1.node.consul.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Tue Dec 02 16:42:38 CST 2014
;; MSG SIZE  rcvd: 280

参考链接

https://www.consul.io
http://txt.fliglio.com/2014/05/encapsulated-services-with-consul-and-confd/

### Consul服务发现与配置管理工具介绍 #### 定义 Consul是由HashiCorp公司推出的一款开源工具,旨在解决分布式系统中的服务发现与配置问题[^3]。该工具不仅能够提供高效的服务注册与发现机制,还具备健壮的键值对存储功能,可用于集中化管理和动态调整应用程序配置。 #### 功能特性 - **服务注册与发现** - 支持自动化的服务注册流程,允许各个微服务实例将自己的网络地址和其他元数据提交给Consul集群。 - 提供API接口让客户端查询可用的服务列表及其状态信息,从而简化跨服务调用过程中的寻址难题[^4]。 - **健康检查** - 内置了灵活可扩展的健康监测框架,可以定期检测已登记节点的状态变化情况(如响应延迟过高或端口不通),并据此做出相应的处理决策,比如移除不健康的实例以保障整体系统的稳定性。 - **Key/Value存储** - 利用了高效的内存数据库来保存各种形式的数据项,特别适合用来存放那些需要频繁读取但修改频率较低的信息片段——例如全局性的参数设定或是特定环境下的变量映射表单等。 - 对于采用Spring Cloud构建的应用而言,还可以借助此特性轻松达成外部化配置的目标,在不停机的情况下即时生效新的设置选项[^2]。 - **多数据中心支持** - 考虑到了现代企业级架构往往涉及多个地理区域部署的需求,因此设计之初就充分考虑到了如何跨越不同位置之间的通信障碍以及同步策略等问题,确保即使在网络状况不佳甚至完全隔离的情形下也能维持正常的协作关系。 ```python import consul client = consul.Consul() # 获取KV存储中的某个key对应的value index, data = client.kv.get('config/db_host') print(data['Value'].decode()) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值