什么叫做微服务(容器)注册于发现。
是一种分布式管理系统,定位服务方法。
在传统的架构中,应用程序之间直连到已知服务,设备提供的网络:IP地址。基于tcp/ip:端口。由于现代微服务部署。服务的动态性,数量增加了,传统的基于ip+端口的形式已经不太适用。
服务注册以及发现:微服务的位置信息(ip+端口+健康状态)统一注册到一个中心化的服务注册表中,可以允许其他服务动态的查询和发现这些服务。
服务注册:当一个服务启动时,会把自己的元数据(ip 端口 服务名称 健康状态)注册到服务注册表中。
这个注册表的服务(comsul,zookeeper)。也可以在云平台部署。
服务发现:其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip+端口),这样的话可以直接在服务注册表中,直接获取我要的信息,不需要到静态配置查看了。
服务注册于发现的优点:
- 动态性,可以在运行时动态添加和移除服务,不需要额外的人工操纵和配置。
- 弹性:一旦某个服务不可用,服务注册表可以及时更新,通知其他服务避免请求的失败。
- 可扩展性:适应不断变化的服务数量。
- 服务方调用,透明性,前端和后端实现解耦。
服务注册与发现机制和其他的工具配合使用,负载均衡,健康检查。配置管理(一键同步)。
微服务架构中非常重要的组件。
Consul:
Consul是HashiCrop公司开发的一套工具,用于实现服务发现预注册,配置管理,分布式的系统协调。
Consul:主要特点:
- 服务发现与自动注册,位置信息(ip+端口+服务名称)
- 健康检查,服务注册到consul,一并加入系统的还有其他的健康状态,定期发送一个心跳检测没如果服务器挂了,consul会自动移除。
- 分布式锁:consul提供了一个分布式解锁的功能,协调多节点之间的操作,防止竞争条件和数据冲突
- 每一个服务的发现和注册都是一个会话session
创建锁:微服务1在注册到consul的时候。Consul会和这个服务的会话创建一个锁,锁用来标识具体的服务器,会话和锁之间关联。
获取锁:微服务2,建立会话,获取锁,如果申请的锁灭有被使用,客户端成功获取,如果已经存在,表示已经存在,表示已有其他的服务在占用,会给你分配一个新的锁(KV存储)。
释放锁:任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系。删除与锁关联的键,实现资源的释放。
KV存储:key-value分布式的键值对存储系统,存储配置信息,锁,特性。应用程序可以使用consul的键值对信息来动态的获取配置信息。
多数据中心支持,consul可以在多个地域部署,可以数据中心之间的发现和注册功能。
DNS和HTTP API:consul 支持DNS接口,通过殒命解析定位 服务的位置。http api:通过api应用接口,可以调用consul的信息。服务信息,健康检查等等
事件通知,如有关键信息可以随时获取通知。
Consul部署和服务发现:
Consul服务器:docker1 192.168.233.93 consul docker-ce nginx二进制 consul-template(自动发现和自动配置)
registratar服务器: dacker2 192,168.233.92运行注册机制和微服务(容器)
consul服务器:多节点docker3 192.168.233.91加入到consul的集群中)
Consul agent:开启监听服务
-server:指定集群当中的服务器节点,consul的RAFT算法实现分布式结构中节点的一致性。集群当中的成员,直接成为集群的leader,后续加入的服务器都是follower
-bootstrap:表示该节点是引导节点,引导选举过程,以及为后续加入的server做引导,加入集群。
-UI:启动图形化界面
-data-dir/var/lib/consul-data:consul存储数据的路径
-bind=192.168.233.93:服务端绑定的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 uide的端口,用来访问consul的图形化界面
8600:DNS解析的端口。
-d 后台运行
-v /var/run/docker.sock:/docker.sock
Docker.sock的是docker守护进程的UNIX的套接文件,把他映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务。
–ip=192.168.233.92 注册在consul的IP地址。
Consul://192.168.233.93:8500:所有发现的服务都会注册到指定server节点。
Consul-template: 是hashiCrop公司开发的一个工具,用于consul集成,自动更新配置文件。实现配置管理的自动化。
作用:
1,动态的配置更新。 consul-template监控consul当中key-vlaue的存储键值对,键值对发生变化,会自动更新配置文件,无需重启服务。
2,支持多种后端的模版:nginx配置,ETCD等等
自动化更新配置文件:
在这个配置文件中,{{range service “nginx”}}test1的反向代理的方法会遍历由consul注册的所有服务名称为nginx的服务
Server {{.Address}}:{{.Port}};:将发现和注册的nginx服务IP地址和端口,添加到test1的upstream的方法当中。
第一部分
/opt/consul/nginx.ctmpl:配置文件的模版的位置
第二部分
/usr/local/nginx/vhost/test.conf
给于模版生成配置文件的位置
第三部分
/usr/local/nginx/sbin/nginx -s reload
只要集群中服务发生变化,可以随时更新到配置文件当中。
–log-level=info:设置consul-template的日志级别为info。
在这里consul是一个中间件:本地nginx服务通过consul-template获取模版,反向代理。Consul-template—consul来获取注册服务的ip和度那口然后nginx调用发现的服务来实现负载均衡。
实现consul的多节点:
-enable-script-checks=true 设置检查服务为可用,他也可以发现原集群当中的服务。
-datacenter :加入到40的数据中心
-join 192.168.233.91 加入到已近有的集群当中。
docker-consul的核 心作用就是发现,微服务可以动态的管理。
docker-consul:查 看 元数据 : ip端口 蒋康状态服务名。
consul-template:自动化管理配置文件的工具,获取consul当中注册的服务信息,可以自动的添加到配置文件当中,及时生效,无需重启服务。
consul的多节点:一旦选举出了leader后续的服务器都是follower。server的名称不能重复,唯一但是可以在一个数据中心。