一、定义
Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 Consul 支持 健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对.
命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.
1、Consul 使用场景
Docker 实例的注册与配置共享
Coreos 实例的注册与配置共享
SaaS 应用的配置共享、服务发现和健康检查。
vitess 集群
与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件
2、Consul 优势
使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
支持 多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持。
支持 健康检查。 etcd 不提供此功能。
支持 HTTP、DNS 和 GPRS 协议接口。 zookeeper 的集成较为复杂,etcd 只支持 http 协议。
官方提供 WEB管理界面,etcd 无此功能。
综合比较, Consul 作为服务注册和配置管理的新星,比较值得关注和研究。
3、Consul的四大核心特性:
consul是分布式的、高可用、横向扩展的
服务发现:可以方便的实现服务注册,通过DNS或者HTTP应用程序可以很容易的找到他所依赖的服务.
Key/Value存储:使用Key/Value进行数据存储。
多数据中心:Consul支持开箱即用的多数据中心。这意味着用户不需要担心建立额外的抽象层让业务扩展到多个区域
健康检查:可以对指定服务进行健康检查例如,Response Status是否为200,避免将流量转发到不健康的服务上。
4、构建核心
template 模板(更新)
registrator (自动发现+注册到consul-server端)后端每构建出一个容器,会向registrator进行注册,控制consul完成更新操作,consul会触发consul template模板进行热更新( reload)
核心机制: consul :自动发现、自动更新,为容器提供服务(添加、删除、生命周期)
二、容器服务更新与发现拓扑图
核心就是nginx+后面的容器服务,代理的是容器暴露的端口
让前面nginx不重启服务的情况下识别到后面服务的更新
更新的位置就是nginx里的upstream池
给nginx一个模板,直接识别模板
通过consul
1、registrator 部署在 server上,运行为容器进行操作,发现容器发生变更,识别IP和端口注册在registrator上
2、汇报给consul,更新的IP和端口,agent为代理,consul server只是consul agent其中一个模式。agent控制server收集变更信息并展示出来,在注册中心看到更新信息,并通过templat模板方式定义为标准格式。模板里就有了后端的配置,通过传入变量的方式写入模板中,这样模板中就有了upstraem的配置和后端的信息
3、nginx通过include加载和识别,consul控制nginx重载reload就可以了
三、部署
服务器consul:192.168.226.101 Docker-ce、Consul、 Consul-template
服务器docker:192.168.226.50 Docker-ce、 registrator
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostname consul
[root@localhost ~]# su
[root@consul ~]#
[root@localhost ~]# hostname docker
[root@localhost ~]# su
[root@docker ~]#
1、consul服务器操作
[root@consul ~]# mkdir /root/consul
[root@consul ~]# cd consul/
[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip
[root@consul consul]# mv consul /usr/bin
或者
[root@consul consul]# ln -s /root/consul /usr/bin
[root@consul ~]# consul agent \ agent 模式
> -server \ 使用其中的server模式
> -bootstrap \ 前端框架
> -ui \