docker-consul

Docker consul 容器的自动发现与注册

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

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

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

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

服务注册已经发现;核心就是把微服务的位置信息(ip+端口+健康状况)统一注册到一个中心化的服务注册表

可以允许其他服务动态的查询和发现这些服务

docker-consul_第1张图片

服务注册 当一个服务启动时,会把自己的元数据(ip+端口+服务名称+健康状态(指的是服务是否在运行))主从到服务注册表中,这个注册表的服务(comsul,zookeeper),也可以在云平台部署
服务发现 其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip+端口),这样的好处是可以直接在服务注册表中,直接获取我要的信息,不需要到静态配置查看了

服务注册与发现的优点

动态性 可以在运动时动态添加和移除服务,不需要额外的人工操纵和配置
弹性 一旦某个服务不可用,服务注册表可以及时更新,通知其他服务避免请求失败
可扩展性 可以适应不断变化的服务数量
透明性 服务方调用时,透明性,前端和后端实现解耦

服务注册与发现机制和其它工具配合使用,负载均衡,健康检查,配置管理(一键同步)。

是微服务架构中非常重要的组件

Consul

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

Consul的主要特点

1 服务发现与自动注册,位置信息(ip+端口+服务名称)
2 健康检查,服务注册到consul,一并加入系统的还有他的健康状态,定期发送一个心跳检查,如果服务不存在,consul会自动移除
3 分布式锁:consul提供了一个分布式锁的功能,协调多个节点之间的操作,防止竞争和数据冲突

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

创建锁 微服务在注册到consul的时候,consul会和这个服务的会话创建一个锁,锁用来标识具体的服务器,会话和锁之间关联
获取锁 微服务2,建立会话,获取锁,如果申请的锁没有被使用,那么客户端会成功获取,如果已经存在,表示已有其他服务在占用,会给你分配一个新的锁(KV存储)
释放锁 任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系,删除与锁关联得键,实现资源的释放
KV存储 key-value分布式的键值对存储系统,存储配置信息,锁,特性。应用程序可以使用consul的键值对信息来动态的获取配置信息
多数据中心支持,consul可以在多个地域部署,可以实现数据中心之间的发现和注册功能
DNS和HTTP API:Consul支持DNS接口,通过域名解析定位服务的位置,http api:API应用接口,可以调用consul的信息,服务信息,健康检查等等
事件通知,如有关键信息可以随时获取通知

 Consul部署和服务发现

Consul服务器 docker1 192.168.233.11   consul  docker-ce  nginx二进制部署  consul-template(自动发现和自动配置)
Registrator 提供微服务 192.168.233.12   运行注册机制和微服务(容器服务)
Consul服务器 多节点服务器:多节点 docker3 192.168.233.13  (加入到consul的集群中)
[root@docker1 ~]# systemctl stop firewalld.service
[root@docker1 ~]# setenforce 0
[root@docker1 ~]# cd /opt
[root@docker1 opt]# mkdir consul
[root@docker1 opt]# cp consul_0.9.2_linux_amd64.zip consul
[root@docker1 opt]# cd consul/
[root@docker1 consul]# unzip consul_0.9.2_linux_amd64.zip
[root@docker1 consul]# ls
consul  consul_0.9.2_linux_amd64.zip
[root@docker1 consul]# mv consul /usr/local/bin/
[root@docker1 consul]# consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.233.11 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 23564
[root@docker1 consul]# netstat -antp | grep consul
[root@docker1 consul]# consul members
[root@docker1 consul]# consul operator raft list-peers
[root@docker1 consul]# curl 127.0.0.1:8500/v1/status/peers
[root@docker1 consul]# curl 127.0.0.1:8500/v1/status/leader
[root@docker1 consul]# curl 127.0.0.1:8500/v1/catalog/nodes
[root@docker1 consul]# curl 127.0.0.1:8500/v1/catalog/services
[root@docker1 consul]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make
[root@docker1 nginx-1.22.0]# vim nginx.ctmpl

upstream test1 {

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

}

server {

listen 8000;
server_name localhost 192.168.233.11;
access_log /var/log/nginx/test1-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://test1;

}
}

 

你可能感兴趣的:(docker,consul,容器)