【云原生】consul自动注册,实现负载均衡器与节点服务应用解耦,批量管理容器

目录

一、consul解决了什么问题?

二、consul的模式

三、consul的工作原理

四、实操consul连接负载均衡与容器

步骤一:完成consul的部署

步骤二:完成gliderlabs/registrator:latest镜像的拉取,并完成启动

步骤三:先部署节点服务器,做三个nginx的容器

步骤四:完成负载均衡器的部署以及相关的设置

步骤五:在负载均衡器中完成插件的安装,实现配置模板文件


一、consul解决了什么问题?

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

二、consul的模式

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

三、consul的工作原理

 

consul提供的一些关键特性:
服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
多数据中心:无需复杂的配置,即可支持任意数量的区域。

安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。

 

四、实操consul连接负载均衡与容器

步骤一:完成consul的部署

 -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协议查看节点信息的端口

浏览器形式查看 

 命令行形式查看

步骤二:完成gliderlabs/registrator:latest镜像的拉取,并完成启动

-------- registrator服务器 --------
//容器服务自动加入 Nginx 集群
1. 安装 Gliderlabs/Registrator
Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2。docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.20.17 \
consul://192.168.20.7: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和端口。
----------------------------------------------------------------------------------------------------------

步骤三:先部署节点服务器,做三个nginx的容器

docker run -id --name n1 -p 2233:80 docker-nginx:latest
docker run -id --name n2 -p 3344:80 docker-nginx:latest
docker run -id --name n3 -p 4455:80 docker-nginx:latest
docker ps -a

验证consul可以注册发现

 

发现service的名称默认为镜像名称

步骤四:完成负载均衡器的部署以及相关的设置

完成nginx的部署

修改配置文件,计划为四层代理 

http {include       mime.types;include consul.conf;
....location / {root   html;index  index.html index.htm;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://container_backend;}
....
}

步骤五:在负载均衡器中完成插件的安装,实现配置模板文件

wget  https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip
##网上下载或者导入文件

[root@localhost opt]#ls
consul-template_0.19.3_linux_amd64.zip  nginx-1.24.0  nginx-1.24.0.tar.gz  nginx-1.25.3  nginx-1.25.3.tar.gz  rh
[root@localhost opt]#unzip consul-template_0.19.3_linux_amd64.zip 
Archive:  consul-template_0.19.3_linux_amd64.zipinflating: consul-template         
[root@localhost opt]#ls
consul-template  consul-template_0.19.3_linux_amd64.zip  nginx-1.24.0  nginx-1.24.0.tar.gz  nginx-1.25.3  nginx-1.25.3.tar.gz  rh
[root@localhost opt]#mv consul-template /usr/local/bin/
[root@localhost opt]#mkdir consul-template
[root@localhost opt]#cd consul-template/
[root@localhost consul-template]#vim nginx.ctmpl

[root@localhost consul-template]#vim nginx.ctmpl 
[root@localhost consul-template]#cat nginx.ctmpl upstream container_backend {{{range service "docker-nginx"}}server {{.Address}}:{{.Port}};{{end}}}
[root@localhost consul-template]#consul-template --consul-addr 192.168.20.7:8500 --template "/opt/consul-template/nginx.ctmpl:/usr/local/nginx/conf/consul.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
//在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。

 //另外打开一个终端查看生成配置文件


---------------------------consul 多节点------------------------------
//添加一台已有docker环境的服务器192.168.80.12/24加入已有的群集中
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.20.xx \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true  \
-datacenter=dc1  \
-join 192.168.20.7 &> /var/log/consul.log &------------------------------------------------------------------------
-enable-script-checks=true :设置检查服务为可用
-datacenter : 数据中心名称
-join :加入到已有的集群中
------------------------------------------------------------------------consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.20.7:8301  alive   server  0.9.2  2         dc1
consul-server02  192.168.20.xx:8301  alive   server  0.9.2  2         dc1consul operator raft list-peers
Node             ID                  Address             State     Voter  RaftProtocol
consul-server01  192.168.20.7:8300  192.168.20.7:8300  leader    true   2
consul-server02  192.168.20.xx:8300  192.168.20.xx:8300  follower  true   2

 

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

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

相关文章

重写Sylar基于协程的服务器(1、日志模块的架构)

重写Sylar基于协程的服务器(1、日志模块的架构) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…

15EG在PL端使用外部时钟驱动led灯

创建PL端的vivado工程在 pl_only_led中已经介绍过了,这里直接从创建好设计文件开始 打开设计文件修改里面代码,代码我也提供了,在工程文件夹下的file文件夹中 15eg这块板子有俩个外部晶振,分别时200M和74.25 M我们可以在原理图中找…

16- OpenCV:轮廓的发现和轮廓绘制、凸包

目录 一、轮廓发现 1、轮廓发现(find contour in your image) 的含义 2、相关的API 以及代码演示 二、凸包 1、凸包(Convex Hull)的含义 2、Graham扫描算法- 概念介绍 3、cv::convexHull 以及代码演示 三、轮廓周围绘制矩形和圆形框 一、轮廓发现…

【图文详解】阿里云服务器放行高防IP加入安全组

打开阿里云的云服务器配置面板,在要操作实例的操作列找到更多 > 网络和安全组 > 安全组配置。 对已有安全组配置规则,或者直接添加安全组规则。 根据需要放通高防IP在内的IP段相应协议类型的端口访问。

QEMU - e1000全虚拟化前端与TAP/TUN后端流程简析

目录 1. Host -> Guest 2.Guest ->Host 3. 如何修改以支持TUN设备的后端? 4. 相关 QEMU 源码 5. 实验 1. Host -> Guest 2.Guest ->Host 3. 如何修改以支持TUN设备的后端? 1. 简单通过后端网卡名字来判断是TUN还是TAP。 2. 需要前端全…

Adobe Camera Raw forMac/win:掌控原始之美的秘密武器

Adobe Camera Raw,这款由Adobe开发的插件,已经成为摄影师和设计师们的必备工具。对于那些追求完美、渴望探索更多创意可能性的专业人士来说,它不仅仅是一个插件,更是一个能够释放无尽创造力的平台。 在数字摄影时代,R…

使用Win32API实现贪吃蛇小游戏

目录 C语言贪吃蛇项目 基本功能 需要的基础内容 Win32API 介绍 控制台程序部分指令 设置控制台窗口的长宽 设置控制台的名字 控制台在屏幕上的坐标位置结构体COORD 检索指定标准设备的句柄(标准输入、标准输出或标准错误) 光标信息结构体类型CONSOLE_CUR…

洛谷P8599 [蓝桥杯 2013 省 B] 带分数

[蓝桥杯 2013 省 B] 带分数 题目描述 100 100 100 可以表示为带分数的形式: 100 3 69258 714 100 3 \frac{69258}{714} 100371469258​。 还可以表示为: 100 82 3546 197 100 82 \frac{3546}{197} 100821973546​。 注意特征:带分…

条款32:确定你的public继承塑模出 is-a 关系

如果你编写类D(“派生类”)public继承类B(“基类”),就是在告诉C编译器(以及代码的读者)每个类型D的对象都是类型B的对象,但反之则不然。 class Person {...}; class Student: public Person {...}; void eat(const Person& p); // 素有的Person都…

云计算HCIE备考经验分享

大家好,我是来自深圳信息职业技术学院22级鲲鹏3-1班的刘同学,在2023年9月19日成功通过了华为云计算HCIE认证,并且取得了A的成绩。下面把我的考证经验分享给大家。 转专业进鲲鹏班考HCIE 大一上学期的时候,在上Linux课程的时候&…

ES Serverless让日志检索更加便捷

前言 在项目中,或者开发过程中,出现bug或者其他线上问题,开发人员可以通过查看日志记录来定位问题。通过日志定位 bug 是一种常见的软件开发和运维技巧,只有观察日志才能追踪到具体代码。在软件开发过程中,开发人员会在代码中添加日志记录,以记录程序的运行情况和异常信…

发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!

前言 在当今互联网时代,一切以页面、UI为主要呈现方式,web全栈开发工程师的需求越来越大。 然而,市场上大多数工程师只会使用api而不了解其原理,这种情况使得他们变得可替代。 因此,成为一个高级开发工程师需要具备…

用React给XXL-JOB开发一个新皮肤(四):实现用户管理模块

目录 一. 简述二. 模块规划 2.1. 页面规划2.2. 模型实体定义 三. 模块实现 3.1. 用户分页搜索3.2. Modal 配置3.3. 创建用户表单3.4. 修改用户表单3.5. 删除 四. 结束语 一. 简述 上一篇文章我们实现登录页面和管理页面的 Layout 骨架,并对接登录和登出接口。这篇…

在centos 7 中 安装 配置 并 远程连接 MySQL5.7

目录 安装MySQL 1.卸载CentOS7系统自带的mariadb 2.安装依赖库 3.上传MySQL并解压 4.安装MySQL 配置MySQL 1.修改登录密码 2.修改字符集 3.配置远程连接 前言: 安装MySQL版本:mysql-5.7.30-1.el7.x86_64.rpm-bundle 文件需求后台私信 以下7条为…

STM32学习笔记(四) —— 位段别名区的使用

STM32F103RCT6有两个位段区 (SRAM 最低1M空间和片内外设存储区最低1M空间), 这两个区域都有各自的别名区,在别名区中每个字会映射到位段区的一个位,所以在别名区修改一个字相当于修改位段区中对应的一个位 映射公式( 别名区中的字与位段区中的…

实现vue3响应式系统核心-watch

简介 今天我们来看看 watch 的实现。 watch本质就是观测一个响应式数据,当数据发生变化时通知并执行相应的回调函数。实际上,watch的实现本质上就是利用了 effect 以及 options.scheduler选项。 代码地址: https://github.com/SuYxh/share-…

flask基于python的个人理财备忘录记账提醒系统vue

在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。 “备忘记账系统”是基于Mysql数据库,在python程序设计的基础上实现的。为确保中国经济的持续发展,信息时代日益更新,蓬勃发展。同时,随着信息社…

【智能家居入门2】(MQTT协议、微信小程序、STM32、ONENET云平台)

此篇智能家居入门与前两篇类似,但是是使用MQTT协议接入ONENET云平台,实现微信小程序与下位机的通信,这里相较于使用http协议的那两篇博客,在主程序中添加了独立看门狗防止程序卡死和服务器掉线问题。后续还有使用MQTT协议连接MQTT…

输入和输出

按字符输入输出 按字符输出putchar&#xff08;&#xff09; 格式 #include <stdio.h> int putchar(int c); 功能&#xff1a;向终端输出一个字符 参数&#xff1a;要输出的字符的ASCII码值 返回值&#xff1a; 成功&#xff0c;返回输出字符的ASCII码值 失败&#xff…

基于springboot汽车租赁系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项…