使用 Docker Swarm 安装
2. 服务器初始化#
2.1 系统磁盘分区#
2.2 基于 setup-tools 部署 ( 自动 )#
2.2.1 生成 setup-tools 安装包#
make build.setup-tools -> ops/dist/ur.tar.gz
2.2.2 使用 setup-tools#
部署时可按以下顺序执行,资源有限因此会有共用的情况,默认方案以七台服务器作方案
| Job / Config | 类别 | 说明 |
|---|---|---|
| host.yml (必须) | 主机配置 | 把需要编排的服务器资源录入此,注意服务器不能同时成为 nfs server 和 client |
| params.yml (必须) | 参数变量 | 执行 Job 所需要的一些参数 |
| update_params_to_prod.sh (必须) | 执行脚本 | 重要 依赖 params.yml, 把变量更新到 datebase.php, env, filebeat, lsyncd |
| init-system-job.yml (必须) | 所有服务器 | 初始化系统,包括时钟同 |
| app-server-job.yml (必须) | 应用服务器 | docker-compose 方案, 多台应用服务器需要手动更改 upstream |
| (TODO) app-server-swarm-job.yml | 应用服务器 | 后续希望只使用 Swarm Mode, 支持多台服务器 |
| ssh-copy-id-job.yml (应用服务器节点 >= 2 时必须) | 应用服务器 | lsyncd ssh 公钥认证,同步应用服务器导入导出附件目录,以达到应用层无状态 |
| (TODO, ) nfs-backup-job.yml (服务器总数量 >=2 时建议) | NFS Server | 按天备份附件,DB,ES snapshot |
| redis-server-job.yml (必须) | Redis Server | 单节点 |
| mysql-server-job.yml (必须) | MySQL Server | 主从 |
| elasticsearch-server-job.yml (必须) | Elasticsearch Server | 最多支持三节点 |
| check-system-job.yml (检测时用) | 检测系统 | CPU, 内存, 磁盘, 网络, 时钟同步等情况,执行后可以统一从日志里查看 |
| check-resource-job.yml (检测时用) | 检测资源 | Redis, MySQL, ES 等可用性状态,执行后可以统一从日志里查看 |
2.4 Docker Swarm Mode#
- Swarm Mode 解决多台应用服务器管理困难的问题,支持多节点,建议 >=3(此时高可用,可容忍一个节点失效)
- 并且多节点情况下,发布 image 更新只需要在 manager 节点上执行一下即可,通常第一台 app server 一定是 manager
2.4.1 建立 Docker Swarm Mode 集群#
- 在 app server 1 初始化
docker swarm init - 节点数量 <= 3,建议所有节点都加入到 manager 并且同时也是 worker
docker swarm join-token manager, 获得 token 在其它应用服务器节点上执行即可,如docker swarm join --token SWMTKN-1-xx 127.0.0.1:2377 - 节点数量 > 3,建议保证 3 个 manager 节点,其它可以成为 worker
docker swarm join-token worker, 后面操作同上 - 查看当前集群 nodes,需要在 manager 节点执行
docker node ls - 把一个 worker 变为 manager
docker node demote {node-id} - 把一个 manager 变为 worker
docker node promote {node-id} - 让一个 manager 不参与 worker 的调度
docker node update --availability drain {node-id} - 让一个 manager 参与 worker 的调度
docker node update --availability active {node-id}
2.4.2 发布或更新 stack#
这里的 stack 可以理解为 K8s 里的一个命名空间下的很多个 deployment
docker login- 更新
.env, 在 manager/data/docker_env/执行export $(cat .env) && docker stack deploy -c docker-swarm.yaml --with-registry-auth --prune app - 上述命令等价于
sh scripts/swarm.sh deploy - 查看 stack
docker stack ls - 查看 stack 对应所有的运行容器
docker stack ps app - 查看 stack 对应所有的 service
docker stack services appordocker service ls - 如果
.env更新了,sh scripts/swarm.sh deploy即可 - 遇到问题,也可以删除 stack 并重新 deploy 之
docker stack rm app - 为了方便,我把一些常用命令集成到
scripts/swarm.sh可参考之
2.5 数据初始化#
参考 seed.sql, 初始账号:demo / 82fd7ff892db8
2.6 部署完成#
至此,部署完成,setup-tools 其它可以用脚本批处理之,但分步执行可以观察每个 job 的结果,更为放心一些。而 Docker Swarm Mode 设置目前为手动配置。
3.1 重启相关#
- 部署全面完成,建议全部服务器重启一次看,看看系统各种服务是否运行 OK,防止对比机子重启导致问题