Azure 上的 Java 应用和数据现代化第二部分:数据迁移





5.00/5 (1投票)
如何设置 Azure PostgreSQL 数据库,迁移应用数据,并确保应用程序仍然正常运行
本系列文章的第一篇设置了 PetClinic 应用,现在是时候迁移应用程序的数据了。数据迁移始终需要检查源和接收服务器的功能细节。Microsoft 提供了其 MySQL 和 PostgreSQL 平台的详细概述。这些产品运行原始数据库,并包装了您需要的所有附加服务,以实现可靠、安全的操作。
首先,检查目标服务支持哪些版本。确保支持从旧版本迁移到新版本。然后,记下应用程序的带宽和延迟要求。这些始终是重要的考虑因素,尤其是在从本地服务器迁移到云服务器时。最后,一旦您知道可以将数据迁移到支持的版本并以可接受的速度提供数据,请确保数据的安全性。
Microsoft 的 Azure Database for PostgreSQL版本策略显示,版本 10 到 14 与各种服务器配置兼容。自 2017 年推出 10 版本以来,大多数当前的实现都可以迁移到兼容版本。
Microsoft 还提供了延迟速度测试到各个数据中心。请注意,从本地托管的应用程序到云数据服务的延迟将始终高于内部数据服务。因此,您应该在迁移之前和之后监控数据使用情况,以寻找性能优化机会。
通常,数据库调优侧重于操作时间,但在云服务上运行时,网络性能可能是首要关注的问题。频繁、高带宽的应用程序不断与服务器交互,可能需要缓存数据并减少调用次数,或者依赖发布/订阅推送通知来接收新创建或更新的数据。审查应用程序需求,以确定应用程序是否可以等待几秒钟来通知用户新消息可用,而不是立即通知用户。有时,应用程序之所以表现如此,是因为它们拥有资源,而不是因为有特定于该性能的要求。
应用程序和数据进入云后,延迟的重要性会逐渐减弱。Microsoft 发布了内部的“区域间”延迟报告以提供帮助。通过将数据库部署在特定区域及其服务的应用程序旁边来减少延迟的能力,可以提供改进应用程序性能的机会。
一旦数据可用,安全性就变得至关重要。Microsoft 关于 Flexible Server 可用安全方法的文档指出,支持角色审计。因此,您可以查看与每个角色相关的权限。服务器会在“静态”状态下加密存储的数据,因此您不必担心有人通过复制数据库文件来捕获数据。
防火墙规则决定了请求是否能到达服务器,因此请考虑它应该访问哪些 IP 地址范围。稍后创建服务器时,您会遇到防火墙选择。在本教程中,应用程序可以直接访问数据库,因此您需要确保应用程序是安全的,因为任何有权访问应用程序的人都将有权访问数据库。
既然您已经审查了产品并确定 Azure Database for PostgreSQL 是您应用程序的合适选择,请使用以下迁移过程:
- 从本地数据库导出数据
- 创建 Azure 数据库
- 在云中重新创建数据库
- 将应用程序连接到新数据库
您将使用 Azure 门户创建数据库,使用 Postgres 命令行客户端配置数据库和迁移数据,以及使用 IntelliJ 运行应用程序。
从本地数据库导出数据
假设您已经运行了示例应用程序并且本地 Postgres 服务器正在运行,您可以打开一个 MS-DOS 命令窗口并执行以下命令来生成数据库备份:
C:\Projects\PetClinic\postgresDb> pg_dump --inserts --create petclinic > local_backup.pg
创建 Azure 数据库
通过登录 Azure 门户并单击仪表板上的“创建资源”来开始创建云数据库。键入“Postgr”以开始搜索,然后单击“Azure Database for PostgreSQL”。
然后单击“创建”。
选择“灵活服务器”选项,然后单击“创建”。
然后,通过选择(或创建)资源组来开始配置数据库服务器。
在“服务器详细信息”部分设置“服务器名称”字段和“服务器工作负载类型”。Spring Boot PetClinic 演示项目很小,因此在本教程中选择“开发”选项。
在“计算 + 存储”部分,您会找到以下设置。此服务器是最小的可用服务器,也是此项目所需的全部。如果您要实施更大的项目,请单击“配置服务器”以查看完整的选项范围(2 到 64 个核心,最多 16384 GB 存储,18000 IOPS)。选择可用的最新 PostgreSQL 版本。没有可用性偏好,因此请接受“可用性区域”和“启用高可用性”的默认设置。
向下滚动,设置“管理员用户名”并将“密码”设置为“P@ssword”(这不是一个安全的选择,但稍后在本教程中会用到)。
在窗格底部,单击“下一步”>“网络”。
默认情况下,服务器是不可访问的。服务器的主机名是公开的,并且对主机的所有请求都将进入 Azure 网络。这种设置在常规操作中会是一个问题。不过,默认的安全设置会在您配置它时保护数据库,阻止所有请求,直到您设置规则来允许它们。
为了帮助配置防火墙,Microsoft 提供了一个允许 Azure 服务与数据库交互的选项。这是启用 Azure Functions 连接数据库的便捷方法,但您需要确保这些服务在允许之前是安全的。在本教程中启用它,因为这是演示数据。
Microsoft 还提供了打开防火墙以允许访问本地计算机的链接,以及提供完全公共访问的链接。启用从本地设备的访问,但阻止公共访问。您可以添加额外的防火墙以允许访问特定服务。
最后,单击“审查 + 创建”进入下一页,您可以在其中审查设置。
单击“创建”来创建服务器。部署需要几分钟时间,在此期间,您将看到“正在部署”消息,如下面的屏幕截图所示。
在云中重新创建数据库
现在您可以将数据迁移到在线服务器了。打开资源的“概述”页面,找到服务器的主机名(您已经知道管理员登录名)。
使用交互式 Postgres 客户端连接到服务器并执行以下命令。密码是“P@ssword”。
C:\Projects\PetClinic\postgresDb> psql -h pet-clinic-demo.postgres.database.azure.com
-U petClinicAdmin -d postgres
Password for user petClinicAdmin:
psql (14.1, server 13.4)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=> create user petclinic password 'petclinic';
CREATE ROLE
postgres=> GRANT petclinic TO "petClinicAdmin" WITH ADMIN OPTION;
GRANT ROLE
postgres=> create database petclinic owner petclinic;
CREATE DATABASE
postgres=>
然后,使用以下命令将数据迁移到数据库:
C:\Projects\PetClinic\postgresDb> psql -h pet-clinic-demo.postgres.database.azure.com
-U petclinic -f local_backup.pg petclinic
将应用程序连接到新数据库
最后,您需要将应用程序连接到数据库。在 IntelliJ 中,打开 src/main/resources 文件夹下的 `application-postgres.properties` 文件,并更改服务器 URL 以指向新服务器。
spring.datasource.url=${POSTGRES_URL:jdbc:postgresql://pet-clinic-demo.postgres.database.azure.com/petclinic}
然后,重新启动应用程序并打开应用程序主页。
验证新服务器的连接
您可以从启动日志中验证应用程序是否使用了新服务器。
监控数据库
Azure 提供了监控数据库流量的工具。您可以使用这些工具来验证应用程序是否连接到新数据库,并获得本文开头讨论的调优指标。Microsoft 在此处描述了可用的指标和监控平台,如果您不熟悉的话。您可以构建仪表板,提供一组资源的概述或单个资源的详细指标,如本屏幕截图所示。
后续步骤
至此,数据库已完全迁移,应用程序已准备好使用新的数据服务。
本文概述了数据迁移过程的所有方面,从版本控制、连接和网络安全等初始考虑因素到监控等操作考虑因素。还有很多需要学习的内容,但现在您已经拥有一个正在运行的数据库,并且可以关注指向涵盖平台所有功能的相关文章的链接。
继续阅读下一篇文章,将应用程序迁移到 Azure App Services,迈出云迁移的下一步。
如果您想与 Microsoft Java on Azure 团队讨论特定的 Java 应用迁移场景,请填写此问卷,届时将有代表与您联系。