【Docker六】Docker-consul

目录

一、docker-consul概述

1、服务注册和发现:

1.1、服务注册和发现概念

1.2、服务注册和发现工作机制:

1.3、服务注册与发现的优点:

2、docker-consul概念

2.1、consul的主要特点:

二、consul架构部署:

1、consul服务器配置

1.1、架构:三台服务器:

1.2、consul安装:

1.3、相关端口:

2、检查consul集群相关命令:

3、集群自动发现和注册

3.1、启动consul server

3.2、检测自动发现和注册

4、配置consul-template

4.1、 准备 template nginx 模板文件

4.2、docker1安装nginx:

4.3、配置nginx

4.4、配置并启动 template

4.5、配置并运行template-nginx

4.6、访问template-nginx

5、实现consul的多节点:


一、docker-consul概述

1、服务注册和发现:

1.1、服务注册和发现概念

什么叫做微服务(容器)的注册与发现?

是一种分布式管理系统,定位服务的方法。

在传统的架构中,应用程序之间是直连到已知的服务,由设备提供的网络:IP地址,基于tcp/ip协议的端口

由于现代微服务部署,服务的动态性,数量增加了,传统的基于ip+端口的形式已经不太适用。所以有了服务注册和发现。

微服务的位置信息(ip+端口+健康状态)统一注册到一个中心化的服务注册表中。可以允许其他服务动态的查询和发现这些服务

服务发现和注册时微服务架构中非常重要的组件

1.2、服务注册和发现工作机制:
  1. 服务注册:当一个服务启动时,会把自己的元数据(ip、端口、服务名称、健康状态)注册到服务注册表中。这个注册表的服务(consul,zookeeper)。也可以在云平台部署
  2. 服务发现:其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip+端口),这样的话可以直接在服务注册表中,直接获取我要的信息,不需要到静态配置查看

1.3、服务注册与发现的优点:
  1. 动态性:可以在运行时动态添加和移除服务,不需要额外的人工操作和配置。
  2. 弹性:一旦某个服务不可用,服务注册表可以及时更新,通知其他服务避免请求的失败。
  3. 可扩展:可以适应不断变化的服务数量
  4. 透明性:服务方调用时,透明性,前端和后端实现解耦

服务注册和发现机制与其他工具配置使用,如负载均衡、健康检查、配置管理(一键同步)

2、docker-consul概念

docker-consul:容器的自动发现与注册

docker-consul的核心就是发现,微服务,可以动态的管理

docker-consul的作用查、看。元数据:ip、端口、健康状态、服务名称

consul:服务注册和发现工具

consul是HashiCrop公司开发的一套工具,用于实现服务发现与注册,配置管理,分布式的系统协调

2.1、consul的主要特点:
  1. 服务发现与自动注册,位置信息(ip+端口+服务名称)
  2. 健康检查,服务注册到consul中,一并加入系统的还有他的健康状态,定期发送一个心跳检查,如果服务挂了,consul会自动移除
  3. 分布式锁:consul提供了一个分布式锁的功能,协调多个节点之间的操作,防止竞争条件和数据冲突

每一个服务的发现与注册都是一个会话,session。

创建锁:微服务1在注册到consul的时候,consul会和服务的会话创建一个锁,锁用来标识具体的服务会话和锁之间相关联

获取锁:微服务2,建立会话,获取锁,如果申请的锁没有被使用,客户端成功获取,如果已经存在,表示已有其他服务在占用,会给你分配一个新的锁(KV存储)

释放锁:任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系。删除与锁关联的键。实现资源的释放

  1. KV存储:key-value分布式键值对存储系统,存储配置信息、锁、特性等。应用程序可以使用consul的键值对信息来动态的获取配置信息
  2. 多数据中心支持,consul可以在多个地域部署,可以实现数据中心之间的发现和注册功能。
  3. DNS和http的API:consul支持DNS接口,通过域名解析定位服务的位置。http api:通过api应用接口,可以调用consul的信息,服务信息,健康检查等
  4. 事件通知,如果关键信息可以随时获取通知。

二、consul架构部署:

1、consul服务器配置

1.1、架构:三台服务器:

consul服务器:Docker1:20.0.0.51 consul Docker-ce nginx(二进制部署) consul-template(自动发现和部署)

registrator服务器:Docker2:20.0.0.52 运行注册机制和微服务(容器服务)

consul服务器:多节点服务器 Docker3 20.0.0.28(加入到consul集群中)

1.2、consul安装:

consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.51 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
consul agent:开启监听服务
-server:指定集群中的服务器节点,consul的RAFT算法实现分布式结构中节点的一致性。集群的成员,直接成为集群的leader,后续加入的服务器都是follower
-bootstrap:表示该节点是引导节点,引导选举过程,以及为后续加入的server做引导,加入集群
-ui:启动图形化界面
-data-dir=/var/lib/consul-data:consul存储数据的路径
-bind=20.0.0.51:服务器绑定的IP地址,节点中通信
-client=0.0.0.0:客户端的地址,所有主机都可以server建立通信(生产中是指定的服务器)
-node=consul-server01:指定consul节点的名称,在集群中consul节点的名称都是唯一的,不可重复
&> /var/log/consul.log:混合重定向输出到consul.log
&:后台运行

1.3、相关端口:
8300:RAFT协议端口,保持分布式集群的一致性,端口处理复制和领导者选举
8301:LAN Gossip的端口,局域网内部进行节点通信和信息传播的协议
8302:WAN Gossip的端口,广域网内部节点的通信和信息传播协议
8500:web ui的端口,用来访问consul的图形化界面
8600:DNS解析端口

2、检查consul集群相关命令:

consul members
集群信息
consul operator raft list-peers
查看集群状态
curl 127.0.0.1:8500/v1/status/peers
查看集群的server成员
curl 127.0.0.1:8500/v1/status/leader
查看集群的领导者
curl 127.0.0.1:8500/v1/catalog/services
查看已经被集群发现和注册的服务
curl 127.0.0.1:8500/v1/catalog/nodes
查看集群节点的详细信息

3、集群自动发现和注册

3.1、启动consul server
docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.52 \
consul://20.0.0.51:8500 -v /var/run/docker.sock:/tmp/docker.sock :指定挂载卷
docker.sock是docker守护进程的Unix的套接字文件,把他映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务
--ip=20.0.0.52:注册在consul的IP地址
consul://20.0.0.51:8500 :所有发现的服务都会注册到指定的server节点

3.2、检测自动发现和注册

docker run -itd -p 81:80 --name test-1 -h test1 nginx

docker run -itd -p 82:80 --name test-2 -h test2 httpd

docker run -itd -p 83:80 --name test-3 -h test3 nginx

-h指定容器里的主机名

去浏览器访问consul:

20.0.0.51:8500 查看被监测的节点

consul-template:实现配置管理自动化

用于consul集成,自动更新配置文件,实现噢诶之管理的自动化

作用:

1、动态的配置更新。consul-template监听consul中key-value的存储键值对,键值对发生变化会自动的更新配置文件,无需重启服务

2、支持多种后端的模版:nginx配置、ETCD等等

4、配置consul-template

consul-template:

自动化管理配置文件的工具,获取consul中注册的服务信息,可以自动的添加到配置文件中,即使生效无需重启服务

做到自动化更新配置文件

4.1、 准备 template nginx 模板文件

vim /opt/consul/nginx.ctmpl

upstream test1 {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}server {listen 8000;server_name localhost 20.0.0.51;access_log /var/log/nginx/test1-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;
}
}

在这个配置当中,test1的反向代理的方法会遍历由consul注册的所有服务名称为nginx的服务

server {{.Address}}:{{.Port}};  将发现和注册的nginx服务的IP地址和端口,添加到test1的upstream方法当中

4.2、docker1安装nginx:
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make2、创建运行用户
useradd -M -s /sbin/nologin nginx3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_modulemake && make install4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetchmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
启动nginx 查看端口

4.3、配置nginx

改nginx的配置文件

18行

创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
创建日志文件目录
mkdir /var/log/nginx
停止nginx
nginx -s stop 
启动nginx
nginx

4.4、配置并启动 template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/

4.5、配置并运行template-nginx

docker1运行template

consul-template --consul-addr 20.0.0.51:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=infoconsul-template --consul-addr 20.0.0.51:8500 指定consul的地址,告诉 consul-template从server节点获取数据
template "/opt/consul/nginxctmpl:/usr/local/nginx/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload"
/opt/consul/nginx.ctmpl:配置文件的模版位置
/usr/local/nginx/vhost/test.conf:基于模版生成配置文件的位置
/usr/local/nginx/sbin/nginx -s reload" 只要集群中服务发生变化,可以随时更新到配置文件中
--log-level=info	设置consul-template的日志级别为info

开个docker1终端,看日志

var/log/consul.log

consul是一个中间件:nginx服务通过consul-template获取模版,反向代理,consul-template——consul来获取注册服务的ip和端口然后nginx调用nginx调用发现的服务来实现负载均衡

template——本机nginx——调用容器nginx,实现负载均衡

4.6、访问template-nginx
docker exec -it test-1 bash
echo "this is test1 web" > /usr/share/nginx/html/index.htmldocker exec -it test-3 bash
echo "this is test2 web" > /usr/share/nginx/html/index.html

浏览器访问:http://20.0.0.51:8000/ ,并不断刷新。实现轮询

自动生成的配置文件在

/usr/local/nginx/conf/vhost/test.conf

5、实现consul的多节点:

consul的多节点:一旦选举出了leader,后续的服务器都是follower。server的名称不能重复,唯一,但是在一个数据中心上

docker3安装consul

docker3添加到consul集群中去:

consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.28 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 20.0.0.51 &> /var/log/consul.log &

-enable-script-checks=true \
设置检查服务为可用,他也可以发现原集群当中的服务
-datacenter=dc1 \
加入到docker1的数据中心
-join 20.0.0.51加入到已有的集群中

consul members
consul operator raft list-peers

在docker2上执行:

让docker3也监控docker2上的容器

docker run -d \
> --name=registrator2 \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> --ip=20.0.0.52 \
> consul://20.0.0.28:8500

浏览器consul查看:

http://20.0.0.51:8500/

脱离集群:

consul leave

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

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

相关文章

构建强大应用的引擎:深度解析Spring Boot Starter机制

目录 引言1. Spring Boot Starter机制1.1 什么是Spring Boot Starter1.2 为什么要使用Spring Boot Starter1.3.应用场景1.4.自动加载核心注解说明 2. 综合案例配置类制作控制功能实现 总结 引言 在当今互联网时代,构建高性能、可维护的应用已成为开发者的首要任务。…

利用有限制通配符来提升API的灵活性

在Java中,有限制通配符(bounded wildcard)允许你在泛型中指定一个范围,从而提升API的灵活性。通配符使得你能够编写更通用、适用于多种类型的代码。以下是一个利用有限制通配符提升API灵活性的例子: 假设有一个简单的…

QT笔记(节选)具体图片等下载资源

QT笔记(节选)具体图片等下载资源 根据b站视频做的笔记: https://www.bilibili.com/video/BV1g4411H78N?p44&spm_id_frompageDriver&vd_sourcea3e6a48ccd3d7d1f969f662653ed68c9 qt是一个跨平台的c图形用户界面应用程序框架&#x…

【最新版】PyCharm基础调试功能详解

文章目录 一、断点1. 断点的类型a. 行断点b. 异常断点 2. 设置断点a. 设置行断点b. 设置异常断点 3. 管理断点a. 删除断点b. 将断点静音 二、调试功能0. 测试代码1. 设置断点2. 调试的多种启动方式3. 观察调试控制台a. 步过b. 步入c. 单步执行代码d. 步出e. 运行到光标处f. 重新…

LVS简介及LVS-NAT负载均衡群集的搭建

目录 LVS群集简介 群集的含义和应用场景 性能扩展方式 群集的分类 负载均衡(LB) 高可用(HA) 高性能运算(HPC) LVS的三种工作模式 NAT 地址转换 TUN IP隧道 IP Tunnel DR 直接路由 Direct Rout…

Leaflet.Graticule源码分析以及经纬度汉化展示

目录 前言 一、源码分析 1、类图设计 2、时序调用 3、调用说明 二、经纬度汉化 1、改造前 2、汉化 3、改造效果 总结 前言 在之前的博客基于Leaflet的Webgis经纬网格生成实践中,已经深入介绍了Leaflet.Graticule的实际使用方法和进行了简单的源码分析。认…

鸿蒙小车之多任务调度实验

说到鸿蒙我们都会想到华为mate60:遥遥领先!我们一直领先! 我们这个小车也是采用的是鸿蒙操作系统,学习鸿蒙小车,让你遥遥领先于你的同学。 文章目录 前言一、什么是任务?为什么要有任务二、任务的状态三、任…

Python 自动化之收发邮件(二)

发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…

LeetCode 2415. 反转二叉树的奇数层:深度优先搜索(DFS)

【LetMeFly】2415.反转二叉树的奇数层:深度优先搜索(DFS) 力扣题目链接:https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c…

部署LVS的NET模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Axure元件库的介绍以及个人简介和登录界面案例展示

目录 一. 元件介绍 二. 基本元件的使用 2.1 形状元件 2.2 图片元件 2.3 占位符 2.4 文本 2.5 线段元件 2.6 热区文件 三. 表单元件的使用 3.1 文本框 3.2 文本域 3.3 下拉列表 3.4 列表框 3.5 复选框 3.6 单选按钮 四. 菜单与表格元件的使用 4.1 树 4.2 表格…

持续集成交付CICD:GitLabCI操作Harbor仓库

目录 一、实验 1.GitLabCI操作Harbor仓库 二、问题 1.gitlab-runner连接docker daemon报错 一、实验 1.GitLabCI操作Harbor仓库 (1)修改GitLabCI共享库代码并提交到mater CI.yaml .pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: …

金蝶云星空协同开发环境应用内执行单据类型脚本

文章目录 金蝶云星空协同开发环境应用内执行单据类型脚本业务界面查询单据类型表数据导出数据执行数据库脚本单据类型xml检验是否执行成功检查数据库检查业务数据 金蝶云星空协同开发环境应用内执行单据类型脚本 业务界面 查询单据类型表数据 先使用类型中文在单据类型多语言…

C++使用回调函数的两种方式

一.函数指针 #include <iostream>typedef void (*callback)(int ,int); class MyTest { public:void setCallback(callback cb){m_callback = cb;}void add(int a, int b){m_callback(a, b);}private:callback m_callback; };void onCallback(int a, int b) {std::cout …

[C++]——学习模板

了解模板——初阶 前言&#xff1a;一、模板1.1 什么是模板1.2 模板的概念1.3 模板可以做什么1.4 泛型模板 二、函数模板2.1 函数模板概念和格式2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则2.5 函数模板声明定义分离 三、类模…

若依框架springboot——修改前端图片上传样式

简述 使用过若依框架的&#xff0c;一定知道若依前端框架上传图片的样式&#xff0c;是一个正方形加号图片&#xff0c;但是如果你要使用自定义样式呢。 比如将下面这个图进行修改呢 修改后的样式 你可以直接找到element-ui 修改上传图片的组件&#xff0c;也可以加入新的组…

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

CentOS 防火墙管理及使用的redis基本常用命令

文章目录 防火墙管理使用systemctl管理防火墙启动、关闭使用firewalld-cmd配置访问防火墙策略firewalld配置文件修改限制来源IP docker使用 redis 防火墙管理 需要关闭防火墙或者开启对应端口 使用systemctl管理防火墙启动、关闭 启动防火墙&#xff1a; systemctl start fi…

设计模式——桥接模式(结构型)

引言 桥接模式是一种结构型设计模式&#xff0c; 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用。 问题 抽象&#xff1f; 实现&#xff1f; 听上去挺吓人&#xff1f; 让我们慢慢来&#xff0c; 先考虑一个简单的…

物联网智能仓库解决方案

物联网智能仓库解决方案是一种基于物联网技术的仓库管理系统&#xff0c;通过自动化设备、智能化管理系统和大数据分析等技术&#xff0c;实现仓库的智能化运营和管理。 物联网智能仓库解决方案包括&#xff1a; 仓库设备自动化&#xff1a;通过自动化设备和技术&#xff0c;实…