美文网首页
consul集群遇到的问题记录

consul集群遇到的问题记录

作者: 天草二十六_简村人 | 来源:发表于2019-06-12 15:13 被阅读0次

    consul的架构图

    consul部署架构.png

    每个数据中心可以视为一个地区(北上广),每个数据中心内存在一个LAN Gossip池,它包含数据中心的所有成员——client和server。
    LAN池用于以下几个目的:
    1、 成员关系运行,client自动发现server,减少配置量
    2、 分布式的故障检测,允许故障检测的工作由整个集群承担,而不是集中在少数server上
    3、 Gossip池允许可靠和快速的事件广播,比如leader选举。

    多个数据中心根据consul
    keygen构成一个集群,一个集群存在唯一一个WAN Gossip池,所有的server都(应)加入 WAN Gossip池,不论是哪个数据中心的。WAN池提供的成员关系,允许server执行跨数据中心请求。

    #一、 consul集群的部署方式
    无client模式的consul集群,三个server角色,他们的ip地址分别是192.168.10.16,192.168.10.17,192.168.10.18。
    启动命令为:

    consul agent -server -ui -config-dir=/etc/consul
    

    三个节点的名称分别为xh-jvm-01t ,xh-jvm-02t ,xh-jvm-03t。
    下面以xh-jvm-01t为例,看下启动的配置参数:

    [root@xh-jvm-01t ~]# cat /etc/consul/consul.json 
    {
      "datacenter": "dc1",
      "addresses" : {
        "http": "192.168.10.16",
        "dns" : "192.168.10.16"
      },
      "bind_addr": "192.168.10.16",
      "node_name": "xh-jvm-01t",
      "rejoin_after_leave": true,
      "domain": "consul",
      "retry_join": [ "192.168.10.16", "192.168.10.17", "192.168.10.18"],
      "server": true,
      "bootstrap_expect": 3,
      "verify_incoming": false,
      "verify_outgoing": false,
      "data_dir": "/opt/consul",
      "disable_remote_exec": false
    }
    

    #二、consul的停止和启动
    killall consul
    nohup /bin/consul agent -server -ui -config-dir=/etc/consul 2>&1 >/tmp/consul.log &

    PS:遇到杀掉consul进程,立马又重新开启了一个consul进程的怪事。
    后来发现rc.local里的启动命令是start consul,想要杀掉它,必须stop consul。

    三、consul集群的加入和退出

    1、查看集群状态:
    consul operator raft list-peers

    2、退出集群
    consul operator raft remove-peer -id=192.168.10.16:8500

    3、查看members状态
    consul members

    Node Address Status Type Build Protocol DC Segment
    xh-jvm-01t 192.168.10.16:8500 alive server 1.4.0 2 dc1 <all>
    xh-jvm-02t 192.168.10.17:8500 alive server 1.4.0 2 dc1 <default>
    xh-jvm-03t 192.168.10.18:8500 alive server 1.4.0 2 dc1 <default>
    xh-jvm-04t 192.168.10.19:8500 alive client 1.4.0 2 dc1 <default>
    
    

    参考:https://blog.csdn.net/chenchong08/article/details/77885989

    四、client的作用

    1、最普适最简单的方案:


    consul集群中的client.png

    2、如果你不想在每个主机部署Consul Client,还有一个多路注册的方案可供选择。


    consul集群中的client负载均衡.png

    这个架构的优势:
    Consul节点服务器与应用服务器隔离,互相干扰少;
    不用每台主机都部署Consul,方便Consul的集中管理;
    某个Consul Client挂掉的情况下,注册到其上的服务仍有机会被访问到;

    但也需要注意其缺点:
    引入更多技术栈:负载均衡的实现,不仅要考虑Consul Client的负载均衡,还要考虑负载均衡本身的单点问题。
    Client的节点数量:单个Client如果注册的服务太多,负载较重,需要有个算法(比如hash一致)合理分配每个Client上的服务数量,以及确定Client的总体数量。
    服务发现要过滤掉重复的注册,因为注册到了多个节点会认为是多个部署(DNS接口不会有这个问题)

    3、实际部署过程中,在服务节点数量不多的情况下,有些未加入client角色。

    不管是client还是server,都是consul集群中的一个节点,在consul中,不存在传统的server管理client这样的概念,它们之间是平等的,client与server具体的区别如下:

    Client:这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

    Server:功能和client都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

    Server-leader:负责同步注册的信息给其它的SERVER,同时也负责各个节点的健康监测

    参考:https://blog.csdn.net/j3T9Z7H/article/details/83629334
    https://www.zhihu.com/question/68005259

    五、spring cloud 结合consul集群

    consul节点有多个,导致程序的配置项不固定,需要与具体的机器环境变量一致。
    当然,还有一种办法是:在每个虚拟机上安装一个client角色的consul,这样每个spring cloud的配置项
    spring:
    --application:
    ----name: assist-service
    --cloud:
    ----consul:
    ------host: localhost
    ------port: 8500

    1、在机器设置环境变量
    export CONFIG_SERVICE_ENABLED=true
    export CONFIG_SERVICE_PORT=8500
    export CONFIG_SERVICE_HOST=192.168.10.16
    export CONFIG_SCHEDULE_ENABLED=true
    2、spring cloud配置项


    spring cloud配置项.png

    参考:https://www.hi-linux.com/posts/28048.html#consul-agent%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E

    PS: consul 端口说明

    consul 内使用了很多端口,理解这些端口的用处对你理解 consul 架构很有帮助:

    TCP/8300
    8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。

    TCP/UDP/8301
    8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN 池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。

    TCP/UDP/8302
    8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。

    8500
    8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。

    8600
    8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。

    相关文章

      网友评论

          本文标题:consul集群遇到的问题记录

          本文链接:https://www.haomeiwen.com/subject/intkfctx.html