繁体   English   中英

Azure SQL 故障转移组,宽限期是什么意思?

[英]Azure SQL failover group, what does the grace period mean?

我目前正在阅读: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auto-failover-group ,我很难理解自动故障转移策略:

默认情况下,故障转移组配置有自动故障转移策略。 SQL 数据库服务在检测到故障并且宽限期已过后触发故障转移。 由于影响的规模,系统必须验证 SQL 数据库服务的内置高可用性基础结构无法缓解中断。 如果要从应用程序控制故障转移工作流,可以关闭自动故障转移。

在 ARM 模板中定义故障转移组时:

{
  "condition": "[equals(parameters('redundancyId'), 'pri')]",
  "type": "Microsoft.Sql/servers",
  "kind": "v12.0",
  "name": "[variables('sqlServerPrimaryName')]",
  "apiVersion": "2014-04-01-preview",
  "location": "[parameters('location')]",
  "properties": {
    "administratorLogin": "[parameters('sqlServerPrimaryAdminUsername')]",
    "administratorLoginPassword": "[parameters('sqlServerPrimaryAdminPassword')]",
    "version": "12.0"
  },
  "resources": [
    {
      "condition": "[equals(parameters('redundancyId'), 'pri')]",
      "apiVersion": "2015-05-01-preview",
      "type": "failoverGroups",
      "name": "[variables('sqlFailoverGroupName')]",
      "properties": {
        "serverName": "[variables('sqlServerPrimaryName')]",
        "partnerServers": [
          {
            "id": "[resourceId('Microsoft.Sql/servers/', variables('sqlServerSecondaryName'))]"
          }
        ],
        "readWriteEndpoint": {
          "failoverPolicy": "Automatic",
          "failoverWithDataLossGracePeriodMinutes": 60
        },
        "readOnlyEndpoint": {
          "failoverPolicy": "Disabled"
        },
        "databases": [
          "[resourceId('Microsoft.Sql/servers/databases', variables('sqlServerPrimaryName'), variables('sqlDatabaseName'))]"
        ]
      },
      "dependsOn": [
        "[variables('sqlServerPrimaryName')]",
        "[resourceId('Microsoft.Sql/servers/databases', variables('sqlServerPrimaryName'), variables('sqlDatabaseName'))]",
        "[resourceId('Microsoft.Sql/servers', variables('sqlServerSecondaryName'))]"
      ]
    },
    {
      "condition": "[equals(parameters('redundancyId'), 'pri')]",
      "name": "[variables('sqlDatabaseName')]",
      "type": "databases",
      "apiVersion": "2014-04-01-preview",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[variables('sqlServerPrimaryName')]"
      ],
      "properties": {
        "edition": "[variables('sqlDatabaseEdition')]",
        "requestedServiceObjectiveName": "[variables('sqlDatabaseServiceObjective')]"
      }
    }
  ]
},
{
  "condition": "[equals(parameters('redundancyId'), 'pri')]",
  "type": "Microsoft.Sql/servers",
  "kind": "v12.0",
  "name": "[variables('sqlServerSecondaryName')]",
  "apiVersion": "2014-04-01-preview",
  "location": "[variables('sqlServerSecondaryRegion')]",
  "properties": {
    "administratorLogin": "[parameters('sqlServerSecondaryAdminUsername')]",
    "administratorLoginPassword": "[parameters('sqlServerSecondaryAdminPassword')]",
    "version": "12.0"
  }
}

我像这样指定 readWriteEndpoint:

    "readWriteEndpoint": {
      "failoverPolicy": "Automatic",
      "failoverWithDataLossGracePeriodMinutes": 60
    }

将 failoverWithDataLossGracePeriodMinutes 设置为 60 分钟。

这是什么意思? 我在任何地方都找不到明确的答案。 是否意味着:

  1. 当我的主要数据库所在的主要区域发生中断时,读/写端点指向主要数据库,并且仅在 60 分钟后才故障转移到我的辅助数据库,后者成为新的主要数据库。 60分钟,读取我的数据唯一的办法就是直接使用readOnlyEndpoint? 或者
  2. 我的读/写端点立即打开,如果他们能以某种方式检测到没有要同步的数据

我认为这归结为:如果我检测到中断,如果我不关心数据丢失,但我希望能够写入我的数据库,我是否必须手动进行故障转移?

额外问题:存在宽限期的原因是因为主节点上可能存在未同步的数据,如果辅助节点成为新的主节点(如果我手动切换),这些数据将被覆盖或丢弃?

抱歉,我不能只回答一个问题。 我已经阅读了很多,我真的需要知道这一点。

这是什么意思?

这意味着:

“当我的主要数据库所在的主要区域发生中断时,读/写端点指向主要数据库,并且仅在 60 分钟后它才会故障转移到我的辅助数据库,后者成为新的主要数据库。”

即使数据同步,它也无法自动进行故障转移,因为主区域中的高可用性解决方案正在尝试做同样的事情,并且几乎所有时间您的主数据库都会在主区域中快速恢复。 执行自动跨区域故障转移会干扰这一点。

“存在宽限期的原因是因为主节点上可能存在未同步的数据,如果辅助节点成为新的主节点,这些数据将被覆盖或丢弃”

并留出时间让数据库在主要区域内进行故障转移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM