Python + Flask + Consul

安装

三台机器

1
2
3
192.168.16.161
192.168.16.69
192.168.16.47

161

1
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d consul consul agent -server -bind=192.168.16.161 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config

69

1
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d consul consul agent -server -bind=192.168.16.69 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 192.168.16.161

47

1
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d consul consul agent -server -bind=192.168.16.47 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 192.168.16.161

参数说明

1
2
3
4
5
6
7
8
9
10
--net=host:采用主机网络配置,若采用默认的bridge模式,则会存在容器跨主机间通信失败的问题
-v /data/consul_data/data:/consul/data:主机的数据目录挂载到容器的/consul/data下,因为该容器默认的数据写入位置即是/consul/data
-v /data/consul_data/conf:/consul/config:主机的配置目录挂载到容器的/consul/conf下,因为该容器默认的数据写入位置即是/consul/conf
consul agent -server:consul 的 server 启动模式
consul agent -bind=192.168.16.161:consul 绑定到主机的ip上
consul agent -bootstrap-expect=3:server 要想启动,需要至少3个server
consul agent -data-dir /consul/data:consul 的数据目录
consul agent -config-dir /consul/config:consul 的配置目录
consul agent -join 192.168.16.161:对于主机 69、47 来说,需要加入到这个集群里
-client 0.0.0.0 -ui : 启动ui界面

进入容器,查看集群信息

1
2
3
4
5
6
7
docker exec -it 46267ed9474c /bin/sh

/ # consul members
Node Address Status Type Build Protocol DC Segment
192-168-16-161 192.168.16.161:8301 alive server 1.8.4 2 dc1 <all>
192-168-16-47 192.168.16.47:8301 alive server 1.8.4 2 dc1 <all>
192-168-16-69 192.168.16.69:8301 alive server 1.8.4 2 dc1 <all>

访问 web 界面 http://192.168.16.161:8500/ui/

Python 使用

参考 github 上的项目进行了简单的修改,修改后地址为 新地址,使用方式:

  1. 启动 consul
  2. 将 consul 地址配置到代码中
  3. 启动项目(注意修改启动 IP 为本机 IP,因为 consul 会对项目做健康检查,检查不通过无法调用服务)
  4. 查看 consul web 页面,查看服务是否正常
  5. 执行 aaaa.py 脚本,调用 consul 上已经注册的服务

参考资料:

https://www.jianshu.com/p/565a1f24d730

https://www.cnblogs.com/lfzm/p/10633595.html