zoukankan      html  css  js  c++  java
  • 在docker部署consul集群

     Consul是一种分布式、高可用、支持水平扩展的服务注册与发现工具。包含的特性有:服务发现、健康检查、键值存储、多数据中心和服务管理页面等。

    官方服务架构图:

      图中包含两个Consul数据中心(即两个Consul集群)。数据中心1由多个SERVER和CLIENT组成,数据中心2由多个CLIENT组成。对于Consul集群而言,SERVER或CLIENT都是集群的一个节点,服务可注册到任意节点上,从而实现注册信息共享。

        # CLIENT

        表示consul的client模式,所有注册到当前节点的服务会被转发到SERVER,本身不持久化数据。其职责是健康检查、服务注册等,当服务数量特别庞大时,分别启动多个client可减少server压力。

        # SERVER

        表示consul的server模式,功能和CLIENT都一样,区别是它能把所有信息持久化到本地,遇到故障时,信息是可以被保留的。

        # LEADER

        图中中间SERVER带有LEADER标识,说明在多个SERVER中,其为老大。它负责各个节点的健康检查和同步注册信息给其他SERVER。

    一、在docker中部署portainer

      Portainer是Docker的图形化管理工具,由GO语言编写的,提供状态显示、应用模板快速部署、对于Docker(容器、镜像、网络、数据卷)的基本操作、日志显示、容器控制台等功能。

    1)、docker search portainer命令查询最新的protainer镜像

    2)、docker pull portainer/portainer 拉取镜像

    3)、docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/portainer:/data --name portainer --restart=always  portainer/portainer  运行镜像

    4)、访问:http://ip:9000 ,首次登陆需要初测portainer用户

    二、部署consul集群

    1、docker search consul 查询consul镜像

    2、docker pull consul 拉取consul镜像

    3、docker run -d --name=consul1 -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 --restart=always consul agent --server=true --bootstrap-expect=3 --client=0.0.0.0 -ui 运行第一个consul容器

    4、通过portainer查看consul1的ip地址(或者docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1 ,consul1是对应的容器名称)来查看consul1的ip地址

    5、docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.3 运行第二个consul容器

    6、docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.3 运行第三个consul容器

    7、docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.3 运行第四个consul容器

    8、查看集群成员

      通过portainer进入到容器,输入命令consul  members 即可查看consul集群成员

      

     9、查看投票状态

       通过portainer进入到容器,输入命令consul operator raft list-peers即可查看节点选举投票结果

    10、访问 http://localhsot:8500 访问consul,即可发现:

    其中,带leader标识的节点即为服务的老大,由它将数据同步到各个service上 

    三、配置参数说明

    -bootstrap-expect

        --配置数据中心中预期的SERVER的数量,当集群中启动的SERVER达到预期值时,Consul开始引导集群;

    -bind

        --内部集群通信绑定的地址,默认情况下是"0.0.0.0";

    -client

        --consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0;

    -config-file

        --服务启动时要加载的配置文件;

    -config-dir

        --配置文件目录;

    -config-format

        --指定要加载的配置文件的格式;

    -data-dir

        --数据目录;

    -dev

        --启用开发服务器模式。对于在关闭所有持久性选项的情况下快速启动consul代理非常有用,不适合生产使用,因为它不将任何数据写入磁盘;

    -join

        --启动时要加入到的另一位代理地址;

    -retry-join

        --加入失败后重试连接,对于明确可用地址的情况下很有用;

    四、故障演示

      此集群有4个节点,期望节点数是3,当其中一台server故障时,将自动选取新的leader,操作如下:

      1、在停掉某一台服务之前,每个节点的状态如下:

     

      2、将leader 节点停掉之后,将自动选取一个新的leader节点,如下图所示:

      

     五、docker重启,如何将其他节点加入到集群

      1、查看leader节点的ip地址

      2、通过 consul join  IP地址,使节点加入到集群

    六、如何在window下启动consul server模式

      1、下载consul,并解压到到文件

      2、配置环境变量

      

      3、新建data文件夹

      4、运行命令 consul agent -server -bootstrap-expect 1 -data-dir=D:consulserver1data -node=consul1 -client=0.0.0.0 -bind=127.0.0.1 -ui 

    7、consul集群

      1、准备三台服务器,分别是 s1:192.168.15.1、s2:192.168.15.2、s3:192.168.15.3

      2、分别在三台服务器上执行以下命令

      consul agent -server -bootstrap-expect 1 -data-dir=D:consulserver1data -node=consul1 -client=0.0.0.0 -bind=192.168.15.1 -ui 

      consul agent -server -bootstrap-expect 2 -data-dir=D:consulserver1data -node=consul1 -client=0.0.0.0 -bind=192.168.15.2 -ui 

      consul agent -server -bootstrap-expect 3 -data-dir=D:consulserver1data -node=consul1 -client=0.0.0.0 -bind=192.168.15.3 -ui 

      3、分别在s2,s3服务器上执行,consul -join 192.168.15.1

      4、打开浏览器访问:http://ip:8500地址

      

  • 相关阅读:
    C++总结
    KMP算法
    理解I/O Completion Port(完成端口)
    [转载]Windows网络编程系列教程之四:Select模型
    [转载]理解 I/O Completion Port (IOCP完成端口)
    [转载]IOCP模型的总结
    发个IOCP的C++例子
    说说网络通信模型
    几个网络模型的示例代码(BlockingModel、OverlappedModel、WSAEventSelect、CompletionRoutine)..c++
    关于Socket 多线程 的一篇好文章
  • 原文地址:https://www.cnblogs.com/cyit/p/14251815.html
Copyright © 2011-2022 走看看