启用异地复制

本文介绍Azure App Configuration存储的复制。 你将了解如何在配置存储中创建、使用和删除副本。

若要详细了解异地复制的概念,请参阅 Azure 应用配置中的 Geo-Replication

先决条件

创建并列出副本

若要在门户中创建配置存储的副本,请按照以下步骤操作。

注意事项

不支持为配置静态 IP 的专用端点的 App Configuration 存储创建副本。 如果更喜欢具有静态 IP 配置的专用终结点,则必须在将任何专用终结点添加到存储之前创建副本。

  1. 在您的 App Configuration 商店的 Settings设置中,点击选择 Geo-replication

  2. 在“副本”下,选择“创建”。 在下拉列表中选择新副本的位置,然后为副本分配名称。 此副本名必须是唯一的。

    突出显示“地理位置复制”按钮以及“创建”副本按钮的屏幕截图。

  3. 选择“创建”。

  4. 现在您应该会在“副本”下看到列出的新副本。 检查副本的状态是否为“成功”,指示其创建成功。

    已为配置存储创建的副本列表的屏幕截图。

删除副本

若要在门户中删除副本,请按照以下步骤操作。

  1. 在应用配置存储中,在 设置 下,选择 地理复制

  2. 在“副本”下,选择您要删除的副本右侧的“...”选项。 从下拉菜单选择“删除”。

    显示所选副本右侧三个点的屏幕截图,其中显示“删除”选项。

  3. 验证要删除的副本的名称,然后选择“确定”进行确认。

  4. 完成该过程后,检查副本列表以确认已删除正确的副本。

自动副本发现

App Configuration提供程序可以自动发现给定App Configuration终结点中的任何副本,并尝试连接到它们。 使用此功能可以受益于异地复制,而无需更改代码或重新部署应用程序。 这意味着,即使在部署了应用程序之后,也可以启用异地复制或添加额外的副本。

自动副本发现默认处于启用状态,但你可以参考以下示例代码将其禁用(不推荐)。

编辑对 AddAzureAppConfiguration 方法的调用,该方法常出现在应用程序的 program.cs 文件中。

configurationBuilder.AddAzureAppConfiguration(options =>
{
    // Disable automatic replica discovery
    options.ReplicaDiscoveryEnabled = false;

    // Other changes to options
});

注意事项

如果使用以下任何软件包的 7.1.0 或更高版本,可以获得自动副本发现支持

  • Microsoft.Extensions.Configuration.AzureAppConfiguration
  • Microsoft.Azure.AppConfiguration.AspNetCore
  • Microsoft.Azure.AppConfiguration.Functions.Worker

使用副本进行缩放和故障转移

创建的每个副本都有其专用终结点。 如果应用程序驻留在多个地理位置中,则可以在一个位置更新应用程序的每个部署,以连接到离该位置更近的副本,这有助于最大程度地减少应用程序与App Configuration之间的网络延迟。 由于每个副本都有其单独的请求配额,因此此设置还有助于应用程序在发展为多区域分布式服务时实现可伸缩性。

启用异地复制后,如果一个副本不可访问,可以将应用程序故障转移到另一个副本以提高可靠性。 App Configuration提供程序通过用户提供的副本和/或其他自动发现的副本提供内置故障转移支持。 可以按照最优先到最不优先的终结点这种顺序提供副本终结点列表。 如果当前终结点不可访问,提供程序会切换到优先级较低的终结点,但会不时尝试连接到优先级较高的终结点。 如果所有用户提供的副本都不可访问,将会随机选择和使用自动发现的副本。 当更优先的终结点可用时,提供程序将会切换到该终结点以供将来请求。

假设你有一个使用Azure App Configuration的应用程序,则可以将其更新为以下示例代码,以利用故障转移功能。 可以提供用于 Microsoft Entra 身份验证的终结点列表,或者提供用于基于密钥的访问身份验证的连接字符串列表。

编辑对 AddAzureAppConfiguration 方法的调用,该方法常出现在应用程序的 program.cs 文件中。

连接 Microsoft Entra ID

configurationBuilder.AddAzureAppConfiguration(options =>
{
    // Provide an ordered list of replica endpoints
    var endpoints = new Uri[] {
        new Uri("<first-replica-endpoint>"),
        new Uri("<second-replica-endpoint>") };

    // Connect to replica endpoints using Microsoft Entra authentication
    options.Connect(endpoints, new DefaultAzureCredential());

    // Other changes to options
});

使用连接字符串连接

configurationBuilder.AddAzureAppConfiguration(options =>
{
    // Provide an ordered list of replica connection strings
    var connectionStrings = new string[] {
        Environment.GetEnvironmentVariable("FIRST_REPLICA_CONNECTION_STRING"),
        Environment.GetEnvironmentVariable("SECOND_REPLICA_CONNECTION_STRING") };

    // Connect to replica endpoints using connection strings
    options.Connect(connectionStrings);

    // Other changes to options
});

注意事项

如果使用的是以下任何软件包的 6.0.0 或更高版本,则可获得故障转移支持。

  • Microsoft.Extensions.Configuration.AzureAppConfiguration
  • Microsoft.Azure.AppConfiguration.AspNetCore
  • Microsoft.Azure.AppConfiguration.Functions.Worker

如果 App Configuration 提供程序观察到以下情况,则可能会发生故障切换。

  • 接收服务不可用状态(HTTP 状态代码 500 或以上)的响应。
  • 网络连接问题的经验。
  • 请求受到限制(HTTP 状态代码 429)。

对于身份验证失败等客户端错误,不会发生故障转移。

使用副本进行负载均衡

默认情况下,应用程序始终将请求发送到你提供的最优先的终结点,但发生故障转移时除外。 然而,除了故障转移之外,副本还可以用于均衡请求负载。 通过随着时间的推移主动跨任何可用副本分发请求,可以避免单个副本的请求配额耗尽,并提高应用程序的整体可伸缩性。

App Configuration提供程序为副本之间的负载均衡提供内置支持,无论是在代码中提供还是自动发现。 可以使用以下代码示例在应用程序中启用此功能(推荐)。

编辑对 AddAzureAppConfiguration 方法的调用,该方法常出现在应用程序的 program.cs 文件中。

configurationBuilder.AddAzureAppConfiguration(options =>
{
    // Enable load balancing
    options.LoadBalancingEnabled = true;

    // Other changes to options
});

注意事项

如果使用以下任何软件包的 8.0.0 版本或更高版本,则提供负载均衡支持

  • Microsoft.Extensions.Configuration.AzureAppConfiguration
  • Microsoft.Azure.AppConfiguration.AspNetCore
  • Microsoft.Azure.AppConfiguration.Functions.Worker

后续步骤