【Docker】Docker-consul容器服务自动发现与注册

目录

一.Consul概述

1.解决了什么问题

2.什么叫微服务或者注册与发现

3.consul的模式

4.相关命令

二.consul 部署

1.consul服务器部署

2.部署docker容器

3.Nginx负载均衡器

3.1.安装启动nginx

3.2.配置nginx负载均衡

3.3.创建配置consul complate模板文件

3.4.添加consul节点

3.5.将节点退出集群


一.Consul概述

1.解决了什么问题

  • 如果后端应用服务器集群节点数量很多,前端的负载均衡器配置和管理会很麻烦的问题:
  • 负载均衡器的后端应用节点配置条目数会很多,配置管理起来会很麻烦;
  • 如果后端应用节点的网络位置发生了变化,还需要修改所有调用这些后端应用节点的负载均衡器的配置

consul 可以自动发现并记录这些后端应用节点的网络位置,再配合配置中心的配置模板文件,自

动生成负载均衡器的配置文件,从而省去了人工的管理参与

2.什么叫微服务或者注册与发现

  • 是一种分布式管理系统,定位服务的方法
  • 在传统的架构中,应用程序之间直连到已知的服务
  • 已知的服务:设备提供的网络、IP地址、基于tcp/ip端口
  • 基于现微服务部署,服务的动态性,数量增加了,传统的基于IP+端口的形式已经不太适用了
  • 服务注册以及发现:微服务的位置信息(ip+端口+健康状况)统一注册到一个中心化的服务注册表中
  • 可以允许其他服务动态的查询和发现这些服务

3.consul的模式

  • client模式:可用于接收后端应用服务发来的注册信息,并转发给server节点,没有持久化能力
  • server模式:可用于接收后端应用服务或client节点发来的注册信息,还可在server节点之间同步注册信息,具有持久化注册信息到本地的能力
  • server-leader节点:负责同步注册信息给其它的server节点,并对各个节点做健康检查

4.相关命令

consul启动命令
consul agent -server -bootstrap -ui -data-dir=/opt/consul/data  -bind=192.168.80.101  -client=0.0.0.0   -node=consul-server01  -datacenter=dc1 &> /opt/consul/consul.log &开启server模式         指定数据目录                指定集群内部通信地址 指定外部通信地址  地址集群中的节点名称(要求唯一)consul agent -server -ui -data-dir=/opt/consul/data -bind=192.168.80.102 -client=0.0.0.0 -node=consul-server02 -datacenter=dc1 -enable-script-checks=true -join 192.168.80.101 &> /opt/consul/consul.log &registrator启动命令
docker run -d --name registrator --network=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest --ip=服务器IP consul://192.168.80.101:8500consul-template启动命令
consul-template --consul-addr 192.168.80.101:8500 --template "/opt/consul/nginx.ctmpl:/etc/nginx/upstream.conf:/usr/sbin/nginx -s reload" --log-level=info模板文件路径             配置文件路径             重载命令模板文件格式:
{{range service "服务名"}}    #从指定的service中获取注册信息
{{.Address}}:{{.Port}}        # .Address代表注册信息的ip地址    .Port代表注册信息的端口号
{{end}}

二.consul 部署

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
192.168.80.101docker
192.168.80.102consul
192.168.80.103nginx

1.consul服务器部署

192.168.80.102

mkdir /opt/consul
cd !$
上传consul压缩包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
consul version

设置代理,在后台启动consul服务端

mkdir dataconsul agent \
-server \
-bootstrap \
-ui \
-data-dir=/opt/consul/data \
-bind=192.168.80.102 \
-client=0.0.0.0 \
-node=consul-server01 -datacenter=dc1 &> /opt/consul/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。

netstat -lntp | grep consul
启动consul后默认会监听5个端口:
8300:集群内数据的读写和复制
8301:单个数据中心gossip协议通讯
8302:跨数据中心gossip协议通讯
8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
8600:使用DNS协议查看节点信息的端口浏览器访问查看:
http://192.168.80.102:8500/ui

查看集群节点成员

consul members

2.部署docker容器

192.168.80.101

docker run --name c1 -d -p 1314:80 nginx:latest
docker run --name c2 -d -p 1315:80 nginx:latest上传registrator.tar到opt目录
docker load -i registrator.tar   导入
docker images

docker run -d --name registrator --network=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest consul://192.168.9.114:8500
docker ps -a

浏览器查看(http:/

cd /etc/nginx
vim nginx.conf
include /etc/nginx/upstream.conf;  #32行添加

/192.168.80.102:8500/ui

即在容器中创建、删除容器,都可在consulweb页面查看到

3.Nginx负载均衡器

192.168.80.103

3.1.安装启动nginx

cd /etc/yum.repos.d/
上传nginx.repo
yum install -y nginx
systemctl enable --now nginx

3.2.配置nginx负载均衡

cd /etc/nginx
vim nginx.conf
include /etc/nginx/upstream.conf;  #32行添加

cd conf.d/
vim conf.d/default.conf
proxy_pass http://backends;
proxy_set_header HOST $host;
proxy_set_header X-REAL-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
添加
touch upstream.conf
upstream backends {server 192.168.80.103:1314;
}nginx -t
systemctl restart nginx

3.3.创建配置consul complate模板文件

cd /opt
mkdir consul
vim nginx.ctmpl
upstream backends {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}上传consul-template_0.19.3_linux_amd64.zip
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/local/bin/consul-template --consul-addr 192.168.80.102:8500 --template "/opt/consul/nginx.ctmpl:/etc/nginx/upstream.conf:/usr/sbin/nginx -s reload" --log-level=info   #consul-template启动命令

3.4.添加consul节点

consul服务器
cd /usr/local/bin
scp consul 192.168.80.101:`pwd`
scp consul 192.168.80.103:`pwd`docker容器节点
mkdir -p /opt/consul/data
consul agent -server -ui -data-dir=/opt/consul/data -bind=192.168.80.101 -client=0.0.0.0 -node=consul-server02 -datacenter=dc1 -enable-script-checks=true -join 192.168.80.102 &> /opt/consul/consul.log &mkdir -p /opt/consul/data
consul agent -server -ui -data-dir=/opt/consul/data -bind=192.168.80.103 -client=0.0.0.0 -node=consul-server03 -datacenter=dc1 -enable-script-checks=true -join 192.168.80.102 &> /opt/consul/consul.log &
consul members

3.5.将节点退出集群

在想让其退出的节点使用
consul leave

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

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

相关文章

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都…

JavaScript青少年简明教程:流程控制语句

JavaScript青少年简明教程:流程控制语句 JavaScript 提供了一系列的流程控制语句,用于控制代码的执行顺序。 条件语句 条件语句根据表达式的真假来执行不同的代码块。 if 语句 用于在条件为真时执行代码块。 语法: if(条件){ 条件满足执…

微信小程序获取蓝牙并实现内容打印

通过微信小程序如何实现获取蓝牙打印机并实现打印能力&#xff0c;之前做过一个测试Dome&#xff0c;能够获取附近的蓝牙打印机设备并实现打印,今天开放出来供大家参考。 wxml <!--右下角搜索--> <view class"ly-cass-box"><view class"ly-cas…

Hadoop、HDFS、MapReduce 大数据解决方案

本心、输入输出、结果 文章目录 Hadoop、HDFS、MapReduce 大数据解决方案前言HadoopHadoop 主要组件的Web UI端口和一些基本信息MapReduceMapReduce的核心思想MapReduce的工作流程MapReduce的优缺点Hadoop、HDFS、MapReduce 大数据解决方案 编辑 | 简简单单 Online zuozuo 地址…

广义线性模型(1)广义线性模型详解

一 GLM概述 广义线性模型&#xff08;Generalized Linear Models&#xff0c;GLM&#xff09;由 Nelder 和 Wedderburn 于 1972年提出和发表 &#xff0c;旨在解决普通线性回归模型无法处理因变量离散&#xff0c;并发展能够解决非正态因变量的回归建模任务的建模方法。 在广…

数据结构:二叉搜索树(简单C++代码实现)

目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…

【PyTorch】单目标检测项目

对象检测是在图像中查找特定对象位置的过程,用于处理单对象或多对象检测问题。单对象检测在给定图像中仅定位一个对象。对象的位置可以通过边界框定义。单对象检测使用四个数字预测边界框。对于正方形物体&#xff0c;可以固定宽度和高度&#xff0c;并简化问题以仅预测两个数字…

Unity:PC包直接查看Log日志

PC端会输出Log日志&#xff0c;位置在&#xff1a; C:\Users\用户名\AppData\LocalLow\公司名\项目名 在这里可以找到类似的文件&#xff1a; 打开便可以看到打印。

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题 一、问题 自从转到 ts 之后&#xff0c;编辑器就一直提示用到的 elementUI 标签未知&#xff0c;一直显示一溜黄色警示&#xff0c;很烦&#xff1a; 二、解决 把它改成大写就可以了。 如下&#xff1a; 把整个项目…

springboot实战(十二)之通过注解的方式记录接口出入参log入库

前言 生产过程中&#xff0c;为了更好的辅助线上问题排查避免不了对接口出入参进行日志输出的时候&#xff0c;并且为了分析接口数据效果需要将每次请求接口的出入参进行落库方便后续的数据分析&#xff0c;这时总不能每个接口入参之后、出参之前都打印一遍日志吧&#xff1f;如…

51单片机嵌入式开发:16、STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作

STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作 STC89C52RC 之 步进电机28BYJ48操作1 概述1.1 步进电机概述1.2 28BYJ48概述 2 步进电机工作原理2.1 基本原理2.2 28BYJ48工作原理2.3 28BYJ48控制原理 3 电路及软件代码实现4 步进电机市场价值 STC89C52RC 之 步进电机28BYJ…

使用约束布局该如何设置哪个视图(UILabel)的内容优先被压缩?

引言 在实际项目开发中&#xff0c;约束布局给我们带来了很大的便利&#xff0c;可以帮助我们创建灵活且响应迅速的用户界面。通常情况下&#xff0c;它都能很好地工作&#xff0c;但在一些包含许多UILabel的场景中&#xff0c;比如会话列表的UI&#xff0c;哪个视图会被优先压…

《0基础》学习Python——第二十讲__网络爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

2024论文精读:利用大语言模型(GPT)增强上下文学习去做关系抽取任务

文章目录 1. 前置知识2. 文章通过什么来引出他要解决的问题3. 作者通过什么提出RE任务存在上面所提出的那几个问题3.1 问题一&#xff1a;ICL检索到的**示范**中实体个关系的相关性很低。3.2 问题二&#xff1a;示范中缺乏解释输入-标签映射导致ICL效果不佳。 4. 作者为了解决上…

【Git】(基础篇七)—— IntelliJIDEA集成Git

InteliJ IDEA集成Git 现在有很多的集成工具帮助我们写代码&#xff0c;使用这些工具可以帮助我们加速写代码&#xff0c;很多工具也可以集成git&#xff0c;使用图形工具管理git&#xff0c;相信了解了底层运行逻辑的你能够很快地上手使用这些工具&#xff0c;本文以InteliJ I…

7 Vue3

相比 Vue2 1. 优点 vue3支持vue2的大多数特性&#xff0c;实现对vue2的兼容vue3对比vue2具有明显的性能提升 打包大小减少41%初次渲染快55%&#xff0c;更新快133%内存使用减少54% 更好的支持TypeScript使用Proxy代替defineProperty实现响应式数据 2. 性能提升的原因 静态标…

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了&#xff0c;需要用新的参数。如果有多个交易&#xff0c;读不同的参数文件&#xff0c;但是数据还是一套&#xff0c;就要改多个参数文件。或者只想执行参数文件的某一行数据&#xff0c;又不想调整参数文件顺序。 第一个问题目前想到…

Ant Design Vue中日期选择器快捷选择 presets 用法

ant写文档的纯懒狗 返回的是一个day.js对象 范围选择时可接受一个数组 具体参考 操作 Day.js 话不多说 直接上代码 <a-range-pickerv-model:value"formData.datePick"valueFormat"YYYY-MM-DD HH:mm:ss"showTime:presets"presets"change&quo…

(前缀和) LeetCode 238. 除自身以外数组的乘积

一. 题目描述 原题链接 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&…

WebRTC通话原理(SDP、STUN、 TURN、 信令服务器)

文章目录 1.媒体协商SDP简介 2.网络协商STUN的工作原理TURN工作原理 3.信令服务器信令服务器的主要功能信令服务器的实现方式 1.媒体协商 比如下面这个例子 A端与B端要想通信 A端视频采用VP8做解码&#xff0c;然后发送给B端&#xff0c;B端怎么解码&#xff1f; B端视频采用…