某某茶叶有限公司欢迎您!
金沙棋牌在线 > Web前端 > 服务器迁移实践

服务器迁移实践

时间:2020-03-31 01:27

有时候,我们会听说关于一些公司采用 Facebook 的开源项目的事情。Box 团队近期给我们发送了他们是如何使用 HHVM 的故事,是一个很好的文章。所以我们把他贴在这里, 我们感谢他们以这种方式发给我们.。我们也会寻求反馈意见.。你们可以在Facebook Engineering 主页 或者在 GitHub联系到我们。

By Joe Marrama, class="wp_keywordlink">软件工程师,Box团队

最近服务器从一家云(A云)上迁移到另外一家云(B云)上, 具体的过程如下

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~

数据中心成功迁移的十五个最佳实践,数据中心最佳实践

数据中心迁移往往是复杂而具有风险的。以下这些最佳实践将帮助组织管理者投入适量的时间和资金进行规划、执行以及测试,以保障组织的业务正常运营,并最大限度地提高成功迁移数据中心的机会。

组织面临的关键挑战

主机托管,并购活动,过时设施,整合措施,以及增加数据中心容量的新方法往往需要将IT设备从一个数据中心迁移到另一个数据中心。

大多数数据中心迁移由于计划不当或缺乏专门的团队和资源而导致费用超支和性能下降。

现有的工作人员在规划和组织IT设备从一个数据中心迁移到另一个数据中心时往往缺乏经验。

数据中心迁移的规划

组织的领导者将数据中心迁移作为基础设施交付战略的一部分进行规划:

  • 如果企业并不具备专业知识和技能来有效规划、管理、执行数据中心迁移项目,那么采取合作方式,获得外部的专业知识是一个行之有效的方法。
  • 在项目的各个阶段设计并执行一个强有力的沟通计划,经常与所有受影响的公众接触,并提供完整的信息。
  • 通过使用灾难恢复(DR)程序进行测试,制定风险缓解、迁移和回退计划。
  • 不断记录整个项目的过程,为以后评估和关闭整理制定经验教训和参考资料。

这个研究考察了数据中心迁移的最佳实践。这不是对所有迁移方法的全面审查。相反,这是一个最佳实践清单,旨在帮助企业领导者在数据中心迁移过程中取得成功。

数据中心迁移不仅仅是建立一个基础设施,并将工作负载从A点转移到B点。这往往是一个复杂而危险的项目,拥有正确的流程和专业知识至关重要。而制定完美的计划对数据中心的成功迁移来说至关重要。但是,如果组织内部没有合适的资源制定正确的规划,则必须将这些内部资源与外部资源相结合,才能有效地规划、管理、执行移植项目。企业领导者必须防止数据中心项目对业务造成不利影响。他们必须确保应用程序和服务继续正常运行,以确保停机时间最短,性能不会下降。

为了帮助企业领导者实现这一目标,以下内容集中讨论数据中心迁移的15个最佳实践。

金沙棋牌在线 1

数据中心迁移的15个最佳实践

大多数成功的数据中心迁移项目都有类似的实践,如专业知识、准备、管理、执行、沟通,以及业务联盟等。这项研究的目的不是要对这些实践中的每一项进行深入的研究,而是提供一个务实的最佳实践清单。这来源于多年对数据中心迁移项目实践的观察和总结。

根据数据中心迁移成功的步骤,将数据中心迁移的15个最佳实践整理组织成图1所示的五个主要步骤:启动、风险评估、计划、执行,以及关闭。但是,组织可能会根据其迁移情况改变这些最佳实践的顺序。他们也可以将这些最佳实践应用于多个环境(例如,本地数据中心,托管数据中心,或云计算)。

数据中心迁移项目应考虑的15个最佳实践

以下介绍了数据中心迁移项目中应考虑的15个最佳实践。

1. 掌握技能和专长

企业的工作人员掌握正确的技能和专业知识是至关重要的。由于数据中心迁移并不是日常工作的一部分,现有的工作人员在规划和组织IT设备从一个数据中心迁移到另一个数据中心时往往缺乏经验。企业领导者必须评估其内部资源是否可用,并且能够有效地规划、管理和执行迁移。如果缺乏内部资源,建议与合作伙伴合作,采用外部的专业知识和技能。

注意:数据中心迁移项目失败的一个主要原因是企业的领导团队通常将数据中心迁移视为设备迁移项目。但是,数据中心迁移的大多数工作以及大部分风险都在于制定工作量迁移计划。其迁移设备是最简单的部分,而工作负载安排、依赖关系、业务影响,以及风险是难点。

2. 成立项目团队

重大或复杂的数据中心迁移需要一个敬业的管理者。这个管理者应该与所有相关的代表进行协调,并建立一个团队。管理应该有权力分配资源和人员。

而这个团队成员不仅要成为所在领域的专家,还要乐于学习相关学科,因为解决所有设备的相互依赖关系是至关重要的。数据中心迁移的计划越详细或者越广泛,团队成员就越有可能需要运用全职工作时间开展工作。而这些工作人员的经验和技能要切合实际应用,随时准备在外部帮助下提高技能。对于时间较长的项目,请注意可能需要更改计划:在项目期间,当团队成员转移到其他角色时,他们的技能将需要被更新。

3. 做好项目准备

成功的数据中心迁移取决于以前的准备和高级计划。企业应该建立一个包括IT和业务代表的委员会,以充分考虑所有必要的资源,其包括:

  • 迁移成本
  • 现有的软件、硬件、服务、维护、灾难恢复、设施,以及其他项目的合同

项目准备还应该包括以下任务:

  • 创建设备和应用程序的详细清单
  • 进行业务影响分析(BIA)审查

这些基本的任务应该包含详细的评估或审计,确切地说需要什么时候迁移,以及如何迁移。

迁移的排演也是其筹备过程中不可或缺的一部分。为了确保所有部门都了解这个过程,组织应该首先定义在纸面上的演练,必要时进行迭代更新。然后,组织应在项目期间安排多次迁移演练,以验证假设并确定迁移时间和资源可用性等关键信息。

4. 简化过程

移动的东西越少,迁移越容易。因此,在数据中心开始迁移过程之前尽可能简化、最小化、虚拟化、整合,以及消除。

5. 评估相互依赖性

在部分风险评估阶段(通常称为"发现阶段")应该包括对应用程序和IT设备(服务器,存储和网络)之间相互依存关系的详细评估。这一评估将有助于确定分阶段迁移的可行性和细节。建议组织在风险评估阶段使用多种工具,包括配置管理数据库(CMDB)工具等。

6. 进行沟通

在迁移项目的各个阶段执行有效的沟通计划对于消除谣言和虚假的信息来源至关重要。沟通应该让所有相关人士参与,并明确分配角色和责任。

组织向内部IT人员和受影响的业务部门宣传数据中心迁移注意事项也是避免意外的关键。组织的人力资源可以提供很大的帮助,特别是在人员受到影响的情况下。宣传迁移的意义,失败和成功等情况。制定详细的员工和管理沟通计划,并定期提供更新(最好通过网站不断更新)。

7. 规划

数据中心迁移通常分阶段进行。阶段的数量经常根据数据中心规模,服务风险水平,预算和时间限制等因素而变化。大多数组织使用以下多阶段方法的结合:

首先,组织迁移低风险的部分,在迁移过程中遇到某些问题及时纠正。

一旦整个过程稳固,员工需要在处理突发事件方面训练有素,组织才会迁移高风险的部分。

8. 应急计划

数据中心在迁移过程中会出现问题。组织面临的挑战是提前发现这些问题,并制定适当的风险缓解措施。其成功的关键是具备一个良好扎实的准备阶段。例如,IT设备和网络链接的详细清单通常是应急计划的基础。此外,应急计划中还应包括临时设备和备用系统。

9. 预先测试

实践改进绩效。在迁移设备之前,运行一组完整的测试,以建立基础设施和应用程序的可操作性、功能和性能的"基准".

10. 迁移

为避免出现意外错误,请在数据中心迁移开始之前规定"更改冻结"期限,并在迁移之后结束。

在迁移过程中,请准备好面对常见问题,如网络连接问题,不正确的凭据(用户名和密码)以及缺少验证/测试。这些问题可能会对其他工作负载移动产生级联影响,特别是在升级路径尚未正确确定的时候。因此,这些问题可能会延长冻结期,并对项目造成负面影响。

11. 测试

对于所有的测试,采用基于风险的方法,结合业务影响分析(BIA)的结果和业务主题专家(SME)的意见。例如,执行应用程序级别的测试时,请确保应用程序所有者/业务单位参与验证工作和签出过程。

不要忘记在测试计划中包含故障转移方案。

12. 迁移后进行测试

使用在预迁移阶段执行的相同测试用例,并将迁移之后结果与基准结果进行比较。结果的差异可能表明在迁移过程中出现了新的问题。解决所有发现的问题。

在迁移成功后,要特别注意在线交易处理性能,峰值性能和批处理性能方面的差异。最后,请仔细检查所有服务是否在功能、弹性、性能方面进行了全面测试。

13. 审计

建议组织对迁移项目进行事后审查和审核。审查应包括对以下方面的评估:

  • 项目过程
  • 符合最初的业务计划和设计规范
  • 符合项目进度
  • 项目成员和利益相关者的反馈

这次审查将为组织提供宝贵的见解、关键的成功因素、经验教训和知识,可以结合到组织的其他项目。组织吸取的教训可以使未来的项目更加有效。

14. 关闭

正确执行关闭措施,确保未来隐藏的费用或支出不会继续影响IT运行。例如,采取以下步骤:

  • 关闭原有的IT设备的服务合同
  • 关闭不再使用的软件合同
  • 消化剩余的存储资产(包括复印机)
  • 取消大厦管理、维修服务和供应服务的供应商合同

15. 更新

最后,在数据中心迁移完成后,组织应该对其流程,程序和文档(包括灾难恢复计划,合规测试和审计证书)进行更新。另外,验证是否所有支持系统(例如,CMDB)都已正确更新。新的数据中心可能会有不同的设置,这也可能需要对运营团队进行培训。最后,认可和营销也很重要。通过各方面的努力,促进数据中心的成功迁移。

数据中心迁移往往是复杂而具有风险的。以下这些最佳实践将帮助组织管理者投入...

减少延迟和增加我们的基础设施的能力一直是 Box 最优先考虑的问题。我们努力以最有效的方式提供最好的用户体验,并且以前我们的 PHP 还选择不与这些目标一致。我很高兴地说,对于这两个目标我们最近取得了非常显著的进步,成功的部署了 HHVM(HipHop虚拟机)作为我们 PHP 代码的独家引擎服务;在这篇文章的其余部分,我将详细介绍如何使用PHP,如何使用HHVM,我们所面临的挑战是HHVM迁移,和提供卓越的性能。

  1. 数据库迁移, A云上的数据库有A-master和若干A-slave1, A-slave2, A-slave3..., 在B云上建立B-Master, B-slave1, B-slave2, B-slave3...

  2. 把A-slave3去掉负载, 然后以锁表的方式dump出来数据, 在B-master上导入

作者:mikealzhou

Box中的PHP

在 Box 里,PHP 是开发栈的核心部分。尽管我们在大量的后台服务中使用了许多语言,然而每个后台服务都要求我们首先和 PHP web 应用进行交互。从 Box 诞生那一天开始,我们产品的核心功能都是使用 PHP 来实现的。

减缓由超过150个活跃贡献者编写的和超过75万行代码组成的还在不断增长的 PHP代 码所带来的延迟是最大的挑战。我们不能对我们提供服务的大部分页面进行缓冲处理,因为用户通常希望 Box 上的各种各样的动作都是原子性的。随着我们产品的不断成长、演变,这本身就会增大延迟。我们曾经一直投入巨大的努力来减少延迟,然而似乎一直没有找到好的办法。我们重构了旧的、效率低下的代码;把一些自身可独立做为组件的提取出来做为 PHP 扩展;这样就会大量地缓冲请求时可共享的保持不变的状态,然而,所做的一切都只是微微地减少了延迟,所取的效果很容易由新的功能来替代性的实现。然而自去年我们花时间对 HHVM 进行全面评估开始,这一切就有所改变。

mysqldump -uroot -p -E -R --default-character-set=utf8mb4 --master-data -A | gzip >  all_backup.gz

本文重点介绍kafka的两类常见数据迁移方式:1、broker内部不同数据盘之间的分区数据迁移;2、不同broker之间的分区数据迁移。

HipHop 虚拟机(HHVM)

HHVM 是由 Facebook 牵头开发的开源 PHP 解释器。它诞生初期是做为 PHP 到 C++ 的编译器,是对 Facebook 的 PHP 代码库进行大量的裁剪基础上产生的,不过,最近几年它已经成长为一个即时(JIT)编译器。简言之,即时编译器就是以统一的方式对经常需要执行的 PHP 代码块进行编译并装载。演进为即时编译器也使得 HHVM 获得了与通常 PHP 解释器几乎相同的功能,同时 HHVM 现在还支持更多 PHP 语言的动态机制。例如,旧的 PHP 到 C++ 的编译器就无法运行 PHP 的”eval”语句(”eval”是把字符串当做 PHP 代码来执行,而 C++ 不支持这样的功能),而新版本的 HHVM 就可以。由于 HHVM 已经成长为即时编译器,因此它已经逐渐大量替换了标准的 PHP 解释器。

一年多以前,我们就留意到 HHVM 团队把大量的精力都集中在获得与普通的 PHP 解释器同样的功能上。过去,我们曾经对 HHVM 进行评估,不过证明要让 HHVM 正确地运行我们开发的 web 应用非常困难。然而,这次我们重新迎接这一挑战,对 HHVM 进行全面评估,确定它在延迟方面的效果。把 HHVM 合并到我们的开发栈里和让 HHVM 运行我们部分代码是一项非常重要的任务,不过潜在回报很快证明我们的努力是值得的。我们最初的试验显示:HHVM 运行一个核心端点要比默认的 PHP 解释器快四倍多。

这标志着为期一年的把我们的产品安全地移植并运行在 HHVM 上的奋斗开始了。在移植过程中,我们在开发栈的许多地方都遇到各种各样的挑战。我们遇到大部分重大困难其他人在运行时也会遇到。在接下来的一部分,我将详细说明运行 HHVM 时通常遇到四个难点:解决存在在 HHVM 和默认的解释器之间的意想不到的不兼容性;回避二者之间可预料的不兼容性;对 PHP 的部署进行修补;确保在这一混合环境下一切可以非常良好的运行。

  1. 把B-master作为A-slave3的从库, 从A云上同步数据.

  2. 把所有数据库设为只读,当完成同步之后,把B-master的写打开. 

  3. 把A上的nginx作为代理, 指向B云. 保证DNS没有生效之前老的服务器也是可用的.

  4. 更改DNS.

一、broker 内部不同数据盘之间进行分区数据迁移

获得同等的功能

PHP 是一个非常庞大的语言。仅它的核心运行环境就包含大量的函数,配置设置和大量的类,这些都是十多年的社团贡献累积而来的。这甚至还不包括大量的 PHP 扩展,所有这些扩展也必须移植到 HHVM 上。让 HHVM 具有与默认的 PHP解释器几乎完全相同的功能本身就是惊人的重大壮举。我们试图说明这两个运行时环境行为上的差异。

我们发现大量的运行时差异是在 PHP 中几乎不经常使用的地方。其中一些差异是极易发现的错误,通过单元测试就可发现错误。而一些差异则是隐藏很深的漏洞,这些漏洞可引起非常严重的后果。HHVM 每天都会接近 PHP 解释器所提供的功能,然而移植这么庞大的代码库必然会使更多的行为上的差异浮出水面。自动测试是一种最安全的保障措施,它可以排除那些影响到用户功能的运行时差异。要让 HHVM 通过我们的 PHPUnit 测试套件是要花大力气的,即要进行许多修补才能获得同等功能。手工测试则是另一种必不可少的保障措施,尤其可以找到外部服务和 HHVM 之间交互时出现的错误。在 HHVM 使用在生产环境前,我们通过自动测试和手工测试混合的方法发现了大量功能存在差异的地方。

对 HHVM 运行时环境差异的修补过程非常有趣。HHVM 社团非常活跃,在很短的时间内就可以在 GitHub 或者 HHVM 的 IRC 聊天室获得帮助。HHVM 的代码库充分利用到了现代C++的各种构件,同时理解和给代码库做出贡献也相对容易多了。在发布 HHVM 之前,我们贡献了大约 20 个用于解决功能不等同问题和增强功能的补丁。

如果中间过程中出错, 需要切回A, 并把B-master上的数据回流到A-master

1.1 背景介绍

最近,腾讯云的一个重要客户发现kafka broker内部的topic分区数据存储分布不均匀,导致部分磁盘100%耗尽,而部分磁盘只有40%的消耗量。

分析原因,发现存在部分topic的分区数据过于集中在某些磁盘导致,比如,以下截图显示的/data5 数据盘。

金沙棋牌在线 2

根据分布式系统的特点,很容易想到采取数据迁移的办法,对broker内部不同数据盘的分区数据进行迁移。在进行线上集群数据迁移之前,为了保证生产集群的数据完整和安全,必须先在测试集群进行测试。

设计方面的差异

在进行移植期间,我们发现两个运行时环境几个行为方面不一致的地方,这些不一致使得基本的设计有所不同。这可能是需要解决的最棘手的差异化问题。例如,HHVM 的多路处理模型(MPM)与以前我们曾经使用过的 Apache prefork 多路处理模型完全不同。HHVM 给每个请求提供服务的是一个工作者线程,而 Apache prefork 则给每个请求提供服务的是一个工作者进程。这对我们来说就有一点挑战。一旦发现问题所在,我们首先要做的就是进行相对简单的漏洞修复-我们曾经使用过 PHP 的进程 ID 来区分日志文件和其他临时文件。由于 HHVM 使用的是单一进程,因此当前的进程 ID 是不能用来区分并发的多个请求了。发现到这个漏洞后,我们对代码库中可能收到新多路处理模块影响的所有功能进行了一次全面的核查,例如,设置创建文件的模式的掩码和切换目录。

一个特别令人意想不到的行为上的差异是通过运行 PHP 的”memory_get_usage“函数使自身显露出来的,这个函数是用来汇报分配给当前请求的内存数量的。对于某种请求流,我们将根据这个函数汇报的数值定期地刷新内存中的缓冲数据。这个差异影响到 HHVM 的内存预分配库 jemalloc。jemalloc 是一个基于 Slab 的分配器,这种分配器分配的是各种大型的内存块,较小的内存分配则由这些内存块来分配。HHVM的“memory_get_金沙棋牌在线,usage”返回的是分配给某个请求的所有 slab 的总的大小,而不是实际上这个请求正在使用的slab内存的数量。当我们继续以同样的方式运行HHVM的“memory_get_usage”时,特定的请求流就会出现行为错乱,就会在本地缓冲数据区乱冲乱撞,这必然使得后台系统负载大大地增加。很幸运,可以完全修补这个问题:通过更改 HHVM 汇报的内存机制使得其汇报的是该请求实际上使用的本地内存数量(即通过设置参数 “$real_usage” 参数为 true 实现)。

由 HHVM 的多路处理模块(MPM)的差异还引起了另一个更加严重的问题:内存泄漏!在 Apache prefork 的多路处理模块(MPM)里,缓慢的内存泄漏不会太引起人们的关心,因为工作者进程在服务完一定量的请求后会被回收。而在 HHVM 里,这种待遇不再有了。我们在多天非标准负载的 HHVM 上碰到了非常难以处理的内存泄漏。经过大量对 jemalloc 的仔细设置,我们追踪到问题是由第三方库引起的,并马上对其打上补丁。打上这个补丁之后,在许多天服务数百万个请求的情况下,HHVM 的内存消耗始终保持稳定。

1.2 测试broker内部不同数据盘进行分区数据迁移