docker consul 容器自动发现与注册。

发布时间:2023年12月18日

docker consul 容器自动发现与注册。

什么叫做微服务(容器)注册与发现

这是一种分布式管理系统,定位服务的方法

在传统的的架构中,应用程序之间直连搭到已知的服务,设备提供的网络,ip地址,基于tcp/ip:端口

由于现代微服务部署,服务的动态性,数量增加了,传统的基于ip+端口的形式已经不太适用。

服务注册以及发现:微服务的位置信息(ip+端口+健康状况)统一注册到一个中心化的注册表中。可以允许其他服务动态的查询和发现这些服务

服务注册:当一个服务启动时,会把自己的元数据(ip+端口+服务名称+健康状态)注册到服务注册表中。

这个注册表的服务(comsul还有zoookeeper)也可以在云平台部署

服务发现:其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip+端口),这样的话可以直接在服务注册表中,直接获取我要的信息,不需要到静态配置查看。

服务注册于发现的优点:

1、动态性,可以在运行时动态添加和移除服务,不需要额外的人工操作和配置。

2、弹性:一旦某个服务不可用,服务注册表可以及时更新,通知其他服务,避免请求失败

3、可扩展:可以适用不断变化的服务数量

4、服务方调用时:透明性,前端和后端实现解耦

服务注册于发现机制和其他的工具配合适用,负载均衡,健康检查,配置管理(一键同步),这是微服务中非常重要的组件

consul:

consul是HashiCrop公司开发的一套工具,用于实现发现与注册,配置管理,分布式的系统协调。

consul的主要特调:

1、服务发现于自动注册,位置信息(ip+端口+服务名称)

2、健康检查,服务注册到consul,一并加入系统的还有健康状态,可以定期发送一个心跳检查,如果服务挂了,consul会自动移除

3、分布式锁:consul提供了一个分布式锁的功能,协调多个节点之间的操作,防止竞争条件和数据冲突

1、每一个服务的发现和注册都是一个会话session。

创建锁:微服务在注册到consul的时候,consul会和这个服务的会话创建一个锁,锁用来标识具体的服务,会话和锁之间相关联

获取锁:微服务2,简历会话,获取锁,如果申请的锁,客户端成功获取,如果已经存在,表示已有其他的服务在占用,会给你分配一个新的锁(KV存储)

释放锁:任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系,删除与锁相关联的键,实现资源的释放

4、KV存储:key-value分布式的键值对的存储系统,存储配置信息,锁,特性。应用程序可以使用sonsul键值对存储来动态的获取配置信息。

5、多数据中心支持:consul可以在多个地域部署,可以实现在数据中心之间的发现和注册功能

6、DNS和HTTP的API:consul支持DNS接口,可以通过域名解析定位服务的位置,http api:通过API应用接口,可以调用consul的信息,服务信息,健康检查等等。

7、事件通知,如果有关键信息可以随时获取通知

consul部署和服务发现

consul服务器:docker1 20.0.0.14 cosul docker-ce nginx二进制 consul-template(实现自动发现和自动配置)

docker2 20.0.0.77 registrator服务器:运行注册机制和微服务(容器)

docker3 20.0.0.79 多节点服务器 加入到consul集群当中

consul agent \

-server \

-bootstrap \

-ui \

-data-dir=/var/lib/consul-data \

-bind=20.0.0.14 \

-client=0.0.0.0 \

-node=consul-server01 &> /var/log/consul.log &



consul agent:开启监听服务

-server:指定集群当中的服务器节点,consul的RAFT算法实现分布式结构节点的一致性,集群当中的成员,直接成为集群的leader,后续加入的服务器都是follower

-bootstrap :表示该节点作为引导节,引导选举过程,以及为后续后续加入的server做引导,加入集群

-ui:表示启动图形化界面

-data-dir=/var/lib/consul-data :consul存储数据的路径

-bind=20.0.0.14 :服务端绑定的ip地址

-client=0.0.0.0:客户端的地址:所有主句都可以和server建立通信

-node=consul-server01:直嘀咕consul节点的名称,在集群当中consul节点的名称都是唯一的,不可以重复

 &> /var/log/consul.log &:混合重定向输出到consul.log

&:后台运行

8300:raft协议的端口,保持分布式的一致性,端口处理服务和领导者选举

8301:LAN Gossip的端口,局域网内部进行节点的通信和信息传播的协议

8302:Wan gossip的端口,广域网内的节点的通信和信息传播的协议

8500:web ui的端口,用来访问consul的图形化界面

consul members

consul poerator raft list-peers #查看集群的信息

curl 127.0.0.1:8500/vi/status/peers #产看集群的server成员

curl 127.0.0.1:8500/v1/status/leader #查看集群的领导者

curl 127.0.0.1:8500/v1/catalog/sevices #查看已经被集群发现和注册的服务

curl 127.0.0.1:8500/v1/catalog/nodes #查看集群节点的详细信息

docker run -d \

--name=registrator \ -v /var/run/docker.sock:/tmp/docker.sock \ --restart=always \ gliderlabs/registrator:latest \ --ip=20.0.0.77 \

consul:20.0.0.14:8500

-v /var/run/docker.sock:/tmp/docker.sock

docker.sock是docker守护进程的UNIX的套接字文件,把它映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务。

--ip=20.0.0.77 注册在consul的ip地址

consul:20.0.0.14:8500:所有发现的服务都会注册到指定的server节点。

docker run -itd -p 81:80 --name test-1 -h test1 nginx

docker ryb -itd -p 82:80 --name test-2 -h test2 httpd

docker ryb -itd -p 83:80 --name test-3 -h test3 httpd

如何实现一键化的更新

consul-template

是HashiCrop公司开发的一个工具,用于consul集成,自动更新配置文件,实现配置管理的自动化

作用

1、动态的配置更新,consul-template监控consul单中key-value的存储键值对,键值对发生变化会自动更新配置文件,无需重启服务

2、可以支持多种后端的模板:nginx配置,etcd等等

自动化更新配置文件:

vim nginx.ctmpl

upstream test1 {

{{range servivr "nginx"}} server {{.Address}}:{{.Port}}; {{end}}

}

在这个配置当中, {{range servivr "nginx"}}:test1这个反向代理的方法会遍历由consul注册所有服务名称,这个服务名称就叫nginx的服务

server {{.Address}}:{{.Port}}; :将发现和注册的nginx服务的ip地址和端口,添加到test1的方法当中

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

tar -xf nginx-1.22.0.tar.gz

make && make install

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

cd /usr/local/nginx/conf

vim nginx.conf

vim /usr/local/nginx/conf/nginx.conf

nginx -t

mkdir /usr/local/nginx/conf/vhost

mkdir /var/log/nginx

nginx -s stop

nginx

unzip consul_0.9.2_linux_amd64.zip?
mv consul_0.9.2_linux_amd?/usr/local/bin

consul-template --consul-addr 20.0.0.14:8500 \

--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/vhost/test1.conf:/usr/local/nginx/sbin/nginx -s reload" \

--log-level=info

consul-template --consul-addr 20.0.0.14:8500:指定consul的地址,告诉consul-template从server节点获取数据

template "/opt/consul/nginx.ctmpl:/usr/local/nginx/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" \ 第一个部分

/opt/consul/nginx.ctmpl :配置文件大的模板位置

第二个部分

/usr/local/nginx/vhost/test.conf

给予模板生成配置文件的位置

第三个部分

/usr/local/nginx/sbin/nginx -s reloal

只要集群中服务发生变化,可以随时更新到配置文件当中

--log-level=info 设置consul-template的日志界别为info

consul是一个中间件,nginc服务通过consul-template获取模板,反向代理,consul-template-consul来获取注册地服务的ip和端口,然后nginx调用发现服务来实现负载均衡

docker多节点

consul的多节点:

docker3

consul agent \

-server \

-ui \

-data-dir=/var/lib/consul-data \

-bind=20.0.0.79 \

-client=0.0.0.0 \

-node=consul-server02 \

-enable-script-checks=true \

-datacenter=dc1 \

-join 20.0.0.14 &> /var/log/consul.log &



-enable-script-checks=true 设置检查服务为可用 ,也可以发现原集群当中的服务

-datacenter=dc1:加入40



docker run -d \

--name=registrator1 \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.77 \

consul:20.0.0.14:8500

docker总结

docker-consul的核心就是发现自动生成的微服务,可以动态的管理

docker-consul查,看,元数据: ip ,端口,健康,服务

consul-template自动化管理文件的工具,获取的额consul当中注册的服务信息,可以自动的添加到配置文件当中,即使生效,无需重启

consul的多节点:一旦选举除了leader,后续的服务器都是follower,server的名称不能重复,唯一但是可以再一个数据中心。

文章来源:https://blog.csdn.net/m0_52416577/article/details/135016372
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。