说明

本文介绍了一个服务发现和配置共享的软件,简单介绍了 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 原理和使用简介相关推荐

  1. RTOS原理及功能简介

    文章目录 1 RTOS原理及功能简介 1.1 RTOS概述 1.2 RTOS工作原理简介 1.3 RTOS如何解决前后台代码结构存在的问题 1 RTOS原理及功能简介 1.1 RTOS概述 百度百科的 ...

  2. DCT算法的原理及实现简介

    DCT算法的原理及实现简介 DCT算法: DCT变换的全称是离散余弦变换(Discrete Cosine Transform),离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变 ...

  3. Android 系统(175)---Android硬件加速原理与实现简介

    Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...

  4. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...

  5. 015. P2P技术详解(一):NAT详解——详细原理、P2P简介

    http://www.52im.net/thread-50-1-1.html 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层 ...

  6. FPGA原理和结构简介

    FPGA原理和结构简介 一.FPGA在芯片体系中的地位 我们生活中丰富多彩的应用程序是通过计算机底层大量的数字逻辑运算实现的,而处理这些数字逻辑运算的芯片我们称为数字芯片,常见的处理器如CPU,GPU ...

  7. SLAM总结(一)- SLAM原理概述与简介

    SLAM总结(一)- SLAM原理概述与简介 SLAM(Simultaneous Localization and Mapping):同时定位和建图,定位是定位机体在世界坐标系下的位姿(pose.tr ...

  8. 看懂相控阵雷达工作原理及类型简介

    我们知道,蜻蜓的每只眼睛由许许多多个小眼组成,每个小眼都能成完整的像,这样就使得蜻蜓所看到的范围要比人眼大得多.与此类似,相控阵雷达的天线阵面也由许多个辐射单元和接收单元(称为阵元)组成,单元数目和雷 ...

  9. GPS定位原理及应用简介

      GPS定位原理及应用简介   内容:掌握 GPS 的基本概念和系统组成:掌握 GPS 的坐标系统和基本定位原理:理解 GPS 定位方法分类中绝对定位和相对定位.静态定位和动态定位的概念及用途. 重 ...

最新文章

  1. symfony 2 app.php,php / symfony2从URL隐藏app.php
  2. 想挖矿?不如先学习一下以太坊
  3. Redhat Linux 7.2 打开或关闭防火墙
  4. 动态规划训练10 [Coloring Brackets CodeForces - 149D]
  5. Linux系统管理(9)——系统状态监控命令top使用详解
  6. leetcode python3 简单题168. Excel Sheet Column Title
  7. 做游戏,学编程(C语言) 8 英雄联盟连连看
  8. Kotlin 一统天下?Kotlin/Native 开始支持 iOS 和 Web 开发
  9. 反向传播算法(BP)学习笔记
  10. ab压力测试_使用ab来一次压力测试之旅
  11. 使用Python2.7和火狐浏览器下载QQ空间好友相册
  12. 搜狗拼音输入法2015 v7.5 官方版​
  13. 常用C++开发环境介绍
  14. 怎么在数学表达式里输入小数点
  15. LeetCode contest 199 5472. 重新排列字符串 Shuffle String
  16. Linux驱动之 字符设备 ioctl接口使用
  17. 时间组件关于禁选时间的设置(禁选当前之前的时间、禁止选择某个范围之外的时间等)
  18. 数据库管理系统实现技术
  19. C#中Any CPU和X86和X64平台的差异对比
  20. Charle和Fiddler抓包 unknown 和证书无效的解决方案

热门文章

  1. php中的foreach和js中的foreach的用法和区别
  2. [学习windows/记录篇]安装TMG防火墙(三向外围)
  3. SQL里各种联合查询总结
  4. flex 动态显示时间
  5. 思科CCNA考试实验常用的命令
  6. matlab代码重改python代码,对应函数
  7. 使用OpenCV 实现matlab的padarray(A, padsize, ‘symmetric’)函数简单实现
  8. Gossip 数据传播协议
  9. PCL点云库用Poisson网格化实现点云的表面重建
  10. 高效并发处理之libevent