物理服务器发现与评估的支持矩阵

本文总结了在使用 Azure Migrate: 发现与评估工具评估要迁移到 Azure 的物理服务器时的先决条件和支持要求。 若要将物理服务器迁移到 Azure,请参阅迁移支持矩阵

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

限制

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

在一次评估中最多可以评估 35000 台服务器。

详细了解评估。

物理服务器要求

  • 物理服务器部署:物理服务器可以是独立服务器,也可以部署到群集中。

  • 服务器类型:在本地或 Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Xen 等其他云上运行的裸机服务器、虚拟化服务器。

    注意

    目前,Azure Migrate 不支持发现半虚拟化服务器。

  • 操作系统: 可以对所有 Windows 和 Linux 操作系统进行迁移评估。

Windows 服务器的权限

  • 对于 Windows 服务器,针对已加入域的服务器使用域帐户,针对未加入域的服务器使用本地帐户。
  • 对于物理发现,请以下层格式(域\用户名)指定用户名。不支持 UPN 格式 (username@domain.com)。

可以通过以下两种方式之一创建用户帐户。

选项 1

在服务器上创建具有管理员权限的帐户。 使用此帐户可以:

  • 通过通用信息模型 (CIM) 连接拉取配置和性能数据。
  • 执行软件清单(发现已安装的应用程序)。
  • 使用 PowerShell 远程处理来启用无代理依赖关系分析。

注意

如果要在 Windows 服务器上执行软件清单(发现已安装的应用程序)并启用无代理依赖关系分析,建议使用“选项 1”。

方法 2

  • 将用户帐户添加到以下组:远程管理用户、性能监视器用户和性能日志用户。

  • 如果远程管理用户组不存在,请将以下用户帐户添加到 WinRMRemoteWMIUsers_ 组。

  • 该帐户需要拥有这些权限才能让设备创建与服务器的 CIM 连接,并从此处列出的 Windows Management Instrumentation (WMI) 类中拉取所需的配置和性能元数据。

  • 在某些情况下,将帐户添加到这些组可能不会从 WMI 类返回所需的数据。 该帐户可能会被用户帐户控制 (UAC) 筛选。 要绕过 UAC 筛选,用户帐户需在目标服务器上的 CIMV2 命名空间和子命名空间中拥有所需的权限。 若要启用所需的权限,请参阅排查 Azure Migrate 设备问题

    注意

    对于 Windows Server 2008 和 2008 R2,请确保在服务器上安装了 Windows Management Framework 3.0。

要在 Windows 服务器上发现 SQL Server 数据库,需要同时支持 Windows 和 SQL Server 身份验证。 可以在设备配置管理器中提供这两种身份验证类型的凭据。 Azure Migrate 需要 Windows 用户帐户,该帐户属于其中一个 sysadmin 服务器角色。

Linux Server 的权限

对于 Linux 服务器,根据要执行的功能,可以通过以下两种方式之一创建用户帐户。

选项 1

  • 在要发现的服务器上需有一个 sudo 用户帐户。 使用此帐户可以:

    • 拉取配置和性能元数据。
    • 执行软件清单(发现已安装的应用程序)。
    • 使用安全外壳 (SSH) 连接性来启用无代理依赖关系分析。
  • 需要在 /usr/bin/bash 上启用 sudo 访问权限才能执行 Linux 服务器元数据中列出的命令。 除了这些命令,若要执行无代理依赖项分析,用户帐户还需要具有执行 ls 和 netstat 命令的权限。

  • 确保已启用“NOPASSWD”,使帐户能够运行所需的命令,且不会在每次调用 sudo 命令时都提示用户输入密码。

  • Azure 迁移和现代化支持使用拥有 sudo 访问权限的帐户在以下 Linux OS 发行版中进行发现:

    操作系统 版本
    Red Hat Enterprise Linux 5.1、5.3、5.11、6.x、7.x、8.x、9.x
    Ubuntu 12.04、14.04、16.04、18.04、20.04、22.04
    Oracle Linux 6.1、6.7、6.8、6.9、7.2、7.3、7.4、7.5、7.6、7.7、7.8、7.9、8、8.1、8.3、8.5
    SUSE Linux 10、11 SP4、12 SP1、12 SP2、12 SP3、12 SP4、15 SP2、15 SP3
    Debian 7、8、9、10、11
    Amazon Linux 2.0.2021
    CoreOS 容器 2345.3.0

    注意

    如果要在 Linux 服务器上执行软件清单(发现已安装的应用程序)并启用无代理依赖关系分析,建议使用“选项 1”。

方法 2

  • 如果无法为根帐户或用户帐户提供 sudo 访问权限,则可以将设备服务器上 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AzureAppliance 注册表中的 isSudo 注册表项设置为值 0。 使用以下命令为非根帐户提供所需的功能:

    命令 用途
    setcap CAP_DAC_READ_SEARCH+eip /usr/sbin/fdisk
    setcap CAP_DAC_READ_SEARCH+eip /sbin/fdisk (if /usr/sbin/fdisk is not present)
    收集磁盘配置数据。
    setcap "cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_setuid,
    cap_setpcap,cap_net_bind_service,cap_net_admin,cap_sys_chroot,cap_sys_admin,
    cap_sys_resource,cap_audit_control,cap_setfcap=+eip" /sbin/lvm
    收集磁盘性能数据。
    setcap CAP_DAC_READ_SEARCH+eip /usr/sbin/dmidecode 收集 BIOS 序列号。
    chmod a+r /sys/class/dmi/id/product_uuid 收集 BIOS GUID。
  • 若要在服务器上执行无代理依赖项分析,请确保也使用以下命令对 /bin/netstat 和 /bin/ls 文件设置了所需的权限:
    sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/ls
    sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/netstat

Azure Migrate 设备要求

Azure Migrate 使用 Azure Migrate 设备进行发现和评估。 适用于物理服务器的设备可在虚拟机 (VM) 或物理服务器上运行。

端口访问

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

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

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

端口 443 (HTTPS) 上的出站连接,用于将发现和性能元数据发送到 Azure 迁移和现代化。
物理服务器 Windows: WinRM 端口 5985 (HTTP) 上的入站连接,用于从 Windows 服务器上拉取配置和性能元数据。

Linux:端口 22 (TCP) 上的入站连接,用于从 Linux 服务器上拉取配置和性能元数据。

软件清单需求

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

支持 详细信息
支持的服务器 可以对从每个 Azure Migrate 设备中发现的最多 1,000 台服务器执行软件清单。
操作系统 支持运行满足服务器要求并具有所需访问权限的所有 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 服务器访问权限 适用于 Windows 服务器的来宾用户帐户。
Linux 服务器访问权限 适用于所有 Linux 服务器的标准用户帐户(非 sudo 访问权限)。
端口访问 Windows 服务器需要在端口 5985 (HTTP) 上进行访问。 Linux 服务器需要在端口 22 (TCP) 上进行访问。
发现 软件清单是通过使用设备上添加的服务器凭据直接连接到服务器来执行的。

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

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

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

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

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

支持 详细信息
支持的服务器 仅支持在 VMware、Microsoft Hyper-V 和物理/裸机环境中运行 SQL Server 的服务器以及 AWS、GCP 等其他公有云的基础结构即服务 (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 Migrate 使用最安全的方式连接到 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 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 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 个服务器启用无代理依赖关系分析。
操作系统 支持运行满足服务器要求并具有所需访问权限的所有 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 usr/bin/ls
sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep usr/bin/netstat
端口访问 Windows 服务器需要在端口 5985 (HTTP) 上进行访问。 Linux 服务器需要在端口 22 (TCP) 上进行访问。
发现方法 无代理依赖项分析是通过使用设备上添加的服务器凭据直接连接到服务器来执行的。

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

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

后续步骤

准备发现物理服务器。