Docker Swarm 集群搭建

环境介绍

我的两台虚拟主机

主机名centos IP 192.168.137.200 为管理节点
主机名node1 IP 192.168.137.2 为普通节点

系统为Centos 7 64位

安装Docker

分别在两台主机里安装Docker

curl -sSL https://get.daocloud.io/docker | sh

开机启动

service docker start
systemctl enable docker

执行docker info,我目前的Server Version: 19.03.2

打开端口

firewall-cmd --zone=public --add-port=2377/tcp --permanent &&
firewall-cmd --zone=public --add-port=7946/tcp --permanent &&
firewall-cmd --zone=public --add-port=7946/udp --permanent &&
firewall-cmd --zone=public --add-port=4789/udp --permanent &&
firewall-cmd --reload

或者直接关闭防火墙

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2377端口是集群管理通信端口,只需要在管理节点开启

7946 tcp,udp是节点间通信使用端口,

4789 是overlay network使用的端口。

如果你需要在集群暴露其他服务,则需要开启相应端口,比如80

当然如果你是阿里云主机,相应端口是在安全策略开启,如果节点都在同一区域,则可以不开启端口,使用内网IP。

创建集群

在管理节点上执行

docker swarm init --advertise-addr 192.168.137.200

我们得到

[root@localhost ~]# docker swarm init --advertise-addr 192.168.137.200
Swarm initialized: current node (ykiyahkjoq3q0dn2rrnqd4ery) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

这里已经有详细说明了,加入一个普通节点只需要执行

docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377

我们在node1执行,这里我们通过advertise-addr指定了本机的IP

docker swarm join --advertise-addr 192.168.137.2 --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377

可以看到,我们的node1已经成功加入集群

[root@localhost ~]# docker swarm join --advertise-addr 192.168.137.2 --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
This node joined a swarm as a worker.

我们在管理节点执行docker node list也能看到该节点

[root@localhost ~]# docker node list
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ykiyahkjoq3q0dn2rrnqd4ery *   centos              Ready               Active              Leader              19.03.2
hr3u7u010po2w6ugtcbbil8e7     node1               Ready               Active                                  19.03.2

这个token忘记了可以在管理节点执行docker swarm join-token worker获得

[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377

如果要加入一个管理节点,执行docker swarm join-token manager获得加入管理节点的token,正式部署推荐有3个以上管理节点

[root@localhost ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-9e6xiw7k9krf3abc2p3jrw9yn 192.168.137.200:2377

创建私有网络

集群内的服务是可以自由通信的,但目前我们有一些单个容器部署在管理节点,比如mysql,redis。需要一个私有网络提供通信。在管理节点执行

docker network create -d overlay --attachable my-net #添加attachable参数,使得单个容器也能附加到此网络

安装Portainer面板

这是一个集群的可视化管理面板,在管理节点执行

docker run -d --name portainer --restart=always -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /home/data/portainer/data:/data portainer/portainer

重启一下docker

service docker restart

浏览器访问我们的管理节点:192.168.137.200:9000 首次访问需要设置密码
在这里插入图片描述
选择Local,连接我们本地的docker集群
在这里插入图片描述
进入选择local,至此可视化管理面板安装完毕
在这里插入图片描述

安装MYSQL和Redis

docker run -d --name mysql8 \
   --restart=always \
   --network my-net \
   -v /home/data/mysql8:/var/lib/mysql \
   -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=user_center \
   mysql:8.0.18 \
   --sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION \
   --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

mysql 配置

docker exec -it mysql8 bash
mysql -uroot -p123456
alter user 'root'@'%' identified with mysql_native_password by '123456'; #更改身份验证插件
docker run -d --name redis \
   --restart=always \
   --network my-net \
   -v /home/data/redis:/data \
   redis:5.0.6 \
   --appendonly yes

这里我们没有映射端口到宿主机,并加入了私有网络my-net,然后集群内的服务可以通过
mysql8:3306 root 123456 和 redis:6379访问到mysql和redis。现在的mysql带有一个user_center的数据库,如果需要创建数据库,可以进容器执行命令。以后的教程将讲到部署mysql、redis的集群。

《PHP微服务练兵》系列索引:https://blog.csdn.net/donjan/article/details/103005084

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建 Docker Swarm 集群,你可以按照以下步骤进行操作: 1. 安装 Docker:在每个节点上安装 Docker,可以按照 Docker 官方文档的指引进行安装。确保所有节点上都安装了相同版本的 Docker。 2. 初始化 Swarm:选择其中一个节点作为 Swarm Manager,运行以下命令初始化 Swarm: ``` docker swarm init ``` 这将生成一个 Token,用于其他节点加入 Swarm。 3. 加入节点:在其他节点上运行以下命令,将它们加入 Swarm: ``` docker swarm join --token <token> <manager-ip>:<manager-port> ``` `<token>` 是在初始化 Swarm 时生成的 Token,`<manager-ip>` 和 `<manager-port>` 是 Swarm Manager 的 IP 地址和端口。 4. 部署服务:使用 Docker Stack 或 Docker Compose 编写服务的配置文件,并使用以下命令在 Swarm 上部署服务: ``` docker stack deploy -c <compose-file> <stack-name> ``` `<compose-file>` 是服务配置文件的路径,`<stack-name>` 是你给服务取的名称。 5. 扩展和管理集群:使用 Docker 命令扩展、更新、删除服务,以及管理集群中的节点。例如: - 扩展服务的副本数:`docker service scale <service-name>=<replica-count>` - 更新服务:`docker service update <service-name> --image <new-image>` - 删除服务:`docker stack rm <stack-name>` - 查看集群状态:`docker node ls` 这些步骤可以帮助你搭建一个简单的 Docker Swarm 集群。你可以根据实际需求进行配置和管理。如果需要更详细的指导,可以参考 Docker 官方文档中关于 Swarm 的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值