Hyper-V 评估的支持矩阵

本文总结了在使用 Azure Migrate: 发现和评估工具发现并评估 Hyper-V 环境中运行的本地服务器,以迁移到 Azure 时的先决条件和支持要求。 如果要将在 Hyper-V 上运行的服务器迁移到 Azure,请参阅迁移支持矩阵

若要设置发现和评估在 Hyper-V 上运行的服务器,请创建一个项目,并向该项目添加“Azure Migrate: 发现和评估”工具。 添加评估工具后,部署 Azure Migrate 设备。 此设备持续发现本地服务器,并向 Azure 发送服务器元数据和性能数据。 完成发现后,你将发现的服务器收集到组中,然后对组运行评估。

限制

支持 详细信息
评估限制 最多可以在一个项目中发现和评估 35,000 个服务器。
项目限制 可以在一个 Azure 订阅中创建多个项目。 除 Hyper-V 上的服务器外,项目还可以包括 VMware 上的服务器和物理服务器,只要不超过每个项目的评估限制即可。
发现 Azure Migrate 设备最多可发现 5,000 个在 Hyper-V 上运行的服务器。

该设备最多可连接到 300 个 Hyper-V 主机。
评估 最多可以在一个组中添加 35,000 个服务器。

对一个组的单次评估最多可以评估 35,000 个服务器。

详细了解评估。

Hyper-V 主机要求

支持 详细信息
Hyper-V 主机 Hyper-V 主机可以是独立的,也可以部署到群集中。

Hyper-V 主机可以运行 Windows Server 2022、Windows Server 2019、Windows Server 2016 或 Windows Server 2012 R2。 还支持这些操作系统的服务器核心安装。
不能评估运行 Windows Server 2012 的 Hyper-V 主机上的服务器。
权限 你需要 Hyper-V 主机上的管理员权限。
如果你不想分配管理员权限,请创建本地或域用户帐户,并将用户帐户添加到这些组:远程管理用户、Hyper-V 管理员和性能监视器用户。
PowerShell 远程处理 必须在每个 Hyper-V 主机上启用 PowerShell 远程处理
Hyper-V 副本 如果使用 Hyper-V 副本(或者拥有多个具有相同服务器标识符的服务器),并且使用 Azure 迁移和现代化发现原始服务器和复制服务器,则 Azure 迁移和现代化生成的评估可能不准确。

服务器要求

支持 详细信息
操作系统 可以对所有操作系统进行迁移评估。
Integration Services Hyper-V Integration Services 必须在你评估的服务器上运行,才能捕获操作系统信息。
存储 本地磁盘、DAS、JBOD、存储空间、CSV 和 SMB。 支持存储 VHD/VHDX 的 Hyper-V 主机存储。
支持 IDE 和 SCSI 虚拟控制器。

Azure Migrate 设备要求

Azure 迁移和现代化使用 Azure Migrate 设备进行发现和评估。 可以使用 PowerShell 脚本来部署设备。 有关详细信息,请参阅:

端口访问

下表汇总了评估的端口要求。

设备 连接
设备 TCP 端口 3389 上的入站连接,可便于通过远程桌面连接来连接到设备。

端口 44368 上的入站连接,使用 URL https://<appliance-ip-or-name>:44368 远程访问设备管理应用

端口 443 (HTTPS) 上的出站连接,用于将发现和性能元数据发送到 Azure 迁移和现代化。
Hyper-V 主机/群集 WinRM 端口 5985 (HTTP) 上的入站连接,用于使用通用信息模型 (CIM) 会话拉取 Hyper-V 上的服务器的元数据和性能数据。
服务器 Windows 服务器需要在端口 5985 (HTTP) 上进行访问。 Linux 服务器需要在端口 22 (TCP) 上进行访问,以便执行软件清单和无代理依赖项分析。

软件清单需求

除了发现服务器以外,“Azure Migrate:发现和评估”还可以执行服务器上的软件清单。 软件清单提供了使用 Azure 迁移和现代化发现的在 Windows 和 Linux 服务器上运行的应用程序、角色和功能的列表。 它可以帮助确定和计划为本地工作负载定制的迁移路径。

支持 详细信息
支持的服务器 可以在添加到每台 Azure Migrate 设备的 Hyper-V 主机/群集中运行的多达 5,000 台服务器上执行软件清单。
操作系统 所有启用了 Hyper-V 集成服务的 Windows 和 Linux 版本。
服务器要求 Windows 服务器必须启用 PowerShell 远程处理并安装 PowerShell 2.0 或更高版本。

必须在 Windows 服务器上启用 WMI 并可供使用,以收集服务器上安装的角色和功能的详细信息。

Linux 服务器必须启用安全外壳 (SSH) 连接,并确保可以在 Linux 服务器上执行以下命令,以拉取应用程序数据:list、tail、awk、grep、locate、head、sed、ps、print、sort、uniq。 根据 OS 类型和所使用的包管理器类型,以下是一些其他的命令:rpm/snap/dpkg、yum/apt-cache、mssql-server。
服务器访问 可以在软件清单的设备配置管理器中添加多个域和非域 (Windows/Linux) 凭据。

你必须拥有适用于 Windows 服务器的来宾用户帐户和适用于所有 Linux 的标准用户帐户(非 sudo 访问权限)。
端口访问 Windows 服务器需要在端口 5985 (HTTP) 上进行访问。 Linux 服务器需要在端口 22 (TCP) 上进行访问。

如果你使用域凭据,Azure Migrate 设备必须能够连接到以下 TCP 和 UDP 端口:

TCP 135 - RPC 终结点
TCP 389 - LDAP
TCP 636 - LDAP SSL
TCP 445 - SMB
TCP/UDP 88 - Kerberos 身份验证
TCP/UDP 464 - Kerberos 更改操作
发现 软件清单是通过使用设备上添加的服务器凭据直接连接到服务器来执行的。

设备使用 PowerShell 远程处理从 Windows 服务器中以及使用 SSH 连接从 Linux 服务器中收集有关软件清单的信息。

软件清单是无代理的。 不会在服务器上安装任何代理。

SQL Server 实例和数据库发现要求

软件清单会标识 SQL Server 实例。 设备会使用此信息并尝试通过设备配置管理器中提供的 Windows 身份验证或 SQL Server 身份验证凭据连接到相应的 SQL Server 实例。 设备只能连接到与其建立了网络连接的 SQL Server 实例。 软件盘存本身可能无需网络连接。

连接设备后,其会收集 SQL Server 实例和数据库的配置及性能数据。 SQL Server 配置数据每 24 小时更新一次。 每 30 秒捕获一次性能数据。

支持 详细信息
支持的服务器 仅支持在 VMware、Microsoft Hyper-V 和物理/裸机环境中运行 SQL Server 的服务器以及 Azure Web Services、Google Cloud Platform 等其他公有云的基础结构即服务 (IaaS) 服务器。

最多可以从单个设备发现 750 个 SQL Server 实例或 15,000 个 SQL 数据库,以较少者为准。 建议确保将设备的发现范围限定为发现少于 600 台运行 SQL 的服务器,以避免扩展问题。
Windows 服务器 支持 Windows Server 2008 及更高版本。
Linux 服务器 当前不支持。
身份验证机制 同时支持 Windows 和 SQL Server 身份验证。 可以在设备配置管理器中提供这两种身份验证类型的凭据。
SQL Server 访问 若要发现 SQL Server 实例和数据库,Windows 或 SQL Server 帐户必须是 sysadmin 服务器角色的成员,或者对每个 SQL Server 实例具有这些权限
SQL Server 版本 支持 SQL Server 2008 及更高版本。
SQL Server 版本 支持 Enterprise、Standard、Developer 和 Express 版本。
支持的 SQL 配置 支持发现独立、高可用性和防灾 SQL 部署。 还支持发现由 Always On 故障转移群集实例和 Always On 可用性组提供支持的高可用性和灾难恢复 SQL 部署。
支持的 SQL 服务 仅支持 SQL Server 数据库引擎。

不支持 SQL Server Reporting Services、SQL Server Integration Services 和 SQL Server Analysis Services 的发现。

注意

默认情况下,Azure 迁移和现代化使用最安全的方式连接到 SQL 实例。 也就是说,Azure 迁移和现代化通过将 TrustServerCertificate 属性设置为 true 来加密 Azure 迁移设备与源 SQL Server 实例之间的通信。 此外,传输层使用安全套接字层来加密通道并绕过证书链来验证信任。 因此,必须将设备服务器设置为信任证书的根颁发机构。

但是,可以通过在设备上选择“编辑 SQL Server 连接属性”来修改连接设置。 了解详细信息以了解要选择的内容。

为 SQL Server 发现配置自定义登录名

使用以下示例脚本创建登录名并为其预配必要的权限。

Windows 身份验证

-- Create a login to run the assessment
use master;
DECLARE @SID NVARCHAR(MAX) = N'';
CREATE LOGIN [MYDOMAIN\MYACCOUNT] FROM WINDOWS;
SELECT @SID = N'0x'+CONVERT(NVARCHAR, sid, 2) FROM sys.syslogins where name = 'MYDOMAIN\MYACCOUNT'
IF (ISNULL(@SID,'') != '')
  PRINT N'Created login [MYDOMAIN\MYACCOUNT] with SID = ' + @SID
ELSE
  PRINT N'Login creation failed'
GO    

-- Create a user in every database other than tempdb, model, and secondary AG databases (with connection_type = ALL) and provide minimal read-only permissions.
USE master;
EXECUTE sp_MSforeachdb '
  USE [?];
  IF (''?'' NOT IN (''tempdb'',''model''))
  BEGIN
    DECLARE @is_secondary_replica BIT = 0;
    IF CAST(PARSENAME(CAST(SERVERPROPERTY(''ProductVersion'') AS VARCHAR), 4) AS INT) >= 11
    BEGIN
      DECLARE @innersql NVARCHAR(MAX);
      SET @innersql = N''
        SELECT @is_secondary_replica = IIF(
          EXISTS (
              SELECT 1
              FROM sys.availability_replicas a
              INNER JOIN sys.dm_hadr_database_replica_states b
              ON a.replica_id = b.replica_id
              WHERE b.is_local = 1
              AND b.is_primary_replica = 0
              AND a.secondary_role_allow_connections = 2
              AND b.database_id = DB_ID()
          ), 1, 0
        );
      '';
      EXEC sp_executesql @innersql, N''@is_secondary_replica BIT OUTPUT'', @is_secondary_replica OUTPUT;
    END
    IF (@is_secondary_replica = 0)
    BEGIN
      CREATE USER [MYDOMAIN\MYACCOUNT] FOR LOGIN [MYDOMAIN\MYACCOUNT];
      GRANT SELECT ON sys.sql_expression_dependencies TO [MYDOMAIN\MYACCOUNT];
      GRANT VIEW DATABASE STATE TO [MYDOMAIN\MYACCOUNT];
    END
  END'
GO

-- Provide server level read-only permissions
use master;
GRANT SELECT ON sys.sql_expression_dependencies TO [MYDOMAIN\MYACCOUNT];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [MYDOMAIN\MYACCOUNT];
GRANT EXECUTE ON OBJECT::sys.xp_instance_regread TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW DATABASE STATE TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW SERVER STATE TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW ANY DEFINITION TO [MYDOMAIN\MYACCOUNT];
GO

-- Provide msdb specific permissions
use msdb;
GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [MYDOMAIN\MYACCOUNT];
GO

-- Clean up
--use master;
-- EXECUTE sp_MSforeachdb 'USE [?]; DROP USER [MYDOMAIN\MYACCOUNT]'
-- DROP LOGIN [MYDOMAIN\MYACCOUNT];
--GO

SQL Server 身份验证

--- Create a login to run the assessment
use master;
-- NOTE: SQL instances that host replicas of Always On availability groups must use the same SID for the SQL login.
 -- After the account is created in one of the members, copy the SID output from the script and include this value
 -- when executing against the remaining replicas.
 -- When the SID needs to be specified, add the value to the @SID variable definition below.
DECLARE @SID NVARCHAR(MAX) = N'';
IF (@SID = N'')
BEGIN
 CREATE LOGIN [evaluator]
     WITH PASSWORD = '<provide a strong password>'
END
ELSE
BEGIN
 DECLARE @SQLString NVARCHAR(500) = 'CREATE LOGIN [evaluator]
   WITH PASSWORD = ''<provide a strong password>''
   , SID = ' + @SID
 EXEC SP_EXECUTESQL @SQLString
END
SELECT @SID = N'0x'+CONVERT(NVARCHAR(100), sid, 2) FROM sys.syslogins where name = 'evaluator'
IF (ISNULL(@SID,'') != '')
 PRINT N'Created login [evaluator] with SID = '''+ @SID +'''. If this instance hosts any Always On Availability Group replica, use this SID value when executing the script against the instances hosting the other replicas'
ELSE
 PRINT N'Login creation failed'
GO

-- Create a user in every database other than tempdb, model, and secondary AG databases (with connection_type = ALL) and provide minimal read-only permissions.
USE master;
EXECUTE sp_MSforeachdb '
 USE [?];
 IF (''?'' NOT IN (''tempdb'',''model''))
 BEGIN
   DECLARE @is_secondary_replica BIT = 0;
   IF CAST(PARSENAME(CAST(SERVERPROPERTY(''ProductVersion'') AS VARCHAR), 4) AS INT) >= 11
   BEGIN
     DECLARE @innersql NVARCHAR(MAX);
     SET @innersql = N''
       SELECT @is_secondary_replica = IIF(
         EXISTS (
           SELECT 1
           FROM sys.availability_replicas a
           INNER JOIN sys.dm_hadr_database_replica_states b
             ON a.replica_id = b.replica_id
           WHERE b.is_local = 1
             AND b.is_primary_replica = 0
             AND a.secondary_role_allow_connections = 2
             AND b.database_id = DB_ID()
         ), 1, 0
       );
     '';
     EXEC sp_executesql @innersql, N''@is_secondary_replica BIT OUTPUT'', @is_secondary_replica OUTPUT;
   END

   IF (@is_secondary_replica = 0)
   BEGIN
       CREATE USER [evaluator] FOR LOGIN [evaluator];
       GRANT SELECT ON sys.sql_expression_dependencies TO [evaluator];
       GRANT VIEW DATABASE STATE TO [evaluator];
   END
 END'
GO

-- Provide server level read-only permissions
USE master;
GRANT SELECT ON sys.sql_expression_dependencies TO [evaluator];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [evaluator];
GRANT EXECUTE ON OBJECT::sys.xp_instance_regread TO [evaluator];
GRANT VIEW DATABASE STATE TO [evaluator];
GRANT VIEW SERVER STATE TO [evaluator];
GRANT VIEW ANY DEFINITION TO [evaluator];
GO

-- Provide msdb specific permissions
USE msdb;
GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [evaluator];
GO

-- Clean up
--use master;
-- EXECUTE sp_MSforeachdb 'USE [?]; BEGIN TRY DROP USER [evaluator] END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH;'
-- BEGIN TRY DROP LOGIN [evaluator] END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH;
--GO

Web 应用发现要求

软件清单识别发现的服务器上存在的 Web 服务器角色。 如果发现某个服务器安装了 Web 服务器,Azure 迁移和现代化会在该服务器上发现 Web 应用。

你可以在设备中同时添加域凭据和非域凭据。 请确保使用的帐户在源服务器上具有本地管理员权限。 Azure 迁移和现代化自动将凭据映射到相应的服务器,因此你不必手动映射凭据。 这些凭据从不发送到 Azure,而是保留在源环境中运行的设备上。

连接设备后,它会收集 ASP.NET Web 应用(IIS Web 服务器)和 Java Web 应用(Tomcat 服务器)的配置数据。 Web 应用配置数据每 24 小时更新一次。

支持 ASP.NET Web 应用 Java Web 应用
Stack VMware、Hyper-V 和物理服务器。 VMware、Hyper-V 和物理服务器。
Windows 服务器 支持 Windows Server 2008 R2 及更高版本。 不支持。
Linux 服务器 不支持。 Ubuntu Linux 16.04/18.04/20.04、Debian 7/8 和 Red Hat Enterprise Linux 5/6/7。
Web 服务器版本 IIS 7.5 及更高版本。 Tomcat 8 或更高版本。
所需的特权 本地管理员。 root 或 sudo 用户。

注意

数据始终在传输过程中静态加密。

依赖关系分析要求(无代理)

依赖关系分析可帮助你分析已发现的服务器之间的依赖关系。 你可以使用 Azure Migrate 项目中的映射视图轻松地可视化依赖关系。 你可以使用依赖关系对相关服务器进行分组,方便迁移到 Azure。 下表总结了设置无代理依赖关系分析所需满足的要求。

支持 详细信息
支持的服务器 最多可以为 1,000 个服务器(跨多个 Hyper-V 主机/群集,由每个设备发现)启用无代理依赖项分析。
操作系统 所有启用了 Hyper-V 集成服务的 Windows 和 Linux 版本。
服务器要求 Windows 服务器必须启用 PowerShell 远程处理并安装 PowerShell 2.0 或更高版本。

Linux 服务器必须启用 SSH 连接并确保可以在 Linux 服务器上执行以下命令:touch、chmod、cat、ps、grep、echo、sha256sum、awk、netstat、ls、sudo、dpkg、rpm、sed、getcap、which、date。
Windows 服务器访问权限 来宾用户帐户
Linux 服务器访问权限 有权执行 ls 和 netstat 命令的 sudo 用户帐户。 如果要提供一个 sudo 用户帐户,请确保启用 NOPASSWD,使帐户能够运行所需的命令,且不会在每次调用 sudo 命令时都提示用户输入密码。

也可创建一个对 /bin/netstat 和 /bin/ls 文件具有 CAP_DAC_READ_SEARCH 和 CAP_SYS_PTRACE 权限的用户帐户,这两个权限使用以下命令进行设置:
sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/ls
sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/netstat
端口访问 Windows 服务器需要在端口 5985 (HTTP) 上进行访问。 Linux 服务器需要在端口 22 (TCP) 上进行访问。
发现方法 无代理依赖项分析是通过使用设备上添加的服务器凭据直接连接到服务器来执行的。

设备使用 PowerShell 远程处理从 Windows 服务器中以及使用 SSH 连接从 Linux 服务器中收集依赖项信息。

服务器上没有安装用于拉取依赖项数据的代理。

后续步骤

准备发现 Hyper-V 上运行的服务器