您使用什么样的保护措施来避免意外地对生产环境进行意外更改?

时间:2009-06-05 15:15:21

标签: debugging production production-environment

由于我们没有良好的临时环境,我们经常需要调试生产系统上的问题。我们有网络,应用程序和数据库服务器。

您使用什么样的安全措施来避免在执行此操作时意外地对生产环境进行意外更改?


编辑:

该应用程序是一个非常复杂的B2B垂直Web应用程序。涉及的内容很多。有些表有近1亿条记录。


编辑:

我们拥有的暂存环境无法镜像生产。除了实际的数据库数据之外,还有数百GB的数据文件。


编辑:

我们确实对代码使用源代码控制,但对存储过程不使用。源代码管理中有一些旧的存储过程,但没有人再保持更新。

主要关注的是文件系统上的数据库和数据。

顺便说一下,我是这家公司的顾问,而不是真正的员工。

10 个答案:

答案 0 :(得分:5)

最直接的答案是:“不要这样做。”

答案 1 :(得分:5)

源代码控制。当事情发生无可挽回的错误时,就像回滚一样。此外,diff可以帮助您将更改复制到其他生产系统。

答案 2 :(得分:2)

仅允许某些帐户写入访问权限,因此您必须以不同方式登录才能进行更改

在Web服务器上,有两个目录结构,相互镜像,一个只能写一个ID,另一个staging dir,每个人都可以写。

在数据库服务器上,有一个生产数据库,其中只有一个ID可以写,有一个每个人都可以写的暂存数据库。登台DB可以将夜间备份恢复到它。

但是,如果您的暂存系统中有错误的查询或资源占用,那么资源将从生产中撤出,并且计算机可能会挂起。

答案 3 :(得分:2)

只读/来宾帐户。认真。这与您不总是以root用户或管理员身份登录的原因相同。

答案 4 :(得分:2)

新的生产版本通过我们的系统人员进行,程序员和开发人员只能请求使他们的新系统上线,同时也需要批准,并且我们证明已经对所做的每项更改进行了测试(通过包括生成请求中此版本中测试的所有内容的快照。)

如果出现问题,我们会保留以前的生产版本以供回退。

如果事情确实中断了(他们不应该经常使用适当的测试程序和托管版本),那么我们可以回滚或修补。通常当事情在实时中断并且修复很小时,我们可以修补,然后将修复移动到测试以进行适当的测试。

无论如何,有时事情会过去......

答案 5 :(得分:2)

对于Web和应用程序服务器,我会尝试将环境复制到新位置(但在相同的环境中),并让受影响的人员在副本上重现行为。这至少可以让您与100%的客户意外地进行分离。

对于数据库服务器,我会在生产系统上配置用户帐户,以赋予它们只读权限。

答案 6 :(得分:1)

这是一件非常艰难的事情,它与“没有上演环境”的领域相关。

出于很多原因,最好有一个专用的(重复的)PROD,你可以使用它来部署到...并进行调试,但我知道有时当你开始时不能解决问题我们想要的快速或彻底。

我见过的一件事就是使用虚拟机:除了调试环境外,您还可以在虚拟机中创建一个mini-PROD并使用它进行调试。鉴于您正在开发的应用程序类型,这可能不实用,因此该领域的其他详细信息将会有所帮助。

至于在调试期间避免对PROD的更改:是否有理由需要更改任何内容以方便调试?如果是这样,那么可能值得研究解决另一种方式。

答案 7 :(得分:1)

版本控制对于控制对生产环境的更改非常有帮助 - 只需将生产环境作为存储库中相应目录的工作副本即可。当您推出更新时,源代码管理系统会确保复制所有已更改的文件。当更新中断某些内容时,您可以将生产工作副本回滚到最后一个未损坏的修订版本。此外,您可以从标签而不是后备箱检查生产WC;这样,您可以通过调整标记来决定将哪些存储库修订应用于生产环境。

如果您不熟悉版本控制系统的概念,我建议您做一些研究。它们在概念上很复杂但非常有用且功能强大。维基百科的文章是一个很好的起点: http://en.wikipedia.org/wiki/Revision_control

答案 8 :(得分:1)

对不起,你必须有一个临时环境。没有解决这个问题。如果这意味着您必须剔除数据集的大小,那么这就是您必须要做的事情。使用VMware和VMware转换器在停机期间导入生产系统(如果有的话)(这是一个数小时的过程,因此可能不实用)。

如果没有完全访问生产数据库(或副本),就无法解决某些类型的问题,性能就是其中之一。但是你真的应该建立一个临时环境,即使它是在某人的台式机上有一个精简的数据集。

除此之外,过去我不得不过一些这样的生活,而且除了大量的备份外,你无能为力。您所做的每项更改都应在增量备份之前进行。这样,如果你有些东西,你丢失的金额并不大。 SQL Server可以采用差异备份来限制用于备份的磁盘空间量。 Oracle也可以。

答案 9 :(得分:0)

如果您真的没有其他选择,而且可能是一个长期的情况......考虑在应用程序数据(文件或数据库)中添加一些方法来标记一组数据为'请求上帝不要实际上,这个数据会主动改变生产状态,并且当激活这个标志时,在一个过程中的关键位置结合数据转储,你可以运行大部分生产逻辑,而不会对数据进行实际操作。