• 安装consul


    概述
    consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
    client
    CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
    server
    SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
    server-leader
    中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。
    raft
    server节点之间的数据一致性保证,一致性协议使用的是raft,而zookeeper用的paxos,etcd采用的也是taft。
    服务发现协议
    consul采用http和dns协议,etcd只支持http
    服务注册
    consul支持两种方式实现服务注册,一种是通过consul的服务注册http API,由服务自己调用API实现注册,另一种方式是通过json个是的配置文件实现注册,将需要注册的服务以json格式的配置文件给出。consul官方建议使用第二种方式。服务发现
    consul支持两种方式实现服务发现,一种是通过http API来查询有哪些服务,另外一种是通过consul agent 自带的DNS(8600端口),域名是以NAME.service.consul的形式给出,NAME即在定义的服务配置文件中,服务的名称。DNS方式可以通过check的方式检查服务。
    服务间的通信协议
    Consul使用gossip协议管理成员关系、广播消息到整个集群,他有两个gossippool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个

    安装consul-server集群

    下载镜像

    docker pull docker.io/consul:latest
    

      

    创建consul配置:

    vim /opt/platform/consul/config/server.json
    
    {
        "datacenter": "xxx-consul",
        "data_dir": "/consul/data",
        "server": true,
        "ui": true,
        "bind_addr": "172.29.150.25",
        "client_addr": "0.0.0.0",
        "bootstrap_expect": 3,
        "retry_join": ["172.29.150.25","172.29.150.26","172.29.150.27"],
        "retry_interval": "10s",
        "rejoin_after_leave": true,
        "skip_leave_on_interrupt": true
    }
    

     

    配置说明:

    1. datacenter:数据中心名称(库名)
    2. data_dir:数据存储目录
    3. server:运行在server模式
    4. ui:使用UI界面
    5. bind_addr:内部集群通信绑定的地址。默认是宿主机ip,如果有多块网卡,需要指定,
    否则启动报错
    6. client_addr:客户端接口绑定的地址,默认是‘0.0.0.0’;
    7. bootstrap_expect:集群预期的server个数,这里我们有3台server,设置为3;不能和bootstrap参数一同使用。这里需要说明下:bootstrap_expect指定的个数代表了server加入到集群之后,集群中的机器必须=>3的情况才开始选举server-leader,而如果配置bootstrap的节点,则启动的时候默认自己为leader。
    8. retry_join:重新加入集群
    9. retry_interval:重试时间
    10. rejoin_after_leave:在离开集群之后才重试加入
    11. skip_leave_on_interrupt :在启动后,是否ctrl+C优雅退出,我们是容器模式,所以不用管,直接true就好了。

    额外配置说明(可有可无)
    1. start_join:这个参数是在启动的时候选择加入到哪个集群,但是官方推荐retry_join取代他,因为效果更好。
    2. enable_syslog:启用则consul的日志会写进系统的syslog里,但是如果是在windows上配置改参数就会报错。
    3. enable_script_checks:是否启用监控检测脚本,这里没有对consul集群做监控,略。

    默认端口说明
    1. 8300:consul agent服务relplaction、rpc(client-server)
    2. 8301:lan gossip
    3. 8302:wan gossip
    4. 8500:http api及UI端口
    5. 8600:DNS服务端口

    启动consul-server

    docker run -d 
    --net=host 
    --name consul 
    -v /opt/platform/consul/config:/consul/config 
    -v /opt/platform/consul/data:/consul/data 
    consul agent
    

    web访问
    浏览器访问http://172.16.150.25:8500/ui
    只要是server端开启了UI,任何一个server都能访问web界面

    安装consul-client

    创建calico配置文件:

    mkdir -p /opt/platform/consul/config/ /opt/platform/consul/data
    vim /opt/platform/consul/config/client.json
    {
        "datacenter": "xxx-test-consul",
        "data_dir": "/consul/data",
        "server": false,
        "ui": false,
        "bind_addr": "172.16.5.45",
        "client_addr": "0.0.0.0",
        "bootstrap_expect": 0,
        "retry_join": ["172.16.150.25","172.16.150.26","172.16.150.27"],
        "retry_interval": "10s",
        "rejoin_after_leave": true,
        "skip_leave_on_interrupt": true
    }
    

    这里client不需要开启UI及server,所以均为false,以及bootstrap_expect设为0不参与leader节点竞争。

      

    启动consul-client

    docker run -d 
    --net=host 
    --name consul 
    -v /opt/platform/consul/config:/consul/config 
    -v /opt/platform/consul/data:/consul/data 
    consul agent
    

      

    查看节点身份

    docker exec consul consul info
    

      

    问题解决:
    通过浏览器访问http://172.29.150.202:8500/ui 发现某个node下已经删除的容器IP还存在,需要找到对应的node删除/opt/platform/consul/data下所有数据, 重启consul-client

  • 相关阅读:
    Python 编程入门(2):复杂数据类型(列表,字典)
    Python 编程入门(1):基本数据类型
    编程的智慧总结笔记
    学习 Vim 命令总结
    JS中如何使用radio
    关于模板页调用js的问题
    关于session认证用户名和密码的父类(简单认证)
    如何使用日期格式化函数
    数据库中怎么查询所有的表名
    简单的分页
  • 原文地址:https://www.cnblogs.com/cjsblogs/p/9146492.html
Copyright © 2020-2023  润新知