Azure系统部署与运维全攻略
1. 部署包构建与部署
1.1 构建定义与包获取
构建定义完成后,构建此包时,会在drops ZIP文件中得到 .cspkg 和 .cscfg 包。
1.2 部署Web包到Azure
部署Web包到Azure可按以下步骤进行:
1. 在门户中为某个环境创建一个网站,例如 http://azurebakery - test.azurewebsites.net/ 。
2. 从网站的仪表板下载发布配置文件,并在Visual Studio中打开(可按 Ctrl + E, D 快速格式化)。
3. 解压drop包(先从文件属性中解除阻止),将 MyWebsite_Package 文件夹复制到临时文件夹以便部署。
4. 在 MyWebsite.SetParameters.xml 文件中找到如下参数:
<setParameter name="IIS Web Application Name" value="Default Web Site/CustomerWebsite_deploy" />
- 将值更改为在门户中创建的网站名称,例如:
<setParameter name="IIS Web Application Name" value="azurebakery - test" />
- 打开Visual Studio命令提示符,将目录更改为
MyWebsite_Package位置,输入以下命令测试部署:
CustomerWebsite.deploy.cmd /T /M:https://azurebakery - test.scm.azurewebsites.net:443/msdeploy.axd /U:$azurebakery - test /P:Sy4RBrTsrzwj2rpxia4Dc7Lg9R6u7Jt2bZ4RmC6zwXmXXXXXXXXxxxxxxx xx /A:Basic
其中, /T 参数使用 MSDeploy –whatIf 测试部署,不实际部署; /M 是MSDeploy发布URL; /U 是用户名; /P 是密码; /A:Basic 用于基本授权。
7. 运行测试命令时,会输出 deploy.cmd 脚本创建的脚本,如下:
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:package='C:\Temp\Package\CustomerWebsite_Package\ CustomerWebsite.zip' -dest:auto,computerName="https://azurebakery - test.scm.azurewebsites.net:443/msdeploy.axd",userName="$azurebakery - test", password="Sy4RBrTsrzwj2rpxia4Dc7Lg9R6u7Jt2bZ4RmC6zwXmSkodQ36Rh8B eZx3mQ", authtype="Basic",includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"C:\Temp\Package\CustomerWebsite_Package\ CustomerWebsite.SetParameters.xml" -whatif
- 测试成功后,将
/T改为/Y进行部署,会看到文件复制的详细信息。 - 浏览新网站,内容应能正确加载。若有问题,可能是目标机器的详细信息有误,可从Visual Studio发布网站并查看输出窗口获取目标机器信息。
1.3 部署云包到Azure
云包可通过门户上传到云服务,也可用PowerShell发布。使用PowerShell可实现自动化部署,相关参考可查看 此处 。通过门户上传包的步骤如下:
1. 云服务工具栏的几乎每个选项卡都有“UPLOAD”按钮(用于无当前包的实例)或“UPDATE”按钮(用于有当前包的实例),点击要更新实例的相应按钮。
2. 输入“DEPLOYMENT LABEL”值以识别部署,浏览选择在构建服务器上构建的 .cspkg 包和 .cscfg 配置文件。若系统无法扩展,可勾选“Deploy even if one or more roles contain a single instance”选项,也可在上传前手动修改 .cscfg 文件增加实例数量。
3. 点击对勾开始上传,包会出现在门户中并启动。
1.4 创建数据库脚本
可在包管理器控制台输入以下命令从使用Code First Migrations构建的数据库创建T - SQL脚本:
Update - Database - Script - SourceMigration:$InitialDatabase
此命令会为所有迁移创建T - SQL脚本并在Visual Studio中打开,但数据库种子脚本需单独编写。也可从SQL Server Management Studio手动创建数据库架构脚本,或使用第三方工具如Red Gate的SQL Compare产品。
1.5 上线检查清单
系统上线时需进行以下快速检查:
- 网站和云服务的 Web.config 和 app.config 有正确的发布连接字符串、API密钥等。
- 云服务配置有正确的发布连接字符串、API密钥等。
- 必要时在门户中覆盖网站和云服务的配置设置。
- 初始时将日志级别设置为“Verbose”(特别是新系统和重大更改时),系统稳定后改为“Error”以节省存储空间。
- 正确配置网站和云服务的初始实例计数,并设置自动缩放。
- 配置数据库的正确最大大小。
- 实施数据库备份策略。
- 用最新的迁移脚本更新数据库。
2. 监控实时服务
2.1 监控工具介绍
系统在Azure上运行后,需监控其健康状况。Azure提供了多种监控工具:
- Microsoft Azure门户 :门户的主仪表板可快速查看所有服务的状态,新的预览门户还有显示所有数据中心状态的世界地图。若服务有问题,可快速导航到该服务并获取更多信息。建议每天检查门户以确保服务的总体健康状况。
- Service Management REST API :若已有系统监控工具,可使用此API自动监控服务健康状况。所有请求必须经过身份验证,相关参考可查看 此处 和 此处 。
- Management services alerts :在门户的管理服务工作区中,可针对各种指标设置电子邮件警报,当指标超过可配置的阈值时触发。每个订阅可创建10个警报,对于Azure Bakery系统,需选择最关键的服务进行监控,具体如下表所示:
| 服务类型 | 关键指标 | 阈值 | 说明 |
| — | — | — | — |
| 销售客户网站 | CPU Time | < 900 ms | 实例工作负荷过大时可能有性能问题或需扩展 |
| 销售客户网站 | Http Server Error | < 1 per hour | 捕获5xx HTTP错误,提示内部服务器问题 |
| 销售客户数据库 | Storage | < 19,000 MB | 接近20 GB容量时提醒,可删除数据或增加最大大小限制 |
| 生产订单处理器工作角色 | CPU | < 90% | 实例工作负荷过大时可能有性能问题或需扩展 |
| 生产数据库 | Storage | < 19,000 MB | 接近20 GB容量时提醒,可删除数据或增加最大大小限制 |
| 生产Web API | CPU Time | < 900 ms | 实例工作负荷过大时可能有性能问题或需扩展 |
| 生产Web API | Http Server Error | < 1 per hour | 捕获5xx HTTP错误,提示内部服务器问题 |
| 供应订单处理器工作角色 | CPU | < 90% | 实例工作负荷过大时可能有性能问题或需扩展 |
| 供应表存储 | Success | > 95% | 成功请求低于95%时提醒,便于诊断问题 |
| 供应移动服务 | Uptime (endpoint/region) | > 95% | 要求移动服务处于STANDARD服务层并启用端点监控,解决可用性问题 |
2.2 Azure PowerShell
Azure PowerShell是一个强大的工具,可用于系统管理和维护任务,完整的cmdlet参考可查看 此处 。
2.3 日常服务检查
Azure Bakery系统上线后,每天需进行以下检查:
- 检查门户仪表板是否有服务问题。
- 检查错误日志。
- 检查服务总线队列和主题的死信队列(需编写工具)。
- 检查管理服务操作日志,查看是否有影响服务的实时Azure问题,也可访问 此处 。
2.4 定期服务活动
为确保系统健康,需定期进行以下活动:
- 检查各个监控仪表板,查看是否有高或异常的指标模式,以解决性能问题。
- 检查数据库是否有足够的容量,必要时调整存储。
- 重建数据库表索引(可通过计划任务完成,因为SQL Azure没有SQL代理),SQL Azure数据库默认会自动重新计算统计信息,无需手动操作。
- 存档和清理可能不再需要的数据,以节省存储成本。
- 检查移动服务的推送通知是否能接收所有广播通知,测试用户是否能收到特定用户通知。
- 触摸测试应用程序的用户界面,确保无视觉问题且一切正常,若后端Web服务或存储有问题可能会出现问题。
- 评估服务扩展情况,根据负载情况决定是否需要扩展(增加CPU/内存/磁盘或实例数量)或缩减(减少CPU/内存/磁盘或实例数量)以节省成本。
- 检查是否有未使用的服务,可关闭或删除以节省成本。
2.5 工具列表
以下是一些开发和维护活动中有用的工具:
- Azure门户 :大多数Azure相关活动的主要入口( https://manage.windowsazure.com 和 https://portal.azure.com )。
- Visual Studio :结合Azure SDK,是市场上最强大的Azure开发工具( http://www.visualstudio.com/ )。
- SQL Server Management Studio :对SQL Azure数据库进行管理和维护任务非常有用( https://www.microsoft.com/en - us/server - cloud/products/sql - server/ )。
- Azure PowerShell :用于管理Azure系统的强大工具,当门户或Visual Studio无法完成某些活动时很有用( http://azure.microsoft.com/en - us/documentation/articles/install - configure - powershell/ )。
- Azure AD PowerShell :用于管理Azure AD的PowerShell模块( http://technet.microsoft.com/en - us/library/jj151815.aspx )。
- Red Gate的Windows和SQL Azure工具 :用于管理和维护Azure系统的优秀工具集( http://www.red - gate.com/products/azure - development/ )。
- Red Gate的Developer Bundle :处理SQL数据库非常有用,特别是数据库比较和创建脚本( http://www.red - gate.com/products/sql - development/sql - developer - bundle/ )。
- New Relic :可作为附加组件添加到Azure门户的监控工具,需通过NuGet将代理存储到服务中以提供监控数据到监控仪表板( http://newrelic.com/azure )。
- Zudio :具有浏览器、桌面和移动应用客户端的云存储管理工具( zudio.co )。
2.6 常见问题解答
| 问题 | 答案 |
|---|---|
| 为什么使用构建服务器构建部署包很重要? | 确保包从源代码控制中的干净代码构建,不受开发环境的污染。 |
| 如何在发布时为Web包设置设置? | Web包在构建服务器上构建时,会创建一个ZIP包和一组附带脚本,包括 SetParameters.xml ,其中包含可在部署前配置的设置。 |
| 为什么将某些连接字符串和API密钥放在配置和转换的源代码控制中不是好主意? | 这是一个安全风险,因为任何有权访问源代码控制的人都可以获取生产系统的详细信息,可能会被滥用。 |
| 云服务的配置转换有什么问题? | 云服务默认不支持转换,需要手动添加配置转换文件并编辑项目,或者使用Slow Cheetah工具。 |
| 为什么将网站部署到文件系统或本地发布云服务包可能有帮助? | 可以帮助检查是否包含所有必需的文件,以及配置转换是否生效。 |
| 在Visual Studio Online Team Foundation构建服务器上构建项目而不是解决方案可能会遇到什么问题? | 构建服务器在构建解决方案前会恢复NuGet包,但构建项目时不会。如果没有提交NuGet包二进制文件(不应该这样做),构建将失败。 |
| 在构建服务器上构建云服务包时需要执行什么额外步骤? | 需要将输出位置设置为“AsConfigured”以控制复制到drops的过程,并添加自定义的构建后脚本将 app.publish 文件夹及其内容复制到drops目标。 |
运行 deploy.cmd 脚本时, /T 和 /Y 参数有什么区别? | /T 使用 MSDeploy - whatIf 参数测试部署,显示将发生的情况以及是否可能成功; /Y 实际运行MSDeploy进行部署。 |
| 部署新系统时应如何设置日志级别? | 初始时将其设置为“Verbose”,以便快速诊断问题,系统稳定后改为“Error”,以记录重要错误信息并节省存储空间。 |
3. 总结与展望
3.1 总结
通过前面的介绍,我们详细了解了Azure系统部署与运维的各个方面。从部署包的构建,包括Web包和云包的部署,到数据库脚本的创建,再到上线前的检查清单,每一个环节都至关重要,直接影响着系统的稳定性和可用性。
在监控实时服务方面,Azure提供了多种强大的工具,如Microsoft Azure门户、Service Management REST API、Management services alerts等,帮助我们及时发现和解决系统中出现的问题。同时,Azure PowerShell在系统管理和维护中也发挥着重要作用。
日常服务检查和定期服务活动是确保系统长期稳定运行的关键,通过对系统的全面检查和优化,可以及时发现潜在问题并进行处理,避免问题扩大化。此外,我们还介绍了一系列开发和维护活动中有用的工具,这些工具可以提高开发和运维的效率。
3.2 展望
Azure作为一个不断发展和进化的云计算平台,未来将会有更多的功能和特性推出。随着技术的不断进步,我们需要不断学习和掌握新的知识,以适应Azure的发展变化。
例如,随着人工智能和机器学习技术的发展,Azure可能会提供更多与这些技术相关的服务和工具,帮助开发者更轻松地构建智能应用。同时,随着物联网的兴起,Azure也可能会加强对物联网设备的支持,提供更完善的物联网解决方案。
在运维方面,自动化和智能化将成为未来的发展趋势。通过自动化脚本和工具,可以实现系统的自动部署、监控和维护,减少人工干预,提高运维效率。智能化的监控和分析工具可以帮助我们更准确地预测系统故障,提前采取措施进行预防。
3.3 流程图总结主要流程
下面是一个mermaid格式的流程图,总结了Azure系统部署与运维的主要流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(部署包构建):::process
B --> C{包类型}:::process
C -->|Web包| D(部署Web包到Azure):::process
C -->|云包| E(部署云包到Azure):::process
D --> F(创建数据库脚本):::process
E --> F
F --> G(上线检查清单):::process
G --> H(上线):::process
H --> I(监控实时服务):::process
I --> J(日常服务检查):::process
I --> K(定期服务活动):::process
J --> L([结束]):::startend
K --> L
3.4 回顾关键知识点
为了方便大家回顾,下面以表格形式列出了一些关键知识点:
| 类别 | 关键知识点 |
| — | — |
| 部署包构建 | 构建定义完成后可在drops ZIP文件中获取 .cspkg 和 .cscfg 包 |
| Web包部署 | 在门户创建网站、下载配置文件、修改参数、测试并部署 |
| 云包部署 | 可通过门户或PowerShell发布,门户上传需设置标签和选择包 |
| 数据库脚本创建 | 使用 Update - Database - Script - SourceMigration:$InitialDatabase 命令 |
| 上线检查 | 检查配置文件、日志级别、实例计数等 |
| 监控工具 | Azure门户、REST API、管理服务警报等 |
| 日常检查 | 检查门户、错误日志、队列等 |
| 定期活动 | 检查监控指标、数据库容量、重建索引等 |
| 工具列表 | Azure门户、Visual Studio、Azure PowerShell等 |
3.5 持续学习建议
Azure的发展日新月异,作为开发者和IT专业人员,我们需要不断学习和跟进。以下是一些持续学习的建议:
- 关注Azure官方博客和文档,及时了解最新的功能和特性。
- 参加Azure相关的培训课程和研讨会,与其他开发者交流经验。
- 实践是最好的学习方法,通过实际项目来巩固所学知识。
- 加入Azure开发者社区,参与讨论和分享,获取更多的学习资源和灵感。
总之,Azure系统的部署与运维是一个复杂而又重要的过程,需要我们不断学习和实践,才能更好地掌握和应用。希望本文能为大家提供一些有价值的参考和帮助,让大家在Azure的使用中更加得心应手。
超级会员免费看
266

被折叠的 条评论
为什么被折叠?



