赞
踩
机器的信息如下表所示:
| IP地址 | 主机名 | 身份 |
| — | — | — |
| 192.168.121.142 | m0 | 管理节点 |
| 192.168.121.139 | m1 | 管理节点 |
| 192.168.121.140 | m2 | 管理节点 |
| 192.168.121.141 | w0 | 工作节点 |
| 192.168.121.138 | w1 | 工作节点 |
从官方图可见,管理节点集群之间的内部管理协调使用了Raft共识算法,这样就保证了管理节点高可用(HA),一般情况下会参考以下两个原则:
部署奇数个管理节点,这样有利于减少脑裂;
不要部署太多管理节点,因为越多管理节点意味着需要花费跟多时间来达成共识;
接下来的整个部署过程分为以下几步:
初始化第一个管理节点(m0);
加入新的管理节点(m1、m2);
加入工作节点(w0、w1);
接下来正式开始吧;
docker swarm init \
–advertise-addr 192.168.121.142:2377
–listen-addr 192.168.121.142:2377
关于advertise-addr和listen-addr这两个参数,前者用来指定其他节点连接m0时的地址,后者指定承载swarm流量的IP和端口,它们更详细和深入的区别可以参考文章:https://boxboat.com/2016/08/17/whats-docker-swarm-advertise-addr/
2. 控制台返回信息如下,表明Swarm集群初始化成功:
Swarm initialized: current node (7585zt09o2sat82maef0ocf42) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
–token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
192.168.121.142:2377
To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.
[root@m0 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
7585zt09o2sat82maef0ocf42 * m0 Ready Active Leader
现在集群已经建立起来了,接下来我们需要加入更多的管理节点和工作节点;
Docker Swarm的新节点加入策略是从管理节点获取一长串命令,被称为join token,任何想加入集群的机器只要自己执行这个join token即可加入Swarm集群;
如果有新的管理节点需要加入,在m0执行命令docker swarm join-token manager即可得到管理节点的join token,如下所示:
[root@m0 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
–token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \
192.168.121.142:2377
[root@m0 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \
–token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
192.168.121.142:2377
两种join token都准备好了,接下来开始加入新节点。
[root@m1 ~]# docker swarm join \
--token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \
- 1
192.168.121.142:2377
- 1
This node joined a swarm as a manager.
在m2上做同样的操作;
在m0、m1、m2其中的任意一台上执行命令docker node ls查看Swarm集群的现状,如下图,可见三个管理节点都是正常状态,ID字段带有星号后缀表示当前执行命令的机器是m1:
[root@m1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
0isfyre69mdu1hm11esf1q3dk m2 Ready Active Reachable
7585zt09o2sat82maef0ocf42 m0 Ready Active Leader
slc0hjbs7jh2hdi8ai3wohy23 * m1 Ready Active Reachable
[root@w0 ~]# docker swarm join \
--token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
- 1
192.168.121.142:2377
- 1
This node joined a swarm as a worker.
在w1上做同样的操作;
在m0、m1、m2其中的任意一台上执行命令docker node ls查看Swarm集群的现状,可见工作节点已经全部就绪:
[root@m0 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
0isfyre69mdu1hm11esf1q3dk m2 Ready Active Reachable
7585zt09o2sat82maef0ocf42 * m0 Ready Active Leader
i71bcxt1auc804syybroajtan w1 Ready Active
slc0hjbs7jh2hdi8ai3wohy23 m1 Ready Active Reachable
wqcwcccva3d3mxgi5p423d4fv w0 Ready Active
至此,Swarm集群环境搭建完毕,接下来可以验证了。
docker network create -d overlay tomcat-net
docker service create --name tomcat \
–network tomcat-net \
-p 8080:8080 \
–replicas 3 \
tomcat:7.0.96-jdk8-openjdk
[root@m0 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
kguawc4b5th4 tomcat replicated 3/3 tomcat:7.0.96-jdk8-openjdk
[root@m0 ~]# docker service ps tomcat
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
n1gs9f1plce2 tomcat.1 tomcat:7.0.96-jdk8-openjdk w1 Running Running 19 minutes ago
q8jyg088ci21 tomcat.2 tomcat:7.0.96-jdk8-openjdk m2 Running Running 19 minutes ago
h9ww33dpw56m tomcat.3 tomcat:7.0.96-jdk8-openjdk m0 Running Running 19 minutes ago
[root@m0 ~]# docker service inspect --pretty tomcat
ID: kguawc4b5th4qlwlsv183qtai
Name: tomcat
Service Mode: Replicated
Replicas: 3
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Max failure ratio: 0
ContainerSpec:
Image: tomcat:7.0.96-jdk8-openjdk@sha256:91eadffb59d9a35ada2d39fcd616a749ac580aa5e834499b7128f27be2e46623
Resources:
Networks: tomcat-net
Endpoint Mode: vip
Ports:
PublishedPort 8080
Protocol = tcp
TargetPort = 8080
服务模式一共有两种:Ingress和Host,如果不指定,则默认的是Ingress;
Ingress模式下,到达Swarm任何节点的8080端口的流量,都会映射到任何服务副本的内部80端口,就算该节点上没有tomcat服务副本也会映射;
Host模式下,仅在运行有容器副本的机器上开放端口,使用Host模式的命令如下:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
[外链图片转存中…(img-bwX4xZiS-1713320114787)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。