• 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
    • 2
    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/
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    选项说明
    –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
    
    • 1

    image-20220913211301367

       |
    
    • 1

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

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

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

    image-20220913211313175

  • 相关阅读:
    bash和dash的区别(及示例)
    二战字节跳动成功上岸,准备了小半年,拿27k也算不上很高吧~
    数据结构【二叉搜索树、leetcode刷题】
    ProxySQL + MySQL MGR 实现读写分离实战
    【LeetCode每日一题】——950.按递增顺序显示卡牌
    【已拿offer】最新AI产品经理大厂面经(含百度&腾讯&科大讯飞&商汤&蚂蚁金服)
    django+drf+vue 简单系统搭建 (4) 用户权限
    特征工程 - 当你遇到正负样本不均
    IT运维:使用数据分析平台监控H3C交换机
    centos7安装virtualenv
  • 原文地址:https://blog.csdn.net/weixin_46514551/article/details/126922111