启用异地复制

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

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

先决条件

创建并列出副本

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

注意

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

  1. 在应用程序配置存储中的“设置”下,选择“异地复制”。

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

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

  3. 选择“创建”。

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

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

删除副本

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

  1. 在应用程序配置存储中的“设置”下,选择“异地复制”。

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

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

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

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

自动副本发现

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

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

编辑对 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

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

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

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

假设有一个使用 Azure 应用程序配置的应用程序,可将其更新为以下示例代码,以利用故障转移功能。 你可以提供进行 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

如果应用程序配置提供程序遵守以下条件,则可能会发生故障转移。

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

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

使用副本进行负载均衡

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

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

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

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

    // Other changes to options
});

注意

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

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

后续步骤