consul【集群容器化部署】


拉取consul镜像

docker pull consul:1.6.0

本地创建映射目录及配置文件

#创建server1对应的目录
mkdir /docker/consul/server1
mkdir /docker/consul/server1/data
mkdir /docker/consul/server1/config

#创建server2对应的目录
mkdir /docker/consul/server2
mkdir /docker/consul/server2/data
mkdir /docker/consul/server2/config

#创建server3对应的目录
mkdir /docker/consul/server3
mkdir /docker/consul/server3/data
mkdir /docker/consul/server3/config

#consul容器默认config路径在/consul/config,data路径在/consul/data
#使用docker -v映射,启动可以使用本地config,data也可以持久化到本地
// 创建server1配置文件config.json
// 注意配置ui集群页面,client_addr对应-client,bootstrap

{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "server":true,
    "ui":true,
    "client_addr":"0.0.0.0",
    "bootstrap":true,
    "enable_script_checks":false,
    "node_name":"consul-server-1",
    "enable_local_script_checks":true
}

// 拷贝同样的配置到/docker/consul/server2,/docker/consul/server3目录下,注意去掉ui和bootstrap属性,注意修改节点名node_name,不能冲突
// client_addr不写的话,外面服务访问不了容器里的consul服务

启动容器

#docker启动命令

docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server1/config:/consul/config -v /docker/consul/server1/data:/consul/data  -p 8500:8500  --name=consul consul:1.6.0 agent

#前面的不解释了,-v是将本地目录映射到容器内,容器内的路径是刚刚config.json配置中指定的,启动consul时指定配置文件,实际这个配置文件在本地/docker/consul/server1/config/config.json

访问本地8500端口,可以看到页面

consul

启动第二、第三个server加入到集群

#第一步:通过consul命令查看现有server信息
docker exec consul_server_1 consul members

consul

//第二步:修改server2和server3的配置文件,增加以下内容
    "start_join":[
        "172.17.0.4"
    ],
    "retry_join":[
        "172.17.0.4"
    ]
//注意保持json格式正确
//也可以在docker启动命令后加 -join=172.17.0.4 -retry-join=172.17.0.4,结果一样
#第三步:使用docker命令启动server2和server3

#启动第2个server节点
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server2/config:/consul/config -v /docker/consul/server2/data:/consul/data --name=consul_server_2 consul:1.6.0 agent


#启动第3个server节点
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server3/config:/consul/config -v /docker/consul/server3/data:/consul/data --name=consul_server_3 consul:1.6.0 agent

查看ui

consul

增加client类型consul

// 复制一个config.json到/docker/consul/client1目录下
// 修改client1的配置文件,具体如下

{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "server":false,
    "client_addr":"0.0.0.0",
    "enable_script_checks":false,
    "node_name":"consul-client-1",
    "enable_local_script_checks":true,
    "start_join":[
        "172.17.0.4"
    ],
    "retry_join":[
        "172.17.0.4"
    ]
}

// 注意点:指明了server为false
# docker启动
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/client1/config:/consul/config -v /docker/consul/client1/data:/consul/data --name=consul_client_1 consul:1.6.0 agent

client加入之后可以通过命令consul members查看
consul

可以看到我们刚刚启动的consul_client_1这个节点。

UI中在service中看不到client
consul

但是可以在node中看到
consul

查看容器中运行的数据是否保存在本地

consul
成功部署完成!

参考链接


文章作者: wuzhiyong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuzhiyong !
评论
 上一篇
linux虚拟机设置固定IP并且可以访问外网配置 linux虚拟机设置固定IP并且可以访问外网配置
设置网络模式 设置固定ip#编辑以下文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改以下内容,注意属性BOOTPROTO,ONBOOT,IPADDR,NETMASK,GATEWAY
2019-09-04
下一篇 
consul【单机版windows部署及使用】 consul【单机版windows部署及使用】
启动及常用配置项解压后,在目录下打开cmd窗口,运行 consul agent -dev -ui -node=nodeName -data-dir 作用:指定agent储存状态的数据目录 这是所有agent都必须的 对于server尤其重要
2019-08-30
  目录