Docker-Consul概述以及集群环境搭建

文章目录

  • 一、Docker consul概述
  • 二、consul 部署
    • 1.consul服务器
    • 2.registrator服务器(客户端)
    • 2.consul-template(在consul服务器)
    • 3.consul 多节点

一、Docker 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配置文件中的变化,相当于识别后端的节点,就可以在地址池中动态调整自己后端资源。

consul功能:自动发现,自动注册,自动更新

二、consul 部署

主机IP 地址需要安装的软件
consul服务器192.168.44.80运行consul服务、nginx服务、consul-template守护进程
registrator服务器192.168.44.10运行registrator容器、运行nginx容器

1.consul服务器

1.建立 Consul 服务

mkdir /opt/consul
mv consul_1.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/

在这里插入图片描述

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

 consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.44.80 \
-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。0.0.0.0允许所有ip访问
-node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-datacenter :指定数据中心名称,默认是dc1。
netstat -natp | grep consul

启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口

在这里插入图片描述
3. 查看集群信息

查看members状态
consul members

在这里插入图片描述

查看集群状态
consul operator raft list-peers

在这里插入图片描述
4. 通过 http api 获取集群信息

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

访问8500端口
在这里插入图片描述

2.registrator服务器(客户端)

1.开启客户端的nginx

docker run -itd -p 81:80 --name nginx-01 -h nginx-01 nginx

在这里插入图片描述
2.启动registrator

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.44.10 \
consul://192.168.44.80: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和端口。

在这里插入图片描述
consul自动注册
在这里插入图片描述

docker run -itd -p 82:80 --name apache01 -h apache httpd
docker run -itd --name nginx-02 -p 83:80 nginx

在这里插入图片描述

2.consul-template(在consul服务器)

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作,重新加载 Nginx。
consul自动注册后,会把服务的ip和端口号交给template,template根据设置的模板修改完后交给对应的服务(例如:根据模板修改nginx配置文件,再交给consul上的Nginx服务)

1.编辑template模板

vim /opt/consul/nginx.ctmpl

#定义nginx upstream一个简单模板
upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
   {{end}}
}

#定义一个server,监听8000端口,反向代理到upstream
server {
    listen 8000;
    server_name localhost 192.168.44.80;
    access_log /var/log/nginx/kgc.com-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. 编译安装nginx

yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install

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

3.配置 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
nginx

4.配置并启动 template

unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
//实时监听Consul 的键值对更改,在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。或者添加&进入后台运行
consul-template --consul-addr 192.168.44.80:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info &

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

5.访问template的nginx监听的8000端口
修改客户端页面(在registrator服务器)

docker exec -it nginx-01 bash
echo "nginx-01" >/usr/share/nginx/html/index.html
exit
docker exec -it nginx-02 bash
echo "nginx-02" >/usr/share/nginx/html/index.html
exit

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

可以在客户端查看对应日志
docker logs 40128ce68347

在这里插入图片描述

3.consul 多节点

添加一台已有docker环境的consul服务器加入已有的群集中

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

---------------------------------------------------------------------------------------------
-enable-script-checks=true :设置检查服务为可用
-datacenter : 数据中心名称
-join :加入到已有的集群中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机快速入门之 LED点阵 结合74hc595 的应用 2024/10/16

51单片机快速入门之 LED点阵 结合74hc595 的应用 74HC595是一种常用的数字电路芯片,具有串行输入并行输出的功能。它主要由两个部分组成:一个8位的移位寄存器和一个8位的存储寄存器。数据通过串行输入管脚(DS)逐位输入&#xff0…

再Android10上实现检测AHD摄像头是否接入

项目有个需要,需要知道tp9951是否接入AHD摄像头 1,驱动层可以通过读取寄存器的值来检测是否接入AHD摄像头 tp9951_write_reg(0x40, 0x00); //select decoder page tp9951_write_reg(0x41, ch); val tp9951_read_reg(TP_INPUT_STATUS_REG);…

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措,通过该认证,软件可以在华为的生态系统中实现更好的兼容性和性能优化,从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲鹏…

python基于大数据的电影市场预测分析

一、摘要 智慧是改变生活和生产的一种来源,那么智慧的体现更大程度上是对于软件技术的改变。当今社会,好的思路,好的创新方式往往是改变人们生活的一种来源。最常见最直接的形式就是各种软件的创始思路,京东因为非典的流行才能够…

[全国/全省/全市]初赛知识点复习大汇总

目录 计算机结构与组成原理 计算机发展及应用 1、第一台电子计算机的诞生: ENIAC 2、第一台具有存储程序功能的计算机:EDVAC。 图灵 计算机发展阶段 世界上最快的超级计算机 计算机应用 计算机保护知识产权 计算机病毒 硬件系统的组成 概述 …

分享一个图片RGB以及16进制颜色提取的在线网站

IMAGECOLORPICKER.com 网站链接:传送门呢 可以在线上传自己的图片,然后识别图片的颜色,比较方便。

2024年第九届数维杯大学生数学建模挑战赛赛题和数维杯国际数学建模 LaTeX 模板

2024年数维杯国际大学生数学建模挑战赛参赛规则 数维杯大学生数学建模竞赛每年分为两场,每年上半年为数维杯全国赛(5月下旬) ,下半年为数维杯国际挑战赛(11月下旬),已连续成功举办九届,2023年数维杯国际大学生数学建模挑战赛共有近…

【论文阅读】DL-SRIR综述2023

0. 摘要 SISR与DL的介绍 单图像超分辨率(SISR)是计算机视觉的一个重要研究领域,其目的是从低分辨率(LR)图像中恢复清晰、高分辨率(HR)图像。 随着深度学习理论和技术的快速发展,深度学习被引入到图像超分辨率(SR)领域,并在许多领域取得了远远超过传统方法的成果。 本文框架…

Mapbox GL 加载GeoServer底图服务器的WMS source

貌似加载有点慢啊!! 1 这是底图 2 这是加载geoserver中的地图效果 3源码 3.1 geoserver中的网络请求 http://192.168.10.10:8080/geoserver/ne/wms?SERVICEWMS&VERSION1.1.1&REQUESTGetMap&formatimage/png&TRANSPARENTtrue&STYL…

ImportError: /../lib/libstdc++.so.6: version `GLIBCXX_3.4.29解决方案

今天跑实验遇到了一个头疼的报错,完全看不懂,上网查了一下成功解决,但是网上的指令没法直接拿来用,所以在这里记录一下自己的解决方案。 报错信息: Traceback (most recent call last):File "/home/shizhiyuan/c…

数据结构 —— 树和二叉树简介

目录 0.前言 1.树的认识 什么是树 树的相关概念 树的表示 孩子兄弟表示法 2.二叉树的认识 什么是二叉树 特殊的二叉树 满二叉树 完全二叉树 二叉树的性质 性质一 性质二 性质三 二叉树的存储 顺序存储 链式存储 0.前言 笔者我之前讲解的数据结构都是线性…

OceanBase 的写盘与传统数据库有什么不同?

背景 在数据库开发过程中,“写盘”是一项核心操作,即将内存中暂存的数据安全地转储到磁盘上。在诸如MySQL这样的传统数据库管理系统中,写盘主要有以下几步:首先将数据写入缓存池;其次,为了确保数据的完整性…

深入理解Qt中的QTableView、Model与Delegate机制

文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…

LabVIEW风机滚动轴承监测系统

矿井主通风机作为矿井中最重要的通风设备,一旦出现故障,不仅会影响矿井内的空气质量,还可能引发安全事故。研究表明,通风机中约30%的故障是由轴承问题引起的。因此,能够实时监控矿井主通风机轴承状态的系统&#xff0c…

Java基础(6)

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?关于深拷贝和浅拷贝区别,我这里先给结论:浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部…

图像中的数值计算

目录 图像读取与形状图像数据展示图像数据操作超出范围的像素值处理 图像读取与形状 使用cv2.imread函数读取图像文件。图像的形状通过shape属性获取,格式为(高度, 宽度, 颜色通道数)。 import cv2img1 cv2.imread(bg.jpg) img2 cv2.imread(fish.jpg)print(img1…

如何提高LabVIEW编程效率

提高LabVIEW编程效率对开发者来说非常重要,尤其是在处理复杂项目或紧迫的开发周期时。以下是一些可以显著提升LabVIEW编程效率的技巧,从代码结构、工具使用到团队协作的多个角度进行详细分析: 1. 模块化设计 模块化设计 是提高代码可维护性和…

jvm垃圾收集器简介

串行垃圾收集器 串行垃圾收集器,是指使用单线程进行垃圾回收,垃圾回收时,只有一个线程在工作,Java应用中的所有线程都要暂停,等待垃圾回收的完成。这种现象称之为STW(Stop-The-World),一般的javaweb应用中…

算法题总结(十三)—— 动态规划(上)

动态规划 动态规划理论基础 什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff…

工业物联网关-连接Thingsboard

拓扑未来网关支持通过MQTT与Thingsboard连接,连接成功后,网关所有外部终端设备都可以通过网关与Thingsboard平台通讯。首先需要在Thingsboard平台上新建一个网关设备,如下图,注意要勾选"是否网关",否则该设备…