docker compose跨主机部署consul集群/单机

Posted mrdongdong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker compose跨主机部署consul集群/单机相关的知识,希望对你有一定的参考价值。

简单明了 直接开干 。 原理百度下

 

 

#此次部署 双客户端 三服务端

 

 

一、确定服务器信息 有无相关端口冲突 。docker服务是否存在

netstat -nltp  |grep -E "8300|8301|8302|8500|8600"
  • 8300:集群内数据的读写和复制
  • 8301:单个数据中心gossip协议通讯
  • 8302:跨数据中心gossip协议通讯
  • 8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
  • 8600:采用DNS协议提供服务发现功能
systemctl status docker

 

二、测试单机是否能用

vim consul-single.yml

version: \'3.1\'
services:
  consul:
    image: consul:1.9.4
    container_name: "consul"
    restart: always
    ports:
      - "8500:8500"
    volumes:
      - /data/docker-compose/consul:/consul/data
    command: [agent,-server,-ui,-client=0.0.0.0,-bootstrap-expect=1]

单机部署结束 #以上命令解释 

  • volumes 把存储数据路径挂载出来。 
  • command 创建容器启动命令 。
  • restart重启策略

 

集群来了~  准备三台机器   

一、准备服务器

client1
10.1.1.10
server1 10.1.1.10
client2 10.1.1.11
server2 10.1.1.11
server3 10.1.1.12

 

 

 

 

 

 

二、准备client配置文件   每一行都有备注  不多解释了

vim  client.json      

{
    "datacenter": "dgx",     //平台名称
    "log_level": "INFO",
    "node_name": "c1",        //节点名称,不可冲突
    "server": false,            //是server端 还是client端
    "bind_addr": "10.1.1.10",           //本机ip
    "client_addr": "10.1.1.10",           //本机ip
    "ports": {                 //本节点开通得端口信息  因为会跟server冲突  所以改了client原有端口
        "dns": 8608,
        "http": 8508,
        "server": 8305,
        "serf_lan": 8303,
        "serf_wan": 8304
    },
    "rejoin_after_leave": true,
    "retry_join": [             //集群节点信息  指定server的ip
        "10.1.1.10:8301",
        "10.1.1.11:8301",
        "10.1.1.12:8301"
    ],
    "retry_interval": "30s",
    "reconnect_timeout": "72h"

}

创建第二台的client 直接复制 。修改node_name  节点名字  和本机IP即可

 

三、准备三台server的配置文件

vim server.json 

{
    "datacenter": "dgx",     //平台名称
    "log_level": "INFO",
    "node_name": "s1",         //节点名称,不可冲突
    "node_id": "ce0a4143-2f3e-41c9-b981-1c436b6089e0",      //uuid不可冲突
    "server": true,                    //是server端 还是client端
    "bootstrap_expect": 3,             //几个节点后启动集群
    "bind_addr": "10.1.1.10",       //本机ip  这不改会报错
    "client_addr": "0.0.0.0",  
    "ports": {                //本节点端口信息
        "dns": 8600,
        "http": 8500,
        "https": -1,  
        "server": 8300,
        "serf_lan": 8301,
        "serf_wan": 8302
    },
    "rejoin_after_leave": true,
    "retry_join": [              //集群节点信息
        "10.1.1.10",
        "10.1.1.11",
        "10.1.1.12"
    ],
    "retry_interval": "30s",
    "reconnect_timeout": "72h"
}

其余两台一致 , 修改node_name集群名字  和本机IP即可

四、准备docker-compose文件

vim consul-many.yml 

version: \'3.2\'
services:
  consul-server:
    image: consul:1.9.4
    restart: "always"
    network_mode: "host"
    container_name: "consul_s1"
    environment:
      CONSUL_BIND_INTERFACE: eth0
    volumes:
      - "./server.json:/consul/config/config.json"
      - "./consul/server_data:/consul/data"
    command: [agent,-data-dir,/consul/data,-config-dir,/consul/config]

  consul-client:
    image: consul:1.9.4
    restart: "always"
    network_mode: "host"
    container_name: "consul_c1"
    volumes:
      - "./client.json:/consul/config/client_config.json"
      - "./consul/client_data:/consul/data"
    command: [agent,-data-dir,/consul/data,-config-dir,/consul/config]

yml解析:

  • server和client 用的都是host网络模式。 因为client端修改了端口 所以不会冲突。
  • volumes:挂载两个地方 ,一个刚写的配置文件 ,一个数据存储路径
  • server端 需要指定eth0 本机网卡名, 根据自己网卡名字修改
  • container_name:不可冲突 容器名字 。 自己s1 s2 s3 c1 c2 改就好了
  • 因为就两台client节点。 在第三台机器 把下面删掉就好

 

五、启动

docker-compose -f consul-many.yml up -d

 

六、检查

netstat -nltp  |grep -E "83|83|83|85|86"
浏览器打开 本机ip:8500

 

七、谢谢观看 本次部署本人查好几天 一个个测试的。 容器无任何报错内容 。剩下的端口交给开发  让开发用就好拉~ 

ps: 转载请@本文章

以上是关于docker compose跨主机部署consul集群/单机的主要内容,如果未能解决你的问题,请参考以下文章

docker容器跨主机网络overlay

Docker私有仓库部署之Compose搭建consul集群

Docker容器跨主机多网段通信解决方案

Docker-compose + consul!

Docker-compose + consul!

Docker-compose + consul!