SpringCloud 使用Docker搭建Consul节点集群

一、Docker 环境Consul 集群搭建

1,准备工作,为后面要创建的容器准备consul数据卷

我们在linux 主机上任意一个目录下创建三个不同的目录,为后面创建容器时创建不同的数据容器卷使用。并在每个不同的目录下上传consul安装包,使用unzip命令解压安装包。如在/home/consul/目录下创建了三个子目录分别为 docker_consul_1 2 3 。每个目录下面都解压安装了consul安装包。

2,基于centos镜像分别创建不同的docker容器

我们在使用docker搭建consul容器环境使用的基础镜像为centos镜像 使用docker images 命令查看镜像列表如下:

然后我们使用该镜像创建并启动consul docker 容器:

docker run -it -p 9501:8500 --name server_1 -v /home/consul/docker_consul_1:/home --privileged=true  0d120b6ccaa8 /bin/bash

docker run -it -p 9502:8500 --name server_2 -v /home/consul/docker_consul_2:/home --privileged=true  0d120b6ccaa8 /bin/bash

docker run -it -p 9503:8500 --name server_3 -v /home/consul/docker_consul_3:/home --privileged=true  0d120b6ccaa8 /bin/bash

上面三条命令分别创建并启动了三个容器,并对本地端口和容器内端口分别做了映射,以及使用了数据容器卷选项将我们刚才的创建的目录与容器中的目录同步并共享。当我们在访问不同节点consul server时  我们可以通过本机的做映射的端口 9501、9502、9503 后面访问对应的consul 控制台。

在执行完上面命令后 由于我们使用的为 -it参数 以及后面使用了 命令 /bin/bash 所以我们执行完命令进入容器后 停留在命令行界面。不会退出容器。需要重新打开一个SecureCRT窗口,在外部机器(docker宿主主机)上重新执行第二条命令创建第二个容器。或者也可以退出容器界面(注意不要停止容器退出)。

使用docker ps 可以看到我们启动的三台容器 分别为 server_1 2 3

3,在三台容器中分别启动consul

进入到docker 容器中我们在 /home下由于使用了容器数据卷,所以我们可以看到有 consul 以及之前安装时留下的安装包。

查看当前容器的ip地址(注意这里的docker 网络默认为 桥接模式)

启动consul 命令: ./consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-1 -bind=172.17.0.2 -datacenter=wuhan -ui -client=0.0.0.0 &

-server 表示为consul服务节点  -bootstrap-expext 2  表示集群中至少有2台节点正常当前节点则可以正常工作。 data-dir 当前节点的数据存放位置 -node 表示当前节点名称。-bind 为当前容器环境的ip地址。-datacenter为节点的数据中心 -client为可以访问当前节点的ip信息 0.0.0.0 表示所有 & 表示后台运行。

其他两台容器中启动 consul 命令:

./consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-2 -bind=172.17.0.3 -datacenter=wuhan -ui -client=0.0.0.0 &

./consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-3 -bind=172.17.0.4 -datacenter=wuhan -ui -client=0.0.0.0 & 

4,将三台容器中不同的consul 服务节点添加到一个集群当中

进入到server-1 容器中 使用命令 ./consul join 172.17.0.3 将 172.17.0.2 节点加入到 172.17.0.3 节点集群中,当前没有集群,加入后 当前两个节点则会进行组成集群,并开始选举。

进入server-3 容器中 使用命令 ./consul join 172.17.0.3  172.17.0.4 节点加入到 172.17.0.3 节点集群中。

使用 ./consul members命令查看集群节点状态:

5,启动本地consul client 节点,并将该节点也加入到集群

因为通常一个服务都会再本地搭建一个 consul client节点服务作为consul代理 提供给SpringBoot服务节点用来绑定链接。我们在linux主机上使用命令

./consul agent -client=0.0.0.0 -data-dir /etc/consul.d -datacenter=wuhan -bind=172.17.0.1  -node=client-1

来启动一个consul client节点。并使用命令: ./consul join 172.17.0.2 将该client节点加入到 集群当中。

6,打开consul集群控制台页面查看集群状态

在上面过程中 我们将三台Consul server节点与一台 client 节点 组成了一个consul 集群,在每次启动consul server 时 我们都使用了 -ui 参数,我们可以打开每个server的控制台查看集群信息状态。访问地址 linux 主机地址+映射端口/ui

7,本地服务注册一级调用测试

使用上一章节中的调用工程《SpringCloud Consul注册中心介绍及配置使用》,生产者消费者配置文件内容中consul的client 连接信息都为我们的client的地址和端口(实际中调用方连接的调用方的client、提供服务应用连接的为服务应用的client,我们只有一个consul client 就都链接该client)。

生产者application.yml 配置:

server:
  port: 9001
spring:
  application:
    name: service-product
  #consul 信息配置
  cloud:
    consul:
      host: 192.168.17.128 #consul注册中心的ip地址
      port: 8500 #consul注册中心端口
      discovery:
        register: true #是否需要注册
        instance-id: ${spring.application.name}-1 #实例id(唯一标志)
        service-name: ${spring.application.name} #服务的名称
        prefer-ip-address: true #开启ip地址注册
        ip-address: ${spring.cloud.client.ip-address} #当前服务的请求ip
        port: ${server.port} #服务的请求端口

消费者 application.yml 配置:

server:
  port: 8001

spring:
  application:
    name: order-service
  cloud:
    #consul 注册中心信息配置
    consul:
      host: 192.168.17.128 #consul注册中心的ip地址
      port: 8500 #consul注册中心端口
      discovery:
        register: true #是否需要注册
        instance-id: ${spring.application.name}-1 #实例id(唯一标志)
        service-name: ${spring.application.name} #服务的名称
        prefer-ip-address: true #开启ip地址注册
        ip-address: ${spring.cloud.client.ip-address} #当前服务的请求ip
        port: ${server.port} #服务的请求端口

启动分别启动 服务提供者应用,和消费者应用,启动完成后我们刷新上一步骤中的管理页面,并在service 菜单下可以看到两个节点都链接了上来。

使用我们之前的测试连接地址: http://127.0.0.1:8001/consumer/product/get/999  测试集群正常运行

当我们任意停止掉其中一台 consul server 时,通过其他server的控制台可以看到当前集群中的剩余节点信息,测试调用地址,服务间仍调用正常。

杀掉一台服务

其他节点打印:

使用Docker时遇到的问题:创建启动容器时提示:网络不通,解决办法:宿主机上 vim /etc/sysctl.conf 。添加 net.ipv4.ip_forward=1 。保存后使用systemctl restart network 重启网络。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值