您的位置:首页 > 运维架构 > Docker

Docker Swarm 集群搭建

2020-01-15 09:08 267 查看

文章目录

环境介绍

我的两台虚拟主机

主机名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.200Swarm 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:2377This 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://www.geek-share.com/detail/2790050496.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Donjan 发布了26 篇原创文章 · 获赞 0 · 访问量 2038 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: