Docker容器--Consul部署

news2024/11/25 23:00:42

Docker容器--Consul部署

    • 一、简介
      • 1、概述
      • 2、Consul两种模式
    • 二、Consul特性
      • 1、特性
      • 2、应用场景
    • 三、部署Consul集群(Server端)
      • 1、建立Consul服务
      • 2、设置代理,在后台启动consul服务端
      • 3、查看集群信息
    • 四、Consul部署(Client端)
      • 1、安装Gliderlabs/Registrator Gliderlabs/Registrator
      • 2、测试服务发现功能是否正常
      • 3、验证 http 和 nginx 服务是否注册到 consul
    • 五、Consul-Template
      • 1、配置template自动更新
      • 2、编译安装nginx
      • 3、配置nginx
      • 4、配置并启动 template
      • 5、测试访问代理服务器

一、简介

1、概述

consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。
服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server 和 client。 每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。

2、Consul两种模式

client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。

二、Consul特性

1、特性

  • 支持健康检查、允许存储键值对

  • 基于Golong语言,可移植性强

  • 支持ACL访问控制

2、应用场景

Consul的应用场景包括服务发现、服务隔离、服务配置:

服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

三、部署Consul集群(Server端)

1、建立Consul服务

[root@localhost ~]#mkdir /opt/consul
[root@localhost ~]#rz -E
rz waiting to receive.
[root@localhost ~]#cp consul_0.9.2_linux_amd64.zip /opt/consul
[root@localhost ~]#cd /opt/consul/
[root@localhost consul]#unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                  
[root@localhost consul]#mv consul /usr/local/bin/

在这里插入图片描述

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

[root@localhost consul]#consul  agent \
 -server \
 -bootstrap \
 -ui \
 -data-dir=/var/lib/consul-data \
 -bind=192.168.10.130 \
 -client=0.0.0.0 \
 -node=consul-server01 &> /var/log/consul.log &

在这里插入图片描述

3、查看集群信息

[root@localhost consul]#consul members  #查看members状态
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.10.130:8301  alive   server  0.9.2  2         dc1

[root@localhost consul]#consul operator raft list-peers  #查看集群状态
Node             ID                   Address              State   Voter  RaftProtocol
consul-server01  192.168.10.130:8300  192.168.10.130:8300  leader  true   2

[root@localhost consul]#consul info | grep leader   #查看详细信息
	leader = true
	leader_addr = 192.168.10.130:8300

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

四、Consul部署(Client端)

1、安装Gliderlabs/Registrator Gliderlabs/Registrator

容器服务自动加入nginx集群

[root@localhost ~]#docker run -d \
 --name=registrator \
 --net=host \
 -v /var/run/docker.sock:/tmp/docker.sock \
 --restart=always \
 gliderlabs/registrator:latest \
 --ip=192.168.10.132 \
 consul://192.168.10.130:8500

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

2、测试服务发现功能是否正常

[root@localhost ~]#systemctl restart docker
[root@localhost ~]#docker run -itd -p:83:80 --name test-01 -h test01 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
2438a4c3f02984fab72ea57ac0c0dcc08b8a264bb0e6717039dd6ae50b46e824
[root@localhost ~]#docker run -itd -p:84:80 --name test-02 -h test02 nginx
62bde8ed1e6f63f96445752c3074c1d0c713b5fdcdd255427810bf17beee709d
[root@localhost ~]#docker run -itd -p:88:80 --name test-03 -h test03 httpd
faebe153b94b49bcb49cd4bbb91768a8480b1a30bea35ffd3fffec20bcdd181a
[root@localhost ~]#docker run -itd -p:89:80 --name test-04 -h test04 httpd
c6098db0e786373b3a842e4e4b3589b230effeaa1a7095607eb2d92b13cbf9ac
[root@localhost ~]#

在这里插入图片描述

3、验证 http 和 nginx 服务是否注册到 consul

浏览器中,输入 http://192.168.10.130:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现 5 个服务。
在这里插入图片描述
在这里插入图片描述

五、Consul-Template

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作,重新加载 Nginx。

Consul-Template可以查询Consul中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers 、 Haproxy Backends等。

1、配置template自动更新

Server端

[root@localhost consul]#vim 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.10.130;
    access_log /var/log/nginx/zzt.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

[root@localhost consul]#yum install  -y pcre-devel zlib-devel gcc gcc-c++ make
[root@localhost consul]#useradd  -M -s /sbin/nologin nginx
[root@localhost consul]#cd /opt/
[root@localhost opt]#rz -E  #上传nginx软件包
rz waiting to receive.
[root@localhost opt]#tar zxf nginx-1.12.0.tar.gz 
[root@localhost opt]#cd /opt/nginx-1.12.0/
[root@localhost nginx-1.12.0]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install
[root@localhost nginx-1.12.0]#ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

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

3、配置nginx

[root@localhost nginx-1.12.0]#vim /usr/local/nginx/conf/nginx.conf

include vhost/*.conf;
#保存退出
[root@localhost nginx-1.12.0]#mkdir /usr/local/nginx/conf/vhost   #创建虚拟主机目录
[root@localhost nginx-1.12.0]#mkdir /var/log/nginx   #创建日志文件目录
[root@localhost nginx-1.12.0]#/usr/local/nginx/sbin/nginx   #启动nginx

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

4、配置并启动 template

[root@localhost opt]#rz -E   #上传所需包
rz waiting to receive.
[root@localhost opt]#unzip consul-template_0.19.3_linux_amd64.zip 
[root@localhost opt]#mv consul-template /usr/local/bin/

在这里插入图片描述

[root@localhost opt]#consul-template --consul-addr 192.168.10.130:8500 --template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/zzt.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

在这里插入图片描述
在开一个终端
在这里插入图片描述

在Client

[root@localhost ~]#run -itd -p:85:80 --name test-05 -h test05 nginx

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

5、测试访问代理服务器

是否可以完成代理访问轮询
192.168.10.130

在Client

[root@localhost ~]#run -itd -p:85:80 --name test-05 -h test05 nginx

在这里插入图片描述

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

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

相关文章

第4章:运算符

1.算术运算符 ① SELECT 10010,100-35.5,100*2,100/2,100%30 FROM DUAL;②在sql中“”没有连接作用,表示加法运算,字符串转换为数值(隐式转换)。非数值看作0处理 SELECT 1001 1 FROM DUAL;SELECT 100 a FROM DUAL;③加法运算…

Trie Tree(字典树)例题

字典树. 又称单词查找树, Trie树 ,是一种 树形结构 ,是一种哈希树的变种。经常被搜索引擎系统用于文本词频统计。. 它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效…

Python 使用chatGPT帮忙写一个有序集类 OrderedSet

需求:需要实现一个有序的集合,像python普通集合一样,除了 它是有序的 我这边穿插着使用了gpt3.5和gpt4,发现确实还是gpt4好用,一分钱一分货啊 问:我的要求是这样,data是一个集合,往里面放了2,…

【大厂面试问题】:飞机绕行地球问题

你的阅读是我最大的动力 目录 你的阅读是我最大的动力 问题描述: 引出思路: 一台加油飞机 两台加油飞机 返航方案一:加油机I、II同时起飞。 返航方案二:加油机I先起飞加油机II再起飞 答案 不直接说答案,一步一…

14个WooCommerce商城网站必备插件

开始建立 WooCommerce 网站?您需要一个具有许多有助于吸引和留住客户的有用功能的网站。虽然基本的 WooCommerce 设置非常方便,但您可以通过使用有用的插件扩展 WooCommerce 来做更多的事情。 有数百个插件需要考虑,我们已经完成了研究&…

[C++初阶]栈和队列_优先级队列的模拟实现 deque类 的理解

为了更好的理解优先级队列priority_queue,这里会同时进行栈和队列的提及 文章目录 简要概念(栈和队列)栈和队列的模拟实现与使用stack(栈)deque的理解和操作queue priority_queue(优先级队列)框…

悲观锁、乐观锁、自旋锁和读写锁

悲观锁和乐观锁 悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行 锁等),当其他线程想要访问数据时,被阻塞挂起。&#xff08…

金融贷款行业如何高效获客,积累意向客户群体——运营商大数据

现如今贷款行业面对的运营压力日益扩大,顾客贮备是生存的关键,传统式的陌生拜访,一切随缘销售市场已不能满足其要求。互联网消费行为的融合与转变是在销售市场端反映,直接影响着广告推广广告策略的确立与运用。 可是,…

移除元素【数组】

⭐前言⭐ ※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入练习模式。若有错误,请多多指教。更多有趣的代码请移步Gitee 👍 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力! 题目 27…

IPEmotion 2023 R1支持在线能量分析

新发布的IPEmotion 2023 R1提供了许多新功能,其中最重要的是新的“在线功率计算(Online Power Calculation)”功能。该功能允许使用预定义的功率计算来进行测量任务和数据分析。此外,IPEmotion 2023 R1现在支持一种新的存储模式&a…

Maya英文界面怎么改为中文界面

Maya是一款3D动画和视觉效果软件,用于创建逼真的角色和大片般的效果,也是受到电影、电视和游戏行业的 3D 建模师、动画师、照明艺术家和 VFX 艺术家等多数人喜爱的一款3D软件。我们在使用Maya的过程中,常常会遇到一些小阻碍,比如M…

【Python爬虫实战】你不必到处找数据,你完全可以自己爬之Python批量采集图虫网摄影师高清美照,听说~你喜欢御姐...(爬图神器)

前言 怎么批量保存网页图片? 有时候在网页中看到很多美图其中有很多自己喜欢的图片素材或壁纸,一张纸一张下载保存未 免太低效了。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众ha…

C++哈希应用——位图布隆过滤器

C布隆过滤器 文章目录 C布隆过滤器概念实质用途控制误判率实现插入和查找布隆过滤器的删除 布隆过滤器优点布隆过滤器缺陷相关大数据题目 用哈希表存储用户记录,缺点是需要消耗较大的内存;用位图存储用户记录,缺点是位图一般处理整形&#xf…

P1039 [NOIP2003 提高组] 侦探推理

题目描述 明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这…

Java-设计模式中事件与委托Java版本

目录 背景介绍 实现过程 类图 NS图 代码 客户端 业务封装类 委托类 事件类 猫类 老鼠类 运行结果 总结提升 背景介绍 相信大家在学习大话设计模式的时候都有接触过事件与委托,但是对于事件与委托具体的业务逻辑也不是很清楚,只能照猫画虎去使用…

SEO机制算是让我玩明白了

获取当前时间时间戳,返回遵循ISO 8601扩展格式的日期 new Date(Date.now()).toISOString() 使用moment库转换回来 this.moment(new Date(Date.now()).toISOString()).format("YYYY-MM-DD") js去掉富文本中html标签和图片 filterHtmlTag(val) {if(!val){…

Shell编程规范与使用

一、Shell脚本概述 1)Shell的作用——命令解释器,“翻译官” Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命…

接口协作--apipost接口协作工具

接口协作 apipost支持接口在线协作编辑功能,打开apipost创业一个团队,在创建一个项目。 在把需要一起协作的人员添加到团队中 在进行项目编辑把需要进行协作的人员拉取到项目中 之后在进入项目创建接口就可以进行接口协作了

scratch猫捉老鼠 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年3月

目录 scratch猫捉老鼠 一、题目要求 1、准备工作 2、功能实现 二、案例分析

kafka调试脚本的使用

创建名称为test的topic且副本数量3,partition数量6 /etc/kafka/kafka/bin/kafka-topics.sh --create --bootstrap-server 10.1.60.112:9092 --replication-factor 3 --partitions 6 --topic test 查看名称为test的topic信息 /etc/kafka/kafka/bin/kafka-topics.sh -…