Docker 实战案例解析,实现自动化数据库迁移
出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散!
在 Phorest Salon Software 公司,我们是在 AWS 上运行我们的平台。该平台由 VPC 内的许多 AWS 资源(实例,数据库)组成。我们的大部分服务都运行在由亚马逊 ECS 管理的 Docker 容器上。
迁移的挑战
我们有三个专用环境:开发、分段构建和生产。每个环境都有自己的专用 VPC,因此 VPC 中的资源不能直接从外部访问,通常来说这是很好的。
问题是我们有时需要修改某些组件的模式结构,例如:添加一个新的表或列。在 Java-ish 中,我们使用 Liquibase 来管理 DDL / DML 的更改。同样的,通常来说这是很好的。但是我们要如何才能使这些更改通过持续交付的方式应用到各个不同的环境中呢?
我们针对上述问题,提出了几种解决方法:
1、在启动时执行
您可以让您的组件执行此操作。例如,您可以将应用程序配置为在启动时应用它。对于 Spring Boot 应用程序来说,这非常简单。您只需将 liquibase jar 添加到环境变量并配置一些配置属性即可实现此目的。
这种方法对于在本地的开发或开发环境来说可能是很好的,但是对于分段构建或生产呢?问题在于,您的数据库迁移脚本可能很慢,执行它们可能需要几分钟、几个小时甚至几天的时间。
对于上述情况,使用 ECS 的效果就不太理想了,因为在那里部署服务时,您定义了 ECS 将用于验证组件的运行状态,在执行数据库迁移脚本的情况下启动它,会导致整个迁移过程被认为是不健康的。而且 ECS 可能会在迁移过程中杀死您的容器。您可以为 ECS 服务配置一个宽限期,但这可能很难预测到它的值,因为每个迁移都可能不同。
2、手动应用
另一种选择是 SSH 连接到与服务在同一个 VPC 中运行的EC2实例,并从那里手动运行迁移脚本(你可能知道这种做法有多糟糕)。
3、使用 docker 容器
另一个选择是创建一个专用的 docker 镜像来运行迁移脚本。我们选择了这个选项:
定义 docker 镜像:
我们使用了一个开源的基础镜像,它为我们提供了一种执行 Liquibase 更改日志的方法。我们所要做的就是定义一些环境变量并将 Liquibase 更改日志复制过去。空变量是故意放进去的,以便大家在运行容器时记得替换掉它们。
我们将镜像定义文件与我们的代码库一起存储,因此在发布时会对其进行版本控制和标记。有了这一点,我们更新了 Jenkins 的工作,作为工作流程的一部分来构建和推动新的 docker 镜像。
下一步是更新 Jenkins 的工作来触发使用我们的新镜像迁移数据库的 ECS 任务。为此,我们使用了自己的框架,但您可以使用 Terraform 或K8s,或者您甚至可以使用以下命令手动运行它(请不要在生产中执行!)
docker run your-image-tag liquibase update
使用新步骤构建管道
这种方法的好处
由于我们不在容器启动时运行迁移,所以我们不再有与长时间运行的迁移相关的问题,从而导致 ECS 运行状况检查失败。但好处是,我们的迁移现在已经与我们的部署分离了(这是一篇很好的文章,解释了从应用程序部署中分离数据库迁移的好处)。
使用这种新方法,我们必须确保我们的迁移始终与当前在生产中运行的代码兼容。它需要一些额外的工作,但现在意味着我们可以毫不费力地回滚我们的版本。
解决这个问题可能还有许多其他(也许更好)的方法,但是这种方法对我们更有效。如果你对这个话题有任何想法或想法可以在文尾处留言与我们探讨。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2018年,云计算的6大未来趋势
随着云计算的不断演变,云计算不再是早期的简易平台,通过互联网云计算能够以最少的管理工作快速进行系统资源配置,以及随时访问更高级别的共享池。云计算的出现,让企业获得成本效益之外,还实现了简化IT管理和维护、内置安全性以及易于部署的模式等。基于这些优势,越来越多的企业开始使用云计算,以期能够帮助企业实现业务目标。 2018年,企业云用户开始关心在新的一年里云计算会有哪些发展。以下为大家整理了关于云计算领域在2018年的六大热门趋势。 1、重新定义服务模式随着云计算的发展,云服务和解决方案将随之增长。软件即服务(SaaS)预计到2020年将以18%的年均复合增长率增长,平台即服务(PaaS)的采用率将在2020年达到56%,2018年基础设施即服务(IaaS)的全球市场规模将达到175亿美元。 现阶段云计算是一种业务模式,服务提供商在定制的环境中处理客户的完整基础架构和软件需求。随着企业云服务的采用,云文件共享服务将会增加,而消费者云服务也将会随之增长。在云计算领域,亚马逊领先于微软、IBM、谷歌及其他技术巨头。2022年,亚马逊AWS营收将达到430亿美元。 2、混合云成优选2018年,云...
- 下一篇
自助搭建git服务
Docker容器方式搭建Gogs步骤 一. 准备镜像:(从DockerHub下载) gogs:0.11.53 mysql:5.7 二. 运行容器 **注意卷的挂载以及端口的暴露** example: 1> 运行gog容器, 3000端口是Web页面端口,22是用户ssh方式访问git服务的端口 docker run -d -p 3000:3000 -p 2222:22 -v /root/gogs/gogsdata:/data -v /etc/localtime:/etc/localtime gogs/gogs:0.11.53 2> 运行mysql容器,用于存储gogs数据库,注意设置密码和服务器编码 docker run --privileged --name mysql -p 3306:3306 -v /root/gogs/mysqldata:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=Paic1234 -d mysql:5.7 --character-set-server=...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主