最近在用 Swarm 搭建一个新的大数据开发集群, 因为安装 Hive 需要用到 MySQL,
为了方便部署和统一维护, 决定把 MySQL 也加入到 Swarm 部署环境中,
而且后续要部署多版本的大数据组件, 为了环境隔离也会频繁用到.
Swarm
Swarm 是管理 Docker 集群的实用工具.
首先我们需要选择一个机器节点创建 Swarm 集群并作为 Manager:
# docker swarm init |
在其他节点上执行, 加入新建的 Swarm 集群 :
docker swarm join --token SWMTKN-1-6csh08t6mwhp7qea92k19zkdmwttmzfecdh2nge251nyg584zu-ckw77mdh8oxr95jd5e2kbh6tv 192.168.0.180:2377 |
编写 MySQL 的 service 描述
接着, 是编写 MySQL 的 service 描述文件(docker-compose-mysql.yaml),
进行设置版本、网络、端口、数据挂载位置、部署位置等等。
如下, 是一个 stack 部署文件, 在 services
中可以定义多个 service,
组成一个 stack, 这里我们定义了一个名为 mysql01
的 service:
# vim docker-compose-mysql.yaml |
这里用的是 host 模式部署, 依赖的 network 已经创建了, 没有的话可以创建:docker network create --driver overlay hadoop-net
部署位置 constraints 是 node.hostname==dkn2
,
并把物理机的位置 /data/services/bd1/docker/mysql
挂载到容器里的目录 /var/lib/mysql
.
部署
现在我们就可以开始执行部署了,docker stack
可以把刚才 docker-compose-mysql.yaml
中定义的 services 部署到 swarm 集群中。
docker stack deploy --compose-file docker-compose-mysql.yaml bdv3 |
bdv3
是我们定义的 stack 名称,而 MySQL 部署后的 service 名称是 bdv3_mysql01
.
docker stack ls
可以查看所有的 stack :# docker stack ls
NAME SERVICES
bdv3 1
...
docker stack services bdv3
可以查看 stack bd1 下所有 services:# docker stack services bdv3
ID NAME MODE REPLICAS IMAGE PORTS
zvxgsnybxdpm bdv3_mysql01 replicated 1/1 mysql:8.0.19
docker stack ps bdv3
可以查看 stack 下所有 services 的 tasks :# docker stack ps bdv3
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
w5ffdyvhvtia bdv3_mysql01.1 mysql:8.0.19 dkn3 Running Running 2 days ago *:3306->3306/tcp,*:3306->3306/tcp
docker stack rm bdv3
可以移除 stack.
也可以某些 service 缩容到0个实例:docker service scale bdv3_mysql01=0 foo=0
参考
https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/
https://docs.docker.com/engine/reference/commandline/stack/
https://docs.docker.com/engine/reference/commandline/service_scale/