基于docker搭建consul集群

1.Dokcerfile创建相应镜像

FROM  centos

#配置环境变量consul版本
ENV CONSUL_VERSION=1.0.6
ENV HASHICORP_RELEASES=https://releases.hashicorp.com


#添加consul用户跟用户组
RUN groupadd consul && \
    useradd -g consul consul

#安装consul
RUN yum upgrade -y && \
    yum install -y net-tools && \
    yum install -y firewalld firewalld-config && \
    yum install -y wget && \
    yum install -y unzip && \
    wget ${HASHICORP_RELEASES}/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip && \
    unzip consul_${CONSUL_VERSION}_linux_amd64.zip && \
    rm -rf consul_${CONSUL_VERSION}_linux_amd64.zip && \
    mv consul /usr/local/bin

RUN mkdir -p /consul/data && \
    chown -R consul:consul /consul

VOLUME /consul/data

#开放端口
EXPOSE 8300
EXPOSE 8301 8301/udp 8302 8302/udp
EXPOSE 8500 8600 8600/udp

在dockerfile目录 执行下面代码,注意后面上下文点号

docker build -t counsl  .

 

2.创建子网络并规划ip

docker network create  --subnet=192.168.2.0/24  consulNetwork

容器名称

容器IP地址

node1

192.168.2.2

node2

192.168.2.3

node3

192.168.2.4

 

 

 

 

 

3.分别创建三个容器  -P使用Dockerfile的端口映射

docker run -itd --name consul1  --network mynetwork  -P --ip 192.168.2.2 consul

docker run -itd --name consul2  --network mynetwork -P --ip  192.168.2.3   consul

docker run -itd --name consul3  --network  mynetwork  -P  --ip 192.168.2.4   consul

4.进入容器

docker exec -it consul1  /bin/bash

5.进入三个不同容器分别启动

consul agent -server -ui -node=server1  -bootstrap-expect=3  -bind=192.168.2.2 -data-dir /consul/data -join=192.168.2.2 -client 0.0.0.0

consul agent -server -ui -node=server2  -bootstrap-expect=3  -bind=192.168.2.3 -data-dir /consul/data -join=192.168.2.2 -client 0.0.0.0

consul agent -server -ui -node=server3  -bootstrap-expect=3  -bind=192.168.2.4 -data-dir /consul/data -join=192.168.2.2 -client 0.0.0.0

agent   代理模式 -server  表示启动的是一个服务 -client  启动客户端

-bootstrap-expect 3 表示等待多少个节点再启动,这里3个,3个一起启动

-node=server1 就是给consul服务起个别名为server1

-bind=192.168.2.2  绑定内网ip

-advertise:通知展现地址用来改变给集群中的其他节点展现的地址,用于外网通讯

-data-dir /opt/data1 数据存储目录为/opt/data1

-ui 启动默认ui界面

-client  consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问

6访问宿主机对应映射到docker容器的8500端口查看信息 我的是 0.0.0.0:32769->8500/tcp

http://192.168.21.199:32769

基于docker搭建consul集群_第1张图片

7.获取健康的服务

api:/v1/health/service/

http://192.168.21.199:32779/v1/health/service/pay-php

$serviceList = $this->curl_request($url, 'GET');

$serviceList=json_decode($serviceList, true);
$address=[];
foreach ($serviceList as $k=>$v){
    //判断当前的服务是否是活跃的,并且是当前想要去查询服务
    foreach ($v['Checks'] as $c){
        if($c['ServiceName']==$serviceName && $c['Status']=="passing"){
              $address[$k]['address']=$v['Service']['Address'].":".$v['Service']['Port'];
         }
    }
}

 

你可能感兴趣的:(基于docker搭建consul集群)