Docker comsul(注册中心)

Docker consul(注册中心)

什么是consul?

​ Consul是HashiCorp公司推出的开源工具,consul包含很多组件,但总体来说,consul是用于实现分布式系统的服务发现、服务配置的方案。

consul干什么的?

consul可以作为注册中心和配置中心,同时consul与其他注册中心一样,提供了一定的存储能力(存放注册者的信息),同时consul可以对集群中的节点进行监控检查实现故障排除。

1、服务发现:consul提供了通过DNS或者http接口的方式来注册服务和发现服务。一些外部的服务通过consul很容易的找到它所依赖的服务。

2、健康检查:consul的client提供健康检查机制,可以用来避免流量被转发到有故障的节点上。

3、KV存储:应用程序可以根据自己的需要使用consul提供key/value存储。consul提供了简单易用的http接口,结合其他工具可以实现动态配置、功能标记、leader选举等。

4、多数据中心:consul提供了多数据中心机制。这样就可以不用再创建多用的虚拟层来应用多个分区。

5、安全服务通信:consul可以为服务生成和分发TLS证书已建立相互TLS连接。Intentions可以用于定义允许通信的服务。可以通过实时更改的instentions来管理服务隔离,而不需复杂的网络拓扑和静态防火墙策略。

6、提供web的UI界面。

​ 总结:consul是分布式的、高可用的一个服务管理工具,使用go语言编写,所以可移植性高,使用raft保证数分布式数据一致性及服务的高可用。consul内置了服务注和发现、分布一致性协议实现(采用raft算法)、健康检查、KV存储、多数据中心方案以及服务之间的安全通信。每个consul服务提供节点,都运行一个consul agent(代理),consul agent并不意味着必须发现其它的服务,或者进行相应的数据操作,代理只需要对健康检查负责。代理连接一个或者多个consul服务端,consul服务端存储,复制数据,选取leader。虽然consul服务端可以单例运行,但是通过建议部署3到5个实例集群运行,以防止数据丢失,同时保证server-leader的选择能够正确的进行。

​ Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

一、consul的使用场景

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

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询。对于多实例中,consul可以通过健康检查发现故障节点,避免流量转发到故障节点中。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持多种平台,支持TLS证书分发,实现安全服务通信。
  • 服务配置场景中consul提供key-value数据存储功能,并且能讲变动迅速的通知出去,借助consul可以实现配置共享,需要读取配置的服务可以从consul中读取到准确的配置信息。

二、consul集群

  • Consul Cluster(集群)有Server和Client两种角色。不管是Server还是Client,统称为Agent(代理)。
  • Agent:是一直运行在Consul集群中每个成员上的守护进程。通过运行consul agent来启动。agent可以运行在client或者server模式。指定节点作为client或者serve。所有的agent都能运行DNS或者HTTP接口,并负责运行时检查和保持服务同步。
  • client:所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
  • server:功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
  • server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。
  • DataCenter:虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心。我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。
  • Gossip:Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。Serf是去中心化的服务发现和编制的解决方案,节点失败侦测与发现,具有容错、轻量、高可用的特点。
    • LAN Gossip:它包含所有位于同一个局域网或者数据中心的所有节点。
    • WAN Gossip:它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。

img

三、consul部署

服务器类型系统IP地址需要安装的组件
consul服务器CentOS7.4(64 位)192.168.10.11运行consul服务、nginx服务、consul-template守护进程
registrator服务器CentOS7.4(64 位)192.168.10.12运行registrator容器、nginx服务
systemctl stop firewalld
setenforce 0
1、建立consul服务
cd /opt
rz -E							#导入下面的压缩包
consul_0.9.2_linux_amd64.zip
unzip consul_0.9.2_linux_amd64.zip 
mv consul /usr/local/bin/

image-20220913210035676

2、设置代理,后台启动 consul 服务器
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.11 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

netstat -napt | grep consul
consul members
consul info | grep leader

image-20220913210624180

选项说明
-以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。
3、查看集群信息

1)查看member状态和查看集群状态

查看集群server成员		curl 127.0.0.1:8500/v1/status/peers
集群Raf leader			curl 127.0.0.1:8500/v1/status/leader
注册的所有服务			curl 127.0.0.1:8500/v1/catalog/services
查看nginx服务信息			curl 127.0.0.1:8500/v1/catalog/nginx
集群节点详细信息			curl 127.0.0.1:8500/v1/catalog/nodes

image-20220913210847560

registrator部署:
4、容器服务自动加入Nginx集群
  • 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.10.11 \
consul://192.168.10.11: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和端口。

image-20220913211234620

5、测试容器开启是否能自动发现服务
输入x.x.x.x:8500

image-20220913211301367

   |

[外链图片转存中…(img-oSrQuKjp-1663501743815)]

5、测试容器开启是否能自动发现服务
输入x.x.x.x:8500

[外链图片转存中…(img-pVkXQz0J-1663501743815)]

image-20220913211313175

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值