ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker安装consul详细教程

2022-02-15 15:02:19  阅读:321  来源: 互联网

标签:node 教程 consul 172.17 node1 docker 节点


  1. 拉取镜像
    sudo docker pull consul

  2. 启动节点1(server模式)
    docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node1 consul agent -server -bind=172.17.0.2 -bootstrap-expect=3 -node=node1

-node:节点的名称 
-bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址 
-server:这个就是表示这个节点是个SERVER 
-bootstrap-expect:这个就是表示期望提供的SERVER节点数目,数目一达到,它就会被激活,然后就是LEADER了
  1. 启动节点2-3(server模式)

cat /proc/sys/kernel/random/uuid 每次都可以获取到唯一ID

sudo docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node2 consul agent -server -bind=172.17.0.3  -join=172.17.0.2 -node-id=$(cat /proc/sys/kernel/random/uuid)  -node=node2
 
sudo docker run -p 8500:8500 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' --name=node3 consul agent -server -bind=172.17.0.5  -join=172.17.0.2 -node-id=$(cat /proc/sys/kernel/random/uuid)  -node=node3 -client=172.17.0.5
-join:这个表示启动的时候,要加入到哪个集群内,这里就是说要加入到节点1的集群 
-node-id:这个貌似版本8才加入的,这里用这个来指定唯一的节点ID,可以查看这个issue 
-client:这个表示注册或者查询等一系列客户端对它操作的IP,如果不指定这个IP,默认是127.0.0.1。
  1. 启动节点4(client模式)
    docker run -d -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' --name=node4 consul agent -bind=172.17.0.6 -retry-join=172.17.0.2 -node-id=$(cat /proc/sys/kernel/random/uuid) -node=node4
    除了没有-server,其它都是一样的,没有这个就说明这个节点是CLIENT

  2. 查看下集群的状态
    sudo docker exec -t node1 consul members

    4个节点都列出来了。Status表示它们的状态,都是alive。Type表示它们的类型,三个SERVER一个CLIENT,和我们之前启动的一样。DC表示数据中心,都是dc1。

  3. 节点异常,consul的处理
    LEADER 挂了
    leader挂了,consul会重新选取出新的leader,只要超过一半的SERVER还活着,集群是可以正常工作的。node1是leader,所以把这个容器停了。

docker stop node1
看看其他节点的日志(node2):
sudo docker logs node2

日志打印,心跳检查node1的ip超时,接着开始选举。node2被选举为新的leader。我们查看下现在的leader:
curl http://10.0.4.17:8500/v1/status/leader
返回内容:
"172.17.0.3:8300", 172.17.0.3 就是 node2节点的IP

  1. 注册个服务
    (1)服务参数解析
{
  "ID": "goodServiceId", //服务id
  "Name": "goodService", //服务名
  "Tags": [              //服务的tag,自定义,可以根据这个tag来区分同一个服务名的服务
    "primary",
    "v1"
  ],
  "Address": "127.0.0.1",//服务注册到consul的IP,服务发现,发现的就是这个IP
  "Port": 7000,          //服务注册consul的PORT,发现的就是这个PORT
  "EnableTagOverride": false,
  "Check": {             //健康检查部分
    "DeregisterCriticalServiceAfter": "90m",
    "HTTP": "http://www.google.com", //指定健康检查的URL,调用后只要返回20X,consul都认为是健康的
    "Interval": "10s"   //健康检查间隔时间,每隔10s,调用一次上面的URL
  }
}

(2)注册服务

curl http://10.0.4.17:8500/v1/agent/service/register -X PUT -i -H "Content-Type:application/json" -d '{
  "ID": "centerServiceId",  
  "Name": "centerService",
  "Tags": [
    "primary",
    "v1"
  ],
  "Address": "127.0.0.1",
  "Port": 6000,
  "EnableTagOverride": false,
  "Check": {
    "DeregisterCriticalServiceAfter": "90m",
    "HTTP": "http://www.baidu.com",
    "Interval": "10s"
  }
}'

响应:

HTTP/1.1 200 OK
Vary: Accept-Encoding
X-Consul-Default-Acl-Policy: allow
Date: Tue, 15 Feb 2022 06:42:25 GMT
Content-Length: 0
  1. 发现个服务
    刚刚注册了名为userService的服务,我们现在发现(查询)下这个服务
    curl http://10.0.4.17:8500/v1/catalog/service/userService
    响应:
  • 浏览器查看单个服务:
    http://mayanan.cn:8500/v1/catalog/service/userService

  • 浏览器查看所有服务
    http://mayanan.cn:8500/v1/agent/services

内容有了吧,这个就是我们刚刚注册的服务的信息,就可以获取到

服务的名称是“userService”
服务地址是“127.0.0.1”
服务的端口是“8000”

  1. 存储个k/v
    设置一个值到user/config/connections 内容为5
    sudo docker exec -t node1 consul kv put user/config/connections 5
  • 获取特定的值
    sudo docker exec -t node1 consul kv get -detailed user/config/connections
    返回:

  • 删除个k/v
    sudo docker exec -t node1 consul kv delete user/config/connections

参考文档:
consul入门教程
consul官方文档
consul github源码

标签:node,教程,consul,172.17,node1,docker,节点
来源: https://www.cnblogs.com/mayanan/p/15896516.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有