在docker中运行Consul集群

简介: 网上有很多在docker中运行Consul集群的文章但是都千篇一律的不能在多个宿主机上运行

网上有很多在docker中运行Consul集群的文章但是都千篇一律的不能在多个宿主机上运行,
网上的启动方式如下
服务端:

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

客户端:

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

从绑定的IP还有端口可以看出来,客户端服务端只能同时在一台物理主机上运行。172.17.0.2这个ip就是Consul的image自己绑定的IP,如果再在同一个宿主机上启动一个Consul容器那绑定的IP会自动加1。如果想在另外的宿主机上启动一个Consul客户端是肯定连不上172.17.0.2这个ip的,以上启动模式比较适合开发环境。
如果想在生产环境中的多个宿主机上启动Consul集群应该怎么启动咧!?
加上一个参数就可以了
服务端:假设服务端宿主机ip是192.168.0.7

docker run -d --net=host -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' --name consul-server-bootstrap1  -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 3 -ui -bind=192.168.0.7 -client=0.0.0.0

这里的启动命令比上面的多了一个--net=host这个就是把容器与宿主机的网卡绑定共享宿主机的网络。
客户端:假设客户端宿主机ip是192.168.0.7

docker run -d --net=host --name consul-agent-1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' consul agent -ui -bind=192.168.0.8 -retry-join=192.168.0.7

也是一样的加上--net=host
随便记录一下consul的启动参数
默认是不开web界面的加上-ui就把web界面开了默认是8500端口
8300,8301端口是默认的心跳端口
-server就是作为server端
-bootstrap-expect 3 这个就是表示期望提供的SERVER节点数目,数目一达到,它就会被激活,然后就是LEADER了
在加几个命令

docker logs -f consul-server-bootstrap1 查看log

docker exec -t consul-server-bootstrap1 consul members 查看服务端状态

如何在这个里面注册一个服务
服务参数如下

{
  "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.baidu.com", //指定健康检查的URL,调用后只要返回20X,consul都认为是健康的
    "Interval": "10s"   //健康检查间隔时间,每隔10s,调用一次上面的URL
  }
}

可以通过curl简单注册一个http: //10.0.4.17:8500是Consul的IP

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"
  }
}'

暂时还没有研究Consul上的kv的作用

相关文章
|
22天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
22天前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
40 8
|
22天前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
73 8
|
22天前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
45 6
|
22天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
30 5
|
22天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
49 4
|
1月前
|
安全 Linux Shell
docker运行centos提示Operation not permitted
通过上述步骤,可以有效排查和解决在Docker中运行CentOS容器时遇到的"Operation not permitted"错误。这些措施涵盖了从权限配置、安全策略到容器运行参数的各个方面,确保在不同环境和使用场景下都能顺利运行容器。如果你需要进一步优化和管理你的Docker环境
106 3
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
34 4
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
55 3
|
1月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。