我正在将一个打包的自由服务器部署到包含我的应用程序的Bluemix中。
我想更新我的应用程序,但在此之前,我想知道备份我目前运行的最佳方法是什么?如果我的更新不好,我想恢复以前版本的应用程序。
换句话说,更新Bluemix中Liberty服务器上运行的Web应用程序的最佳实践或建议方法是什么。我是否只是保留了我推送到Bluemix的zip的备份并在出现问题时恢复它?或者Bluemix是否提供了备份和还原的管理功能?
答案 0 :(得分:7)
据了解,推拉链的手动备份是一种可接受的策略。此外,我发现Bluemix文档Blue-green deployments是一个合理的解决方案,因为它是一种利用持续交付的部署技术,允许客户在发生任何问题时回滚其应用程序。
Cloud Foundry文章Using Blue-Green Deployment to Reduce Downtime and Risk简洁地解释了部署步骤(因为Bluemix基于Cloud Foundry,步骤类似于示例:使用cf map-route命令步骤以前引用的Bluemix文档)。
答案 1 :(得分:5)
我同意Ryan的推荐使用蓝/绿方法,尽管云服务器部署的新手可能不熟悉这个术语。 Martin Fowler总结了它在BlueGreenDeployment中解决的问题:
自动部署的挑战之一是切换 本身,从测试的最后阶段开始使用软件 生产。您通常需要快速执行此操作以最小化 停机时间。蓝绿部署方法通过确保您来实现这一目标 有两个生产环境,尽可能相同。在任何 其中一个,让我们说蓝色的例子,是活的。就像你一样 准备您最后阶段的软件的新版本 在绿色环境中进行测试。一旦软件在工作 绿色环境,你切换路由器,以便所有传入的请求 走向绿色环境 - 蓝色环境现在处于空闲状态。
解决此问题是PaaS的主要优势之一。
也就是说,对于历史背景而言,值得注意的是这种蓝/绿策略对云计算来说并不陌生。请允许我详细说明其中一个" old"处理这个问题的方法:
假设我在专用服务器myexample.com
上托管了一个网站。面向公众的服务器的IP地址("蓝色")将在DNS" @"中表示。输入或作为CNAME
别名;另一台服务器("绿色")将托管较新版本的应用程序。要以面向公众的方式测试新应用程序而不影响 live 生产环境,我只需更新/etc/hosts
即可将顶级域名映射到绿色服务器的IP地址。例如:
129.42.208.183 www.myexample.com myexample.com
一旦我刷新本地DNS条目并关闭所有浏览器,所有请求都将被定向到绿色预生产环境。一旦我确认所有工作都符合预期,我就会更新实时环境的DNS条目(在这种情况下为myexample.com
)。假设DNS具有相当短的TTL值(如300秒),我会更新A
记录值(如果按IP或CNAME
记录值,如果通过别名,则更改将传播到DNS服务器在几分钟内。为了确认新DNS值的传播,我注释掉上述/etc/hosts
更改,刷新本地DNS条目,然后运行traceroute
。假设它在本地正确解析,我会使用免费的在线DNS检查程序(例如whatsmydns.net)对世界其他地方进行最后的双重检查。
以上假定对面向公众的内容服务器(例如,连接到数据库或应用服务器的Apache服务器)进行更新;如果更新适用于中央数据库或类似的事务数据服务器,则从预生产到生产的转换更为复杂。如果它对网站访问者没有太大的破坏性,我会禁用登录并删除所有活动会话,从而有效地将网站呈现为只读。然后我以与前面描述的相同的方式更新后端服务器,即切换预生产绿色前端以引用预生产绿色后端中的复制,测试,然后当所有内容都检出时,切换绿色前端为蓝色并重新启用登录。瞧。
好消息是,使用Bluemix,上述相同的策略适用,但由于不需要对DNS条目或单独的服务器大惊小怪,因此简化了。
相反,您创建了两个应用程序,一个是实时的("蓝色"),另一个是预生产("绿色")。您可以更新预生产应用程序(cf push Green
将新代码推送到预生产应用程序),而不是更改站点的DNS条目并等待更新在全球范围内传播,而是对其进行测试使用自己的网址(Green.ng.mybluemix.net
),一旦您确信它已投入生产,请将应用程序添加到路由表(cf map-route Green ng.mybluemix.net -n Blue
),此时应用程序和#34;蓝色"和"绿色"将收到传入的请求。然后,您可以通过取消映射(cf unmap-route Blue ng.mybluemix.net -n Blue
)来使之前的应用程序版本脱机。
网站访问者不会遇到任何服务中断,而且与#34; old"我之前概述的方式,部署团队(a)在知道某些东西是否有效以及(b)可以立即恢复到之前的状态之前,不必咬指甲等待DNS条目在世界各地传播已知的工作生产版本,如果在部署后发现严重问题。
答案 2 :(得分:0)
您应该使用某种source control,例如Git或SVN。 Bluemix与IBM DevOps Services (IDS)很好地集成,可以利用git或外部Github repo来管理您的项目。当您打开应用的信息中心时,您应该会在右上角看到一个链接,上面写着"添加GIT"。这将自动为IDS中的项目创建一个git仓库。
使用SCM工具,您可以相对轻松地管理代码版本。 IDS为您提供了直接部署到Bluemix作为构建管道的一部分的能力。
如上所述管理您的代码后,您可以按照上面的建议考虑绿色/蓝色部署等。