Docker Consul概述及构建

Docker Consul概述及构建

  • 一、Consul概述
    • 1.1、什么是Consul
    • 1.2、consul 容器服务更新与发现
    • 1.3、服务注册与发现的含义
    • 1.4、consul-template概述
    • 1.5、registrator的作用
  • 二、consul部署
    • 2.1、环境配置
    • 2.2、在主节点上部署consul
    • 2.3 、配置容器服务自动加入nginx集群
      • 2.3.1、安装Gliderlabs/Registrator
      • 2.3.2、测试服务
      • 2.3.3、验证http和nginx服务是否注册到consul
    • 2.4、consul 群集添加 consul-template 以实现容器自动加入
      • 2.4.1、解压软件包
      • 2.4.2、准备template nginx模板文件 (在consul服务器上)
      • 2.4.3、编译安装nginx (在consul服务器上)
      • 2.4.4、配置 nginx
      • 2.4.5、启动template,指定template模板文件及生成路径
      • 2.4.6、打开新终端查看生成配置文件
    • 2.5、新增一个 nginx 容器节点以测试自动更新
    • 2.6、部署consul多节点
  • 三、总结

一、Consul概述

1.1、什么是Consul

  • Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。

  • Consul是分布式的、高可用的、可横向扩展的用于实现分布式系统的服务发现与配置。

    支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
    
    • 在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
    • 在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。

consul提供的一些 关键特性:

1.健康检查: 健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
2.Key/Value存储: 一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
3.多数据中心: 无需复杂的配置,即可支持任意数量的区域。

1.2、consul 容器服务更新与发现

在这里插入图片描述
容器服务更新与发现:先发现再更新,发现的是后端节点上容器的变化(registrator),更新的是nginx配置文件(agent)

  • registrator:是consul安插在docker容器里的眼线,用于监听监控节点上容器的变化(增加或减少,或者宕机),一旦有变化会把这些信息告诉并注册在consul server端(使用回调和协程的方式,所以它的延迟和资源消耗会很少),consul server发生一旦发生注册列表的变化后,会把注册的信息告诉agent

  • agent(代理):用来控制 consul template 模板,用template组件去和nginx.conf来进行对接,模板里全是变量,用变量的方式去加载后端由注册到consul server端之后,server端会把信息告诉agent,agent和template进行对接,写入template,template就有了镜像,更新完之后会作为nginx.conf子配置文件被前端的nginx识别,consul agent会控制reload之后会识别nginx.conf配置文件中的变化,相当于识别后端的节点,就可以在地址池中动态调整自己后端资源。

1.3、服务注册与发现的含义

服务注册与发现是微服务架构中不可或缺的重要组件。 起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段是在服务前端负载均衡,这样前端必须要知道所有后端服务的网络位置,并配置在配置文件中。

这里就会有几个问题:

  • 如果需要调用后端服务A-N,就需要配置N个服务的网络位置,配置很麻烦。
  • 后端服务的网络位置变化,都需要改变每个调用者的配置。
既然有这些问题,那么服务注册与发现就是解决这些问题的。后端服务A-N可以把当前自己的网络位置注册到服务发现模块,服务发现就以K-V的方式记录下来,K一般是服务名,v就是IP:PORT。服务发现模块定时的进行健康检查,轮询查看这些后端服务能不能访问的了。前端在调用后端服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。这样的方式就可以解决上面的问题了,前端完全不需要记录这些后端服务的网络位置,前端和后端完全解耦

1.4、consul-template概述

  • Consul-Template是一个守护进程,用于实时查询Consul集群信息
  • Consul-Template可以更新文件系统上任意数量的指定模板,生成配置文件
    更新完成以后,可以选择运行shell命令执行更新操作,重新加载Nginx。
  • Consul-Template可以查询Consul中的服务目录、Key、Key-values等。
    这种强大的抽象功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件。
    例如:创建Apache/Nginx Proxy Balancers、Haproxy Backends

1.5、registrator的作用

一个由Go语言编写的,针对docker使用的,可以用于检测容器状态,自动注册和注销docker容器的服务到服务配置中心。目前支持Consul、Etcd和SkyDNS2。

二、consul部署

2.1、环境配置

主机IP 地址需要安装的软件
主节点192.168.11.12docker-ce、consul、consul-template、nginx
registrator192.168.11.13doker-ce、 registrator
  • emplate 模板(更新)
  • registrator(自动发现)
  • 后端每构建出一个容器,会向registrator进行注册,控制consul 完成更新操作,consul会触发consul template模板进行热更新
  • 核心机制:consul :自动发现、自动更新,为容器提供服务(添加、删除、生命周期)

2.2、在主节点上部署consul

#两台节点上都安装 Docker-ce,记得关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i "s/SELINUX=*/SELINUX=disabled/g" /etc/selinux/config
#创建consul工作目录
cd /opt
mkdir consul
#将软件包上传到consul工作目录中解压
unzip consul_0.9.2_linux_amd64.zip

在这里插入图片描述
在这里插入图片描述

将consul移动到系统可识别目录下
mv consul /usr/local/bin
查看consul目录参数
consul -h

在这里插入图片描述
在这里插入图片描述

#启动consul准备数据目录ls -d /opt/consul/data/
nohup consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/opt/consul/data
-bind=192.168.11.12 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
-server: 以server身份启动。默认是client。
-bootstrap :用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。
-bootstrap-expect=2 :集群要求的最少server数量,当低于这个数量,集群即失效。
-ui :指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
-data-dir :指定数据存储目录。
-bind :指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0-client :指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1-node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-datacenter :指定数据中心名称,默认是dc1。

在这里插入图片描述

启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口
查看集群状态
#查看members状态
consul member
consul operator raft list-peers
consul info | grep leader

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过 http api 获取集群信息
http://192.168.11.12:8500/v1/status/peers 			#查看集群server成员
http://192.168.11.12:8500/v1/status/leader			#集群 server-leader
http://192.168.11.12:8500/v1/catalog/services			#注册的所有服务
http://192.168.11.12:8500/v1/catalog/nginx			#查看 nginx 服务信息
http://192.168.11.12:8500/v1/catalog/nodes			#集群节点详细信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 、配置容器服务自动加入nginx集群

registrator:192.168.11.13

2.3.1、安装Gliderlabs/Registrator

Gliderlabs/Registrator可检查容器运行状态自动注册,还可注销docker 容器的服务到服务配置中心。目前支持ConsulEtcdSkyDNS2。
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.11.13 \
consul://192.168.11.12:8500
##################################################################################
--net=host :把运行的docker容器设定为host网络模式。
-v /var/run/docker.sock:/tmp/docker.sock;把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。
--restart-always :设置在容器退出时总是重启容器。
--ip:刚才把network指定了host模式,所以我们指定ip为宿主机的ip。consul :指定consul服务器的IP和端口。

在这里插入图片描述

2.3.2、测试服务

测试发现功能是否正常
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:91:80 --name test-03 -h test03 httpd
docker run -itd -p:92:80 --name test-04 -h test04 httpd

在这里插入图片描述
在这里插入图片描述

2.3.3、验证http和nginx服务是否注册到consul

在这里插入图片描述

在consul server 通过curl命令测试
#通过curl命令查询到Consul上注册的一些服务
curl 127.0.0.1:8500/v1/catalog/services 

在这里插入图片描述

2.4、consul 群集添加 consul-template 以实现容器自动加入

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

2.4.1、解压软件包

unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin/

在这里插入图片描述

2.4.2、准备template nginx模板文件 (在consul服务器上)

vim /root/consul/nginx.ctmplupstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}server {listen 81;server_name localhost 192.168.11.12;access_log /var/log/nginx/nginx01-access.log;index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}

在这里插入图片描述

2.4.3、编译安装nginx (在consul服务器上)

yum install -y gcc pcre-devel zlib-devel
cd /opt
tar zxvf nginx-1.21.6.tar.gz
cd nginx-1.21.6/
./configure --prefix=/usr/local/nginx
make && make install

在这里插入图片描述
在这里插入图片描述

2.4.4、配置 nginx

vim /usr/local/nginx/conf/nginx.conf
http {include    mime.types;include vhost/*.conf;  //添加虚拟主机目录default_type application/octet-stream;//创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
//创建日志文件目录
mkdir /var/log/nginx//启动nginx
/usr/local/nginx/sbin/nginx

在这里插入图片描述
在这里插入图片描述

2.4.5、启动template,指定template模板文件及生成路径

consul-template -consul-addr 192.168.11.12:8500 \
-template
"/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/nginx01.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

在这里插入图片描述

2.4.6、打开新终端查看生成配置文件

#此时另外打开一个终端
[root /opt]# cd /usr/local/nginx/conf/vhost
[root /usr/local/nginx/conf/vhost]# ls
nginx01.conf
##已经出现配置文件
[root /usr/local/nginx/conf/vhost]# cat nginx01.conf#访问这个池子里面的Web页面,得访问192.168.11.12:8080,且是轮询机制,这里若访问不了,可以重载nginx再试试

在这里插入图片描述

2.5、新增一个 nginx 容器节点以测试自动更新

docker run -itd -p:85:80 --name test-05 -h test05 nginx

在这里插入图片描述

在consul服务器自动更新

在这里插入图片描述

 在nginx服务器查看: 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6、部署consul多节点

mkdir /root/consul
cd /root/consul
//放入安装包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/binconsul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.11.12\
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.11.13 &> /var/log/consul.log &#--------参数解释--------------------------------
-enable-script-checks=true:设置检查服务为可用
-datacenter:数据中心名称
-join:加入到已有的集群中

三、总结

  • consul是google开源的一个使用go语言开发的服务管理软件。

    • 在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
    • 在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。
  • Consul的特性

    • 支持健康检查、允许存储键值对
    • 基于Golong语言,可移植性强
    • 支持ACL访问控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LSTM-Based Anomaly Detection of Process Instances Benchmark and Tweaks翻译

论文《LSTM-Based Anomaly Detection of Process Instances Benchmark and Tweaks》翻译 LSTM-Based Anomaly Detection of Process Instances Benchmark and Tweaks翻译

使用AWS Lambda函数的最佳实践!

主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践 有关 Lambda 应用程序最佳实践的更多信息,请参阅 Serverless Land 中的 Application design。 函数代码 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中…

IDEA 使用技巧

文章目录 语言支持简化编写 有问题,可暂时跳过 个人常用快捷键插件主题插件功能插件 碰到过的问题 除了一些在Linux上用vim开发的大佬,idea算是很友好的集成开发工具了,功能全面,使用也很广泛。 记录一下我的 IDEA 使用技巧&#…

Android WMS——WM窗口管理(八)

我们在 ViewRootImpl 分析中,已经对 WindowManager 的功能有一个大致了解,这里再来详细看一下 WindowManager 是如何管理 Window 的。 一、WindowManager WindowManager 所提供的功能很简单,常用的只有三个方法,即添加 View,更新 View,和删除 View。这三个方法定义在 Vi…

OSPF综合实验

一、实验拓扑 二、实验需求 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回&a…

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测(自注意力机制) 目录 分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测(自注意力机制)分类效果基本描述程序设计参考资料 分类效果 基本描述 1…

DVWA-SQL Injection SQL注入

概念 SQL注入,是指将特殊构造的恶意SQL语句插入Web表单的输入或页面请求的查询字符串中,从而欺骗后端Web服务器以执行该恶意SQL语句。 成功的 SQL 注入漏洞可以从数据库中读取敏感数据、修改数据库数据(插入/更新/删除)、对数据…

使用Gateway解决跨域问题时配置文件不生效的情况之一

首先html文件只有一个发送ajax请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

21.12 Python 实现网站服务器

Web服务器本质上是一个提供Web服务的应用程序&#xff0c;运行在服务器上&#xff0c;用于处理HTTP请求和响应。它接收来自客户端&#xff08;通常是浏览器&#xff09;的HTTP请求&#xff0c;根据请求的URL、参数等信息生成HTTP响应&#xff0c;并将响应返回给客户端&#xff…

基于SpringBoot的在线笔记系统

技术介绍 &#x1f525;采用技术&#xff1a;SpringSpringMVCMyBatisJSPMaven &#x1f525;开发语言&#xff1a;Java &#x1f525;JDK版本&#xff1a;JDK1.8 &#x1f525;服务器&#xff1a;tomcat &#x1f525;数据库&#xff1a;mysql &#x1f525;数据库开发工具&…

C#开发DLL,CAPL调用(CAPL>> .NET DLL)

文章目录 展示说明新建类库工程C# 代码生成dllCAPL脚本调用dll,输出结果展示 ret为dll里函数返回的值。 说明 新建类库工程 在visual studio中建立。 C# 代码 using

合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 作者&#xff1a;爱吃饼干的小白鼠。Python领域优质创作者&#xff0c;2022年度博客新星top100入围&#xff0c;荣获多家平台专家称号。…

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果…

Ansible中常用模块

目录 一、Ansible实现管理的方式 二、Ad-Hoc执行方式中如何获得帮助 三、Ansible命令运行方式及常用参数 四、Ansible的基本颜色代表信 五、Ansible中的常用模块 1、command模块 2、shell模块、script模块 3、copy模块、fetch模块 4、file模块 5、archive模块、unarc…

springboot整合postgresql

使用docker安装postgres 简单起见&#xff0c;这里用docker来安装postgresql docker pull postgresdocker run --name postgres \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /usr/local/docker/postgresql/data:/var/lib/postgresql/data \-d postgrespostgres客户端 pg…

ARL灯塔安装与使用

ARL灯塔安装与使用 1. 系统要求2. ARL灯塔安装2.1. docker环境安装2.1.1. 更新yum包2.1.2. 卸载老版docker2.1.3. 安装docker所需要的依赖包2.1.4. 设置yum源2.1.5. 查看仓库中docker版本2.1.6. 安装docker最新版2.1.7. docker设置2.1.8. docker其它命令 2.2. 安装docker-compo…

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构&#xff0c;OLTP和OLAP的区别&#xff0c;数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&am…

在python中加载tensorflow-probability模块和numpy模块

目录 操作步骤&#xff1a; 注意&#xff1a; 问题&#xff1a; 解决办法&#xff1a; 操作步骤&#xff1a; 在虚拟环境的文件夹中&#xff0c;找到Scripts文件夹&#xff0c;点击进去&#xff0c;找到地址栏&#xff0c;在地址栏中输入cmd&#xff0c;进入如下界面。 输…

安防视频监控平台EasyCVR前端解码与后端解码的区别介绍

视频监控平台/视频存储/视频分析平台EasyCVR基于云边端一体化管理&#xff0c;支持多类型设备、多协议方式接入&#xff0c;具体包括&#xff1a;国标GB28181协议、RTMP、RTSP/Onvif、海康Ehome&#xff0c;以及海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石SDK等&#x…

批量剪辑的视频怎么才能有更高的质量,更好的过审率?

在这个人人都做短视频的时代&#xff0c;批量剪辑工具就应运而生&#xff0c;成为不少短视频从业者的首选。超级编导剪辑软件是一款高质量的批量剪辑工具&#xff0c;能够一站式助力短视频团队完成脚本创作、批量剪辑、矩阵分发&#xff0c;是所有做短视频的团队不可多得的得力…