目录

前言

一、Docker consul(注册中心)

1、什么是consul

2、consul干什么

3、常见的注册中心

4、Consul 特性

5、Consul的使用场景

6、Consul的基本架构

二、consul集群

1、server部署

2、client部署

3、server端配置template模板自动更新

3.1 配置 nginx.ctmpl 文件

3.2 编译安装nginx修改文件并启动

3.3、配置并启动 template

3.4、在client端 增加一个nginx容器节点

4、测试访问代理服务器


前言

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置
与Docker等轻量级容器可无缝配合

一、Docker consul(注册中心)

1、什么是consul

Consul是HashiCorp公司推出的开源工具,consul包含很多组件,但总体来说,consul是用于实现分布

2、consul干什么

consul可以作为注册中心和配置中心,同时consul与其他注册中心一样,提供了一定的存储能力(存放注册者的信息),同时consul可以对集群中的节点进行监控检查实现故障排除。

1、服务发现:consul提供了通过DNS或者http接口的方式来注册服务和发现服务。一些外部的服务通过consul很容易的找到它所依赖的服务。

2、健康检查:consul的client提供健康检查机制,可以用来避免流量被转发到有故障的节点上。

3、KV存储:应用程序可以根据自己的需要使用consul提供key/value存储。consul提供了简单易用的http接口,结合其他工具可以实现动态配置、功能标记、leader选举等。

4、多数据中心:consul提供了多数据中心机制。这样就可以不用再创建多用的虚拟层来应用多个分区。

5、安全服务通信:consul可以为服务生成和分发TLS证书已建立相互TLS连接。Intentions可以用于定义允许通信的服务。可以通过实时更改的instentions来管理服务隔离,而不需复杂的网络拓扑和静态防火墙策略。

6、提供web的UI界面。

​总结:consul是分布式的、高可用的一个服务管理工具,使用go语言编写,所以可移植性高,使用raft保证数分布式数据一致性及服务的高可用。consul内置了服务注和发现、分布一致性协议实现(采用raft算法)、健康检查、KV存储、多数据中心方案以及服务之间的安全通信。每个consul服务提供节点,都运行一个consul agent(代理),consul agent并不意味着必须发现其它的服务,或者进行相应的数据操作,代理只需要对健康检查负责。代理连接一个或者多个consul服务端,consul服务端存储,复制数据,选取leader。虽然consul服务端可以单例运行,但是通过建议部署3到5个实例集群运行,以防止数据丢失,同时保证server-leader的选择能够正确的进行。

Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

3、常见的注册中心

现在比较流行的也就是Consul和Nacos,这两个注册中心我做的项目当中都涉及到了,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用!

4、Consul 特性

  • 服务发现:Consul 的客户端可以注册服务,其他客户端可以使用 Consul 发现给定服务的提供者。使用DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务
  • 健康检查:Consul客户端可以提供任意数量的健康检查,可以与给定的服务关联(“web服务器是否返回200 OK”),也可以与本地节点关联(“内存利用率是否低于90%”)。操作人员可以使用此信息监视集群运行状况,服务发现组件也可以使用此信息将通信流量路由到远离不健康主机的地方,支持多种方式,HTTP, TCP、 Docker, Shell脚本定制化监控。
    KV 存储:应用程序可以使用Consul的分级 key/value 存储来实现各种目的,包括动态配置、特性标记、协调、leader选举等等。简单的HTTP API使其易于使用。
  • 安全服务通信:Consul可以生成和分发服务的TLS证书,以建立相互的TLS连接。可以使用意图来定义允许哪些服务进行通信。可以很容易地管理服务细分,目的可以实时更改,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。
  • Raft 算法:使用Raft算法完成一致性,Raft将一致性问题分解成了三个独立的部分:leader选举、日志复制、安全性。
  • 自带web管理界面:这一点相比于zookeeper注册中心要好一点,zookeeper是没有自带管理界面的。通过管理界面可以清晰的看到注册了多少个服务,以及在管理界面还可以使用服务配置功能。

5、Consul的使用场景

Consul的应用场景包括服务发现、服务隔离、服务配置:

① 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
② 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
③ 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
④ Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

6、Consul的基本架构

Consul Cluster(集群)有Server 和Client两种角色。不管是Server还是Client,统称为Agent(代理)。

  • Consul Client 是相对无状态的,只负责转发RPC到Server资源开销很少。
  • Server是一个有一组扩展功能的代理,这些功能包括参与Raft选举、维护集群状态、响应RPC查询、与其他数据中心交互WAN Gossip和转发查询给leader或者远程数据中心。

每个数据中心,Client和Server是混合的。一股建议有3~5台Server,这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢(server越多追求一致性的时候 必定会消耗一定的时间来进行同步数据,同步数据的过程就会导致服务短时间内不能访问),Server之间会选举出一个Leader,然而并不限制Client的数量,一般建议一个服务对应一个Client,它们可以很容易的扩展到数千或者数万台。在开发时我们绑定一组服务注册中心中的客户端即可。

为什么集群要搭建奇数?

zookeeper的集群同样会面临这个问题,集群一般都是只要坏掉一半服务整个集群就不可用,3和4都是坏掉两台就不可用 所以一般会选三台。

二、consul集群

建立Consul服务

每个提供服务的节点上都要部署和运行Consul的agent

Consul agent有两种运行模式
Server
Client

Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关

1、server部署

mkdir /mnt/consul               #创建目录cd /mnt/consulconsul_0.9.2_linux_amd64.zip    #上传安装包unzip consul_0.9.2_linux_amd64.zip #解压mv consul /usr/bin  #将解压的文件移动到环境变量
consul agent \  #初始化
-server \
-bootstrap \
-ui \   #ui界面
-data-dir=/var/lib/consul-data \   #数据存储位置
-bind=192.168.187.108 \  #绑定地址
-client=0.0.0.0 \        #监听所有地址
-node=consul-server01 &> /var/log/consul.log &   #后台运行consul members   #插入集群成员
consul info | grep leader   #查看leader信息

查看集群server成员     curl 127.0.0.1:8500/v1/status/peers
集群Raf leader      curl 127.0.0.1:8500/v1/status/leader
注册的所有服务    curl 127.0.0.1:8500/v1/catalog/services
查看nginx服务信息    curl 127.0.0.1:8500/v1/catalog/nginx
集群节点详细信息     curl 127.0.0.1:8500/v1/catalog/nodes

2、client部署

#容器服务自动加入nginx集群
1、安装Gliderlabs/Registrator Gliderlabs/Registrator
可检查容器运行状态自动注册,还可注销docker容器的服务 到服务配置中心
目前支持Consul、Etcd和SkyDNS2#在192.168.187.108节点上,执行以下操作docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.187.118 \
consul://192.168.187.108:8500

systemctl restart docker
docker run -itd -p:81:80 --name test-01 -h test01 nginx
docker run -itd -p:82:80 --name test-02 -h test02 nginx
docker run -itd -p:83:80 --name test-03 -h test03 httpd
docker run -itd -p:84:80 --name test-04 -h test04 httpd

本机访问http://192.168.187.108:8500
此时应该可以发现5个服务

3、server端配置template模板自动更新

Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成以后,可以查询Consul中的服务目录,Key、Key-values等。

3.1 配置 nginx.ctmpl 文件

##在consul上操作
vim /mnt/consul/nginx.ctmplupstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};   #此处引用的变量会指向后端的地址和端口(动态变化){{end}}
}server {listen 100;  #监听端口server_name localhost 192.168.187.108;        #反向代理的IP地址(前端展示的NG服务的IP)access_log /var/log/nginx/gg.com-access.log;index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;        #后端真实IPproxy_set_header Client-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #转发地址proxy_pass http://http_backend;   #反向代理调用}
}

3.2 编译安装nginx修改文件并启动

由于之前安装好nginx服务,所以不需要再次安装

yum install gcc pcre-devel zlib-devel -y

tar zxvf nginx-1.22.0.tar.gz  -C /opt

./configure --prefix=/usr/local/nginx

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

配置nginx服务的文件

vim /usr/local/nginx/conf/nginx.conf
在http模块下插入

include vhost/*.conf; #添加虚拟主机目录(consul动态生成的配置文件就会放在这里)

##创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
##创建日志文件目录
mkdir /var/log/nginx##启动nginx
usr/local/nginx/sbin/nginx   或者 systemctl restart nginx.service

3.3、配置并启动 template

cd /mnt/consul上传 consul-template_0.19.3_linux_amd64.zip unzip consul-template_0.19.3_linux_amd64.zip #解压mv consul-template /usr/bin/##关联nginx 虚拟目录中的子配置文件操作    #启动日志监控
consul-template -consul-addr 192.168.187.108:8500 \
-template "/mnt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/gg.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

再打开另一个终端

cat /usr/local/nginx/conf/vhost/gg.conf

3.4、在client端 增加一个nginx容器节点

增加一个 nginx 容器节点,测试服务发现及配置更新功能
//在registrator服务端注册
docker run -itd -p 85:80 --name test-05 -h test05 nginx

浏览器访问查看新添加的内容

4、测试访问代理服务器

是否可以完成代理访问轮询

浏览器访问192.168.187.108:100 多次刷新产生日志

在client端查看日志信息

docker logs -f test-01

docker logs -f test-02

docker logs -f test-05

#注意需要启动日志监控
consul-template -consul-addr 192.168.187.108:8500 \
-template "/mnt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/gg.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

Consul(注册中心)部署相关推荐

  1. 容器注册到consul_Spring Cloud 系列之 Consul 注册中心(一)

    Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...

  2. SpringCloud Consul注册中心介绍及配置使用

    概述:Consul 是HashiCorp 公司推出的一款基于Go语言编写的用于实现分布式系统服务发现与配置的一款开源工具.Consul主要功能包含服务注册与发现.分布式一致性协议(Raft算法)实现. ...

  3. consul java 注册中心_Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例...

    获取springcloud实战项目详细视频教程,请留言联系. 1.创建项目 我们创建聚合项目来讲解 Consul,首先创建一个 pom 父工程. 2.添加依赖 pom.xml 4.0.0 com.ex ...

  4. Consul注册中心注册的服务总是红叉 (All service checks failing)

    Consul注册中心注册的服务总是红叉 (All service checks failing) Consul注册中心注册的服务总是红叉 (All service checks failing) 因为 ...

  5. 【五】、Consul注册中心

    1.什么是Consul? Consul是一个服务网格(微服务间的TCP/IP,负责服务之间的网络调用.限流.熔断和监控)解决方案,它是一个个分布式,高度可用的系统,而且开发使用都很简单.它提供了一个功 ...

  6. .Net Core with 微服务 - Consul 注册中心

    上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...

  7. Consul 注册中心介绍

    在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka.Consul.zookeeper.etcd 等:网关的产品有 Zuul.Spring C ...

  8. 【学习笔记】consul注册中心,服务注册、服务发现、服务监控笔记

    consul api kv - Key/Value存储 agent - Agent控制,一般用来服务注册和检查注册 catalog - 管理nodes和services health - 管理健康监测 ...

  9. consul注册中心高可用集群的搭建经验

    consul简介 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: 1.服务发现: Consul的客户端可用提供一个服务,比如 api 或者 ...

  10. apollo新增扩展consul注册中心

    任意选择一个仓库下载 git clone https://gitee.com/lepdou/apollo.git git clone https://github.com/ctripcorp/apol ...

最新文章

  1. oracle SQL以结尾函数,Oracle学习笔记--SQL查询和SQL函数(转) -- 迷失de天空 -- 编程爱好者......
  2. C、C++文件操作大全
  3. sqlserver 重置自增Id
  4. ubuntu下Samba服务器的搭建
  5. 兼容各种浏览器的自动左右滚动兼左右点击滚动代码
  6. 狂神css3笔记,【CSS】CSS3学习笔记(一)——选择器
  7. IntelliJ IDEA,WebStorm,PyCharm 2017+缓存位置修改
  8. python opencv 身份证照片识别,包含正面、反面(附完整代码,可直接使用)
  9. TeamTalk消息协议
  10. 海湾gst5000主机消防广播_海湾消防主机JB-QG_T-GST5000_JB-QB-GST500控制器说明书.doc
  11. 程序使用微软雅黑作为默认字体在xp下的问题
  12. eclipse项目修改后浏览器不更新
  13. 千万别把WIFI玩坏了!关于WIFI的新鲜玩法和商业模式探讨
  14. [2020首届祥云杯]带音乐家
  15. 学习正则表达式 - 18位身份证号
  16. Java实验6 --模拟物流快递系统程序设计
  17. 接口测试-免费开放的api
  18. 移动硬盘使用注意事项
  19. android 自定义铃声 代码,Android通过代码设置铃声
  20. “百度杯”CTF比赛 十月场 - 考眼力

热门文章

  1. html音乐播放器 利用css和js知识来创建一个音乐播放器(虽然简陋,但是逻辑很容易懂,适合初学者)
  2. 2021年高压电工考试试卷及高压电工作业考试题库
  3. Vue项目中播放直播流
  4. 斐讯K1K2使用breed刷路由器固件
  5. 数据挖掘Java——DBSCAN算法的实现
  6. html button 和 asp button的 各种click事件
  7. 9张图让你明白什么叫做一坨屎一样的iOS垃圾代码
  8. Windows浏览器访问虚拟机RabbitMQ失败解决
  9. Chrome禁用浏览器的密码框自动保存密码提示输入('autocomplete=off'在Chrome中不起作用解决方案),以及密码和用户名回填无问题
  10. 【§暗贱难防xp主题§】