当前位置: 首页 > news >正文

【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

相关文章:

【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.添加…...

Go 1.22 remote error: tls: handshake failure

Golang 1.22 remote error: tls: handshake failure 1.22之前运行下面代码是没有错误 package mainimport ("crypto/tls""fmt""net/http" )func main() {http.DefaultTransport.(*http.Transport).TLSClientConfig &tls.Config{InsecureS…...

迈向通用人工智能:AGI的到来与社会变革展望

正文: 随着科技的飞速发展,通用人工智能(AGI)的来临似乎已不再遥远。近期,多位行业领袖和专家纷纷预测,AGI的到来时间可能比我们想象的要早。在这篇博客中,我们将探讨AGI的发展趋势、潜在影响以…...

大模型额外篇章三:vercel搭建openai中转服务器

文章目录 一、起因和注意1)起因2)注意二、实现方法(原理:透传)1)nginx方案2)node服务3)纯 js 方案4)选择国外的域名服务商(DNS 解析路径缩短,建议方案国外提供 CDN 云服务商结合自建云服务业务做负载均衡)三、实践(vercel部署OpenAI代理服务器)四、测试搭建的Ope…...

使用 jQuery 中的 this 实例

在 jQuery 中,this 关键字用于表示指向当前操作的 DOM 元素。本篇博客将详细介绍如何在 jQuery 中使用 this 实例。 一、选择器中的 this 在选择器中,this 可以方便地指向当前操作的 DOM 元素。例如,当用户点击一个按钮时,我们想…...

下载最新版Anaconda、安装、更换源、配置虚拟环境并在vscode中使用

文章目录 进入官网进入下载页安装更换源配置虚拟环境env安装包requests在vscode中使用虚拟环境 进入官网 https://repo.anaconda.com/ 或进入清华大学下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 进入下载页 安装 更换源 查看已经存在的镜像源 bash cond…...

极狐GitLab Git LFS(大文件存储)如何管理?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...

迭代学习笔记

一、迭代学习定义和分类 1、直观理解 迭代学习一般应用于重复性的场景。比如控制一个单自由度的小车以特定的速度曲线移动到指定位置,整个时间是10s,控制频率是0.01,那么整个控制序列就会有1000个点。这1000个点在10s内依次发出&#xff0c…...

【安全】系统安全设计规范(DOC完整版)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件资料清单列表部分文档&…...

windows常用命令整理

本文分享一些常用的windows命令。根据功能的不同,大致可分为以下几个方面,一是文件操作命令,二是进程相关命令,三是磁盘相关命令,四是网络相关命令,五是其他命令。 1.文件操作命令 dir:显示当…...

视频处理基础知识1

1、图像基本知识 图像的组成:像素、RGB(每个像素由三个发光二极管组成)、分辨率(横纵向像素的个数乘积) PPI每英寸的像素数 DPI每英寸的点数,有可能一个点有多个像素 PPI>300 就属于视网膜级别,就是很清晰&#…...

Linux退不出vim编辑模式

目录 第一章、问题分析1.1)报错提示 第二章、解决方式 友情提醒: 先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。 第一章、问题分析 1.1)报错提示 报错如下:使用Linux的vi…...

TikTok养号的网络环境及相关代理IP知识

TikTok作为一个流行的短视频分享平台,其用户量非常庞大,很多商家和个人都会使用TikTok来进行引流和推广。由于TikTok的规则和政策限制了每个用户每天发布视频的数量,因此许多用户会使用多个账号来发布更多的视频以提高曝光率。 然而&#xff…...

过程调用和数组的分配访问

系列文章 : 深入理解计算机系统笔记 文章目录 系列文章3.7 过程3.7.1 运行时栈3.7.2 转移控制3.7.3 数据传送3.7.4 栈上的局部存储3.7.5 寄存器中的局部存储空间3.7.6 递归过程 3.8 数组分配和访问3.8.1 基本原则3.8.2 指针运算3.8.3 嵌套的数组3.8.4 定长数组3.8.5 变长数组…...

TeamViewer手机端APP提示:请先验证账户

当你在手机端下载安装了TeamViewerAPP后,需要你先登录个人账号,然后还会要求你验证账户,同时跳转到一个网址中,但是这个网址并没有自动跳转到验证账户的位置。 解决办法: 在手机浏览器中进入下面这个网址:…...

【SpringBoot】分页查询

1. Controller ApiOperation("分页查询")GetMapping("/page")public Result<PageResult> pageResultResult(EmployeePageQueryDTO employeePageQueryDTO) {System.out.println(employeePageQueryDTO.toString());PageResult pageResult employeeSer…...

微软CrowdStrike驱动蓝屏以及内核签名

原因 当Windows操作系统遇到严重错误导致系统崩溃时&#xff0c;屏幕显示为蓝色&#xff0c;通常伴有错误代码和信息&#xff0c;这被称为“蓝屏死机”&#xff08;Blue Screen of Death&#xff0c;简称BSOD&#xff09; https://www.thepaper.cn/newsDetail_forward_281262…...

Spring中Bean的循环依赖

目录 定义&#xff1a; 循环依赖的后果&#xff1a; 一&#xff1a;三级缓存 1、大概的思路&#xff1a; 注意&#xff1a; 2、执行过程&#xff1a; A半完成&#xff1a; B完成&#xff1a; A完成&#xff1a; 注&#xff1a; 二&#xff1a;Lazy 定义&#xff1a; …...

Java二十三种设计模式-代理模式模式(8/23)

代理模式&#xff1a;为对象访问提供灵活的控制 引言 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一个代替或占位符&#xff0c;以控制对它的访问。 基础知识&#xff0c;java设计模式总体来说设计模式分为三大类&#…...

Windows 11 家庭中文版 安装 VMWare 报 安装程序检测到主机启用了Hyper-V或Device

1、问题 我的操作系统信息如下&#xff1a; 我在安装 VMWare 的时候&#xff0c;报&#xff1a; 因为我之前安装了 docker 桌面版&#xff0c;所以才报这个提示。 安装程序检测到主机启用了 Hyper-v或 Device/credential Guard。要在启用了Hyper-或 Device/Credential Guard …...

机械学习—零基础学习日志(高数09——函数图形)

零基础为了学人工智能&#xff0c;真的开始复习高数 函数图像&#xff0c;开始新的学习&#xff01; 幂函数 利用函数的性质&#xff0c;以幂函数为例&#xff0c;因为单调性相同&#xff0c;利用图中的2和3公式&#xff0c;求最值问题&#xff0c;可以直接将式子进行简化。这…...

java迭代集合出现并发修改异常(ConcurrentModificationException)的原因以及解决方案

java迭代集合出现并发修改异常(ConcurrentModificationException)的原因以及解决方案 一. 什么时候会出现并发修改异常? 这里先看需求 : 定义一个集合,存储 唐僧,孙悟空,猪八戒,沙僧,遍历集合,如果遍历到猪八戒,往集合中添加一个白龙马 很显然要求我们先创建一个集合并进行…...

BGP选路之Local Preference

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。BGP首先比较的是路由信息的首选值&#xff08;PrefVal)&#xff0c;如果 PrefVal相同&#xff0c;就会比较本…...

WEB渗透信息收集篇--IP和端口信息

WEB渗透信息收集篇--域名信息-CSDN博客 WEB渗透信息收集篇--网站架构和指纹识别-CSDN博客 ​​​​​​​​​​​​​​WEB渗透信息收集篇--人员信息-CSDN博客​​​​​​​ WEB渗透信息收集篇--其他信息-CSDN博客 一、ASN ASN Tool - MxToolBox ASN通常指的是"自…...

国内微短剧系统平台抖音微信付费小程序app开发源代码交付

微短剧作为当下热门的内容&#xff0c;结合抖音平台的广泛用户基础&#xff0c;开发微短剧付费小程序APP具有显著的市场潜力&#xff0c;用户对于短剧内容的需求旺盛&#xff0c;特别是在言情、总裁、赘婿等热门题材方面&#xff0c;接下来给大家普及一下微短剧小程序系统。 顺…...

Java语言程序设计基础篇_编程练习题**15.19 (游戏:手眼协调)

**15.19 (游戏:手眼协调) 请编写一个程序&#xff0c;显示一个半径为10像素的实心圆&#xff0c;该圆放置在面板上的随机位置&#xff0c;并填充随机的顔色&#xff0c;如图15-29b所示。单击这个圆时&#xff0c;它会消失&#xff0c;然后在另一个随机的位置显示新的随机颜色的…...

学习记录day16—— 数据结构 双向链表 循环链表

双向链表 1、概念 1&#xff09;就是从任意一个节点既能存储其前驱节点&#xff0c;又能存储后继节点 2)结构体中增加一个指向前驱节点的指针 //定义数据类型 typedef int datatype;//定义节点类型 typedef struct Node {union {int len;datatype data;};struct Node *prio; …...

Air780EP模块 AT开发-MQTT接入OneNET移动物联网平台应用指南

应用概述 使用AT方式通过MQTT协议连接onenet studio。官网地址&#xff1a;https://open.iot.10086.cn/ 材料准备 Air780EP(V)开发板一套&#xff0c;包括天线SIM卡&#xff0c;USB线。 PC电脑&#xff0c;串口工具 在onenet上创建产品 打开OneNET官网&#xff0c;进入控制…...

HOST处理器预读PCI设备

在PCI&#xff08;Peripheral Component Interconnect&#xff09;总线规范中&#xff0c;MRL&#xff08;Memory Read Line&#xff09;和MRM&#xff08;Memory Read Multiple&#xff09;是两种读取存储器地址空间的总线事务类型。 MRL&#xff08;Memory Read Line&#xf…...

【Ansible】通过role角色部署lnmp架构

目录 一.roles概述 1.roles角色 2.roles的目录层次 2.1.roles 内各目录含义解释 二.实操 1.部署nginx 2.部署MySQL 3.部署php 4.编写测试文件 三.总结 一.roles概述 1.roles角色 可以把playbook剧本里的每个play看作为一个角色&#xff0c;将每个角色要用到的文件、…...