[Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战

一.Docker consul集群搭建

Consul Go 语言写的开源的服务发现软件, Consul 具有 服务发现、健康检查、 服务治理、微服务熔断处理 等功能,在微服务中讲过如何搭建consul集群,接下来看看在 Dokcer 中如何去创建搭建consul 集群

1.linux上面部署consul集群

参考[golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群 

2.Docker上面部署consul集群

(1).Dokcer Consul 参数详解

-net=host

        docker参数,使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤

-server
        consul 支持以 server client 的模式运行 ,server 是服务发现模块的核心 ,client主要用于转          发请求
-advertise
        将本机私有 IP 传递到 consul
-retry-join
        指定要加入的 consul 节点地址,失败后会重试 , 可多次指定不同的地址
-client
        指定 consul 绑定在哪个 client 地址上,这个地址可提供 HTTP , DNS , RPC 等服务,默认是
        127.0.0.1
-bind
        绑定服务器的 ip 地址,该地址用来在集群内部的通讯,集群内的所有节点到地址必须是可达
        的,默认是0.0.0.0
-allow_stale
        设置为 true 则表明可从 consul 集群的任一 server 节点获取 dns 信息 , false则表明每次请求         都会经过 consul server leader
-bootstrap-expect
        数据中心中预期的服务器数,指定后,Consul 将等待指定数量的服务器可用,然后 启动群 
        集,允许自动选举leader ,但不能与传统 -bootstrap 标志一起使用 , 需要在 server 模式下运行
-data-dir
        数据存放的位置,用于持久化保存集群状态
-node
        群集中此节点的名称,这在群集中必须是唯一的,默认情况下是节点的主机名
-config-dir
        指定配置文件,当这个目录下有 .json 结尾的文件就会被加载
-enable-script-checks
        检查服务是否处于活动状态,类似开启心跳
-datacenter
        数据中心名称
-ui
        开启 ui 界面
-join
        指定 ip, 加入到已有的集群中

(2).启动第一个节点consul1

官网:https://hub.docker.com/_/consul,需要先下载consul, 这里以192.168.31.241这台服务器演示:

[root@manager_241 ~]# docker pull consul
Using default tag: latest
Error response from daemon: manifest for consul:latest not found: manifest unknown: manifest unknown

上面的问题是consul貌似没有latest版本,需指定版本下载

[root@manager_241 ~]# docker pull consul:1.14.1
1.14.1: Pulling from library/consul
9621f1afde84: Pull complete 
...
92968d126abf: Pull complete 
Digest: sha256:d8f44192b5c1df18df4e7cebe5b849e005eae2dea24574f64a60a2abd24a310e
Status: Downloaded newer image for consul:1.14.1
docker.io/library/consul:1.14.1
[root@manager_241 ~]# docker images
REPOSITORY             TAG       IMAGE ID       CREATED         SIZE
gowebimg               v1.0.1    be3c1ee42ce2   2 days ago      237MB
mycentos               v1        4ba38cf3943b   3 days ago      434MB
nginx                  latest    a6bd71f48f68   3 days ago      187MB
6053537/portainer-ce   latest    b9c565f94ccc   4 weeks ago     322MB
mysql                  latest    a3b6608898d6   4 weeks ago     596MB
consul                 1.14.1    8540a77af6e2   12 months ago   149MB

启动第一个节点consul1(创建一个consul服务/容器):

docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0或者docker run --name consul1 -d -p 8500:8500 consul agent -server -bootstrapexpect=3 -ui -bind=0.0.0.0 -client=0.0.0.0

参数说明;

        --name consul1 指定启动的consul容器名字为consul1,

        -p 暴露的端口

        consul 通过consul镜像运行一个consul容器

        agent -server 表示启动一个consul服务端

        -d 后台运行

        -bootstrap-expect=3 启动的consul容器数量

        -ui 可以通过web访问

        -bind 绑定的ip地址

        -clien=0.0.0.0 表示所有客户端都可以加入

        

端口说明:

        8500 : http 端口,用于 http 接口和 web ui访问

        8300 : server rpc 端口,同一数据中心 consul server 之间通过该端口通信

        8301 : serf lan 端口,同一数据中心 consul client 通过该端口通信 ; 用于处理当前
                    datacenter中LAN 的gossip通
        8302 : serf wan 端口,不同数据中心 consul server 通过该端口通信 ; agent Server 使
                    用,处理与其他datacenter的gossip 通信
        8600 : dns 端口,用于已注册的服务发现     

具体命令如下:

[root@worker_241 ~]# docker pull consul
Using default tag: latest
Error response from daemon: manifest for consul:latest not found: manifest unknown: manifest unknown
[root@worker_241 ~]# 

发现不能下载consul,这是因为没有latest版本的consul,需要指定consul具体版本下载,这里search查看一下: 

[root@worker_241 ~]# docker search consul
NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
consul                                       Consul is a datacenter runtime that provides…   1427      [OK]       
hashicorp/consul-template                    Consul Template is a template renderer, noti…   29                   
hashicorp/consul                             Automatic build of consul based on the curre…   53                   [OK]

这里使用hashicorp/consul,效果和consul一样,下载:

[root@worker_241 ~]# docker pull hashicorp/consul
Using default tag: latest
latest: Pulling from hashicorp/consul
96526aa774ef: Pull complete 
8a755a53c1aa: Pull complete 
fd305fe2d878: Pull complete 
01d12fe0b370: Pull complete 
cbc103c13062: Pull complete 
4f4fb700ef54: Pull complete 
3a5b5f5fe822: Pull complete 
Digest: sha256:712fe02d2f847b6a28f4834f3dd4095edb50f9eee136621575a1e837334aaf09
Status: Downloaded newer image for hashicorp/consul:latest
docker.io/hashicorp/consul:latest
[root@worker_241 ~]# 
[root@worker_241 ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
gowebimg           v1.0.1    be3c1ee42ce2   4 days ago    237MB
nginx              <none>    a6bd71f48f68   5 days ago    187MB
hashicorp/consul   latest    48de899edccb   3 weeks ago   206MB
mysql              latest    a3b6608898d6   4 weeks ago   596MB

创建并启动consul1

[root@worker_241 ~]# docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
2550fb171015d39dccad2b62379259337ee78d074536fd6d6e3383c12c71b113
[root@worker_241 ~]#  
[root@worker_241 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                                          NAMES
2550fb171015   hashicorp/consul   "docker-entrypoint.s…"   26 seconds ago   Up 14 seconds   0.0.0.0:8300-8302->8300-8302/tcp, :::8300-8302->8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, :::8500->8500/tcp, 0.0.0.0:8600->8600/tcp, :::8600->8600/tcp, 8600/udp   consul1

启动完第一个节点后,需要启动其他consul容器,加入到这个consul1,查看consul1ip地址,命令如下: 

[root@worker_241 ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
66d69474d739   bridge            bridge    local
c2191211eabb   docker_gwbridge   bridge    local
31616bf730aa   host              host      local
1e0116a4c2da   none              null      local
[root@worker_241 ~]# docker inspect 66d69474d739
[{"Name": "bridge","Id": "66d69474d739b7833552f10f0d7c2cc204fd89874fbb9b322bdb6ccf8f8e88cd","Created": "2023-11-25T20:06:24.898621409-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"2550fb171015d39dccad2b62379259337ee78d074536fd6d6e3383c12c71b113": {"Name": "consul1","EndpointID": "870bf26516364ba1fecfcab8e41188c9366c53d4a774bdd69704ccfbe63a9a61","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}}
]

发现consul1的ip地址为:172.17.0.2

(3).启动第二个节点(端口8501),加入到 consul1

启动命令和linux搭建consul集群命令一致, -join 该ip为第一个个consul1节点ip地址(172.17.0.2)

docker run --name consul2 -d -p 8501:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consul2 -d -p 8501:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
8d0cbaf78af0be8a8e81e95ccf63508b814dafee83870048ee74120f75e9bc09

 (3).启动第三个节点(端口8502),加入到 consul1

启动命令和linux搭建consul集群命令一致

docker run --name consul3 -d -p 8502:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consul3 -d -p 8502:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
9e6e1b46f9caa2f8675c0c56b9e68fc7bca6c341f28b5f4ff12ba53a431e7463

(4).启动一个consule客户端(端口 8503 )加入到consul1

docker run --name consulClient1 -d -p 8503:8500 hashicorp/consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consulClient1 -d -p 8503:8500 hashicorp/consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
44d7066b26dae726309e1c21a7bde4b31099258e728d175bbef7cb1dc7e40398

(5).查看consul

docker psdocker exec -it consul1 consul members

[root@worker_241 ~]# docker ps 
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                                          NAMES
44d7066b26da   hashicorp/consul   "docker-entrypoint.s…"   2 minutes ago    Up 2 minutes    8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8503->8500/tcp, :::8503->8500/tcp                                                                                    consulClient1
9e6e1b46f9ca   hashicorp/consul   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8502->8500/tcp, :::8502->8500/tcp                                                                                    consul3
8d0cbaf78af0   hashicorp/consul   "docker-entrypoint.s…"   4 minutes ago    Up 4 minutes    8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8501->8500/tcp, :::8501->8500/tcp                                                                                    consul2
2550fb171015   hashicorp/consul   "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes   0.0.0.0:8300-8302->8300-8302/tcp, :::8300-8302->8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, :::8500->8500/tcp, 0.0.0.0:8600->8600/tcp, :::8600->8600/tcp, 8600/udp   consul1

 也可以通过web访问:192.168.31.240:8500

 

好了,consul集群就搭建好了,这是在一台机器上搭建,如果并发量不是很大的微服务,完全可以在一台机器上操作(好处:通过bridge桥接方式,容器间可以相互通信,默认是在一个consul集群中,共享同一个网络),当然,如果并发量比较大,就需要把consul部署到多台服务器上,下面就来在多台机器上部署consul

二.Consul集群+Swarm集群部署微服务实战

1.在多台服务器上部署consul

(1).linux上面部署consul集群

参考[golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群 

 2.通过docker部署搭建Consul集群

可以通过docker run --net=host共享Network方式(共享物理机ip地址)来搭建,这样在物理机上运行consul,就不用暴露端口了,通过物理机ip相互通信,这里以192.168.31.117这台机器为例,命令如下:

docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.117 --name consul1 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.117 -client=0.0.0.0

        --net=host 共享Network方式(共享物理机ip地址)

        -e 常量配置: 

                CONSUL_BIND_INTERFACE=ens33 绑定的网卡

        -h 192.168.31.117 物理机ip

        --name consul1 consul容器名称

        -v 映射的数据卷

                /consul_server/data:/consul/data  把当前data数据目录映射到consul/data中

        consul 从consul镜像启动容器(也可以从自己下载的其他consul镜像启动,一般为consul官方镜像启动)

        agent -server 启动一个server服务端服务

        其他参数和上面讲解的一致

上面的命令运行后,会一值执行,想要在后台运行,命令如下:

nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.117 --name consul1 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.117 -client=0.0.0.0 &

这样在192.168.31.117这台机器上就启动了一个consul容器服务了,它共享物理机ip,绑定了网卡,这样就可以通过ip访问这个consul容器

具体命令如下:

        这里使用hashicorp/consul这个镜像搭建consul容器

[root@worker_117 ~]# docker pull hashicorp/consul
Using default tag: latest
latest: Pulling from hashicorp/consul
96526aa774ef: Pull complete 
...
Digest: sha256:712fe02d2f847b6a28f4834f3dd4095edb50f9eee136621575a1e837334aaf09
Status: Downloaded newer image for hashicorp/consul:latest
docker.io/hashicorp/consul:latest
[root@worker_117 ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
hashicorp/consul   latest    48de899edccb   3 weeks ago   206MB[root@worker_117 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.117 --name consul1 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.117 -client=0.0.0.0 &[root@worker_117 ~]# 
[root@worker_117 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS      NAMES
d66621ff05c1   hashicorp/consul   "docker-entrypoint.s…"   11 seconds ago   Up 9 seconds               consul1

这样就搭建好了一个consul,下面在其他几台机器上搭建consul,并加入192.168.31.117这台consul集群中:

nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.140 --name consul2 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.140 -client=0.0.0.0 -join 192.168.31.117 &nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.81 --name consul3 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.81 -client=0.0.0.0 -join 192.168.31.117 &nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.241 --name consul4 -v /consul_server/data:/consul/data hashicorp/consul agent -bind=192.168.31.241 -client=0.0.0.0 -join 192.168.31.117 &

192.168.31.140加入consul1集群 

[root@worker_140 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.140 --name consul2 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.140 -client=0.0.0.0 -join 192.168.31.117 &
[1] 10150[root@worker_140 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS     NAMES
1e54ad577bce   hashicorp/consul   "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds             consul2

192.168.31.81加入consul1集群 

[root@manager_81 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.81 --name consul3 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.81 -client=0.0.0.0 -join 192.168.31.117 & 
[root@manager_81 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                                           NAMES
fbf11320c18e   hashicorp/consul       "docker-entrypoint.s…"   2 minutes ago    Up 2 minutes                                                                    consul3

192.168.31.241作为客户端进行转发,加入consul1集群 

[root@worker_241 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.241 --name consul4 -v /consul_server/data:/consul/data hashicorp/consul agent -bind=192.168.31.241 -client=0.0.0.0 -join 192.168.31.117 &
[1] 17681
[root@worker_241 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS      NAMES
d2b0e76b4a13   hashicorp/consul   "docker-entrypoint.s…"   4 seconds ago    Up 1 second                consul4

可以在web上查看:

在http://192.168.31.140:8500/,http://192.168.31.117:8500/,http://192.168.31.81:8500/这几台机器上都可以查看

这样consul集群就通过docker部署好了,就可以通过物理机ip访问consul容器了,这几台机器就可以进行通信了 

下面就来搭建api服务网关,微服务集群,这一部分可以通过docker swarm来搭建 

3.通过docker swarm搭建微服务集群

(1).准备mysql 以及 redis相关数据库

这里可以找一台服务器进行部署,当然在线上可以使用云服务数据库,这里通过docker来部署

启动mysql

docker run --name myMysql -p 3306:3306 -v
/root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 -d mysql

启动redis  

docker run \
-p 6379:6379 \
--name redis \
-v /docker/redis/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
--restart=always \
-d redis redis-server /etc/redis/redis.conf

 对上面命令详解:

docker run \
-p 6379:6379 \ docker与宿主机的端口映射
--name redis \ redis容器的名字
-v /docker/redis/redis.conf:/etc/redis/redis.conf \ 挂载redis.conf文件
-v /docker/redis/data:/data \ 挂在redis的持久化数据
--restart=always \ 设置redis容器随docker启动而自启动
-d redis redis-server /etc/redis/redis.conf \ 指定redis在docker中的配置文件路径,后
台启动redis

(2).准备程序

所有需要部署微服务的服务器上进行下面的操作,这里以192.168.31.129,192.168.31.132,192.168.31.130这三台服务器来部署

1).打包项目

这里以前面Gin项目rbac微服务,captcha微服务为案例讲解,需要打包rbac微服务代码,captcha微服务代码,微服务客户端代码,具体打包方式见前面章节[Docker]六.Docker自动部署nodejs以及golang项目

 

把上面微服务,以及客户端代码打包后传到服务器上

注意:

        需传入打包好的文件以及需要的配置文件,比如:app.ini,statics,view等静态资源文件

这里以192.168.31.129,192.168.31.132,192.168.31.130这三台机器来部署微服务,把打包好的项目上传到这三台服务器上

在打包的时候,需要注意: 微服务中的app.ini 需要修改consul配置地址为上面consul客户端地址,mysql配置需要修改为自己搭建的mysql地址

2).对打包好的文件进行压缩  
 3).配置Dockerfile
微服务captcha

captcha_Dockerfile

FROM centos:centos7
ADD /wwwroot/captcha.tar.gz /root
WORKDIR /root
RUN chmod -R 777 captcha
WORKDIR /root/captcha
ENTRYPOINT ["./captcha"]
微服务rbac

rbac_Dockerfile

FROM centos:centos7
ADD /wwwroot/rbac.tar.gz /root
WORKDIR /root
RUN chmod -R 777 rbac
WORKDIR /root/rbac
ENTRYPOINT ["./rbac"]
ginshop

ginshop_Dockerfile

FROM centos:centos7
ADD /wwwroot/ginshop.tar.gz /root
WORKDIR /root
RUN chmod -R 777 ginshop
WORKDIR /root/ginshop
ENTRYPOINT ["./ginshop"]

4).在要部署的服务器上面build对应的镜像  
docker build -f captcha_Dockerfile -t docker.io/captchamicro:latest .
docker build -f rbac_Dockerfile -t docker.io/rbacmicro:latest .
docker build -f ginshop_Dockerfile -t docker.io/ginshop:latest .

在三台服务器上执行了上面代码后,可以通过docker images查看生成的镜像文件 

(3).配置docker-compose.yml

version: "3"
services:redis: #配置redis,这里可以单独配置redis,把redis放到专门的一台服务器上image: redisrestart: alwaysdeploy:replicas: 1 #副本数量captcha_micro: #验证码微服务image: captchamicro #镜像名称:通过项目打包并build成的验证码微服务镜像restart: alwaysdeploy:replicas: 6 #副本数量resources: #资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启rbac_micro: #rbac微服务image: rbacmicrorestart: alwaysdeploy:replicas: 6 #副本数量resources: #资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启depends_on:- captcha_microginshop: #客户端微服务image: ginshoprestart: alwaysports:- 8080:8080deploy:replicas: 6 #副本数量resources: #资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启depends_on:- rbac_micro

 

(4).创建集群、部署微服务集群 

这里可以参考:[Docker]十.Docker Swarm讲解

#在192.168.31.129上面部署集群,命令如下:
docker swarm init --advertise-addr 192.168.31.129
[root@manager_129 ~]# docker swarm init --advertise-addr 192.168.31.129
Swarm initialized: current node (qu1ydd2t6occ8fo76rvaksidd) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-6afkz1ub7m8q37cehxmjiirs6a0r25qt1hzf0no1c0xcny55qc-d3gtv0qcsuhivozbomp4d73ha 192.168.31.129:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.[root@manager_1291 ~]

上述的docker swarm join 为加入集群的命令

docker swarm join --token SWMTKN-1-6afkz1ub7m8q37cehxmjiirs6a0r25qt1hzf0no1c0xcny55qc-d3gtv0qcsuhivozbomp4d73ha 192.168.31.129:2377

把上面命令依次在192.168.31.132,192.168.31.130上运行,这样这几个工作节点就加入了集群了,在管理节点上运行命令 docker node ls 就可以查看所有集群节点,当然,还可以多创建几个管理节点

(5).部署项目

在docker-composer.yml目录下运行以下命名,部署微服务,可以参考[Docker]十.Docker Swarm讲解

 项目就部署好了,可以通过192.168.31.129:8500查看swarm集群信息

(6).访问项目 

可以通过192.168.31.129:8080访问项目前端,通过192.168.31.129:8080/admin访问项目后台,

 

 

(7).配nginx负载均衡 

配置nginx赋值均衡,达到真正的负载均衡操作,见[Docker]十.Docker Swarm讲解

好了,Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务项目就完成了,制作不已,请多多点赞

[上一节][Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具 

关联章节:[golang gin框架] 45.Gin商城项目-微服务实战之后台Rbac微服务之角色权限关联 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205573.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka C++实现生产者

文章目录 1 Kafka 生产者的逻辑2 Kafka 的C API2.1 RdKafka::Conf2.2 RdKafka::Message2.3 RdKafka::DeliveryReportCb2.4 RdKafka::Event2.5 RdKafka::EventCb2.6 RdKafka::PartitionerCb2.7 RdKafka::Topic2.8 RdKafka::Producer&#xff08;核心&#xff09; 3 Kafka 生产者…

系列十八、Spring bean线程安全问题

一、概述 我们知道Spring中的bean&#xff0c;默认情况下是单例的&#xff0c;那么Spring中的bean是线程安全的吗&#xff1f;这个需要分情况考虑&#xff0c;bean中是否存在成员变量&#xff1f;bean中的成员变量是怎么处理的&#xff1f;...&#xff0c;针对bean的状态会有不…

商品橱窗和抖音小店有什么区别?新手应该选择哪一个?

我是电商珠珠 在抖音小店内&#xff0c;有两种经营方式&#xff0c;一种是商品橱窗&#xff0c;还有一种是抖音小店。 很多人会将他们混之一谈&#xff0c;说开抖店需要粉丝&#xff0c;商品橱窗不用。 事实真的是这样吗&#xff1f; 接下来&#xff0c;我就来给大家讲讲二…

优化机器学习:解析数据归一化的重要性与应用

在机器学习中&#xff0c;数据归一化是一种数据预处理的技术&#xff0c;旨在将数据转换为相似的范围或标准化的分布。这样做的主要目的是消除不同特征之间的量纲差异或数值范围差异&#xff0c;以确保模型在训练时更稳定、更有效地学习特征之间的关系。 通常&#xff0c;机器…

【数据挖掘】国科大刘莹老师数据挖掘课程作业 —— 第三次作业

Written Part 1. 基于表 1 1 1 回答下列问题&#xff08;min_sup40%, min_conf75%&#xff09;&#xff1a; Transaction IDItems Bought0001{a, d, e}0024{a, b, c, e}0012{a, b, d, e}0031{a, c, d, e}0015{b, c, e}0022{b, d, e}0029{c, d}0040{a, b, c}0033{a, d, e}0038…

Django报错:RuntimeError at /home/ 解决办法

错误提示&#xff1a; RuntimeError at /home/ Model class django.contrib.contenttypes.models.ContentType doesnt declare an explicit app_label and isnt in an application in INSTALLED_APPS. 原因剖析&#xff1a; 博主在使用pycharm创建Django项目的时候&#xff0…

Jmeter和Testlink自动化测试框架研究与实施

摘 要 目前基于Jmeter的接口自动化测试框架&#xff0c;大多只实现脚本维护和自动调度&#xff0c;无法与Testlink进行互通&#xff0c;实现测试方案与自动化实施流程连接&#xff0c;本文基于Testlink、Jmeter、Jenkins实现&#xff1a;通过Testlink统一维护接口自动化测试用…

渲染到纹理:原理及WebGL实现

这篇文章是WebGL系列的延续。 第一个是从基础知识开始的&#xff0c;上一个是向纹理提供数据。 如果你还没有阅读过这些内容&#xff0c;请先查看它们。 NSDT在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - …

webpack external 详解

作用&#xff1a;打包时将依赖独立出来&#xff0c;在运行时&#xff08;runtime&#xff09;再从外部获取这些扩展依赖&#xff0c;目的时解决打包文件过大的问题。 使用方法&#xff1a; 附上代码块 config.set(externals, {vue: Vue,vue-router: VueRouter,axios: axios,an…

Spark on yarn 模式的安装与部署

任务描述 本关任务&#xff1a; Spark on YARN 模式的安装与部署。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; Spark 部署模式的种类&#xff1b;Spark on YARN 模式的安装。 Spark 部署模式 Spark 部署模式主要分为以下几种&#xff0c;Spark Stand…

Compose入门

​ 本篇文章主要是为了对Compose有一个初步了解。知道Compose是做什么的&#xff0c;用Compose能干什么&#xff0c;在目前的各种UI框架下面有些优势&#xff0c;参考Google官网的解释加上一些自己的理解生成的一篇文章。本人也是Compose初学者&#xff0c;通过每一步学习遇到哪…

系统频繁崩溃,如何考虑系统的稳定性和可扩展性?

最近网传互联网应用信息系统频繁崩溃&#xff0c;语雀崩完淘宝崩&#xff0c;淘宝崩完滴滴崩&#xff0c;随着业务的发展和技术的进步&#xff0c;对于信息系统的要求也越来越高。信息应用系统为了满足不断增长的用户和业务需求&#xff0c;提高系统的稳定性和扩展性至关重要。…

网络入门---网络的大致了解

目录标题 网络发展的简单认识协议作用的理解协议的本质什么是协议分层网络通信所面对的问题OSI七层模型TCP/IP模型协议报头的理解局域网通信局域网通信基本原理报头的问题局域网的特点跨网的网络链接如何查看mac地址 网络发展的简单认识 通过之前的学习我们知道计算机是给人提…

【深度学习】基于深度学习的超分辨率图像技术一览

超分辨率(Super-Resolution)即通过硬件或软件的方法提高原有图像的分辨率&#xff0c;图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题&#xff0c;在医疗图像分析、生物特征识别、视频监控与安全等实际场景中有着广泛的应用。 SR取得了显著进步。一般可以将现有…

创建Asp.net MVC项目实现视图页面数据传值显示

MVC中视图传值 ViewData ViewBag TempData 举例创建三中传值方式实现页面数据展示 MVC中视图传值 Asp.net MVC中Controller向View传值有多种方式,这里简单说一下其中3种方式 ViewData、ViewBag和TempData ViewData ViewData存储数据&#xff0c;ViewData的声明和赋值方…

扫地机器人市场持续火爆,景联文科技数据采集标注方案助力扫地机器人智能化升级

随着消费者对智能家居和清洁卫生的需求增加&#xff0c;扫地机器人市场规模不断扩大。市场竞争也日益激烈&#xff0c;各品牌都在努力提升产品性能和服务质量&#xff0c;以获取更大的市场份额。 IDC的统计数据显示&#xff0c;今年双十一前两周&#xff08;2023年10月23日至20…

滴滴打车崩了!全过程

滴滴发布致歉10元补偿券&#xff0c;文末可领取 。 事情发生于 2023年11月27日晚~28日中午&#xff0c;滴滴打车服务出现大面积故障&#xff0c;登上微博热搜。 许多用户在使用滴滴出行时遇到了无法叫车、订单异常等问题&#xff0c;导致大量用户滞留在外&#xff0c;出行受阻…

吃火锅(Python)

题目描述 吃火锅 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。…

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护&#xff1a; 32为程序没有canary没有PIE&#xff0c;应该是简单的栈溢出。我们照着这个思路去找溢出点在哪&#xff0c;运行下程序看看什么情况&#xff1a; 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事&#xff1a; 主…

python -- python安装

1、python的诞生和发展&#xff1a; python语言是一种解释型、面向对象型、动态数据类型的高级程序设计语言。 2、python的安装&#xff1a; 1、安装解析器&#xff1a; 在安装的过程中需要注意的是&#xff1a; 在安装pycharm的时候也是同样的道理&#xff0c;需要指定安装…