65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Terraform 中配置高可用性 SQL

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2020年5月25日

CPOL
viewsIcon

6373

大家好,这周是一个简短的帖子,但正如我们讨论可用性、混沌工程等话题时,我看到的最常见的数据元素之一就是 SQL 和 Azure SQL。SQL 是一种普遍且常见的数据存储,随处可见。

鉴于此,许多公司都在实施基础设施即代码来管理配置漂移并为他们的应用程序提供更高的弹性。这绝对是一个很好的方法。 有几个人和我讨论过一个不太明确的问题……如何在 Terraform 中配置异地复制。

实际上,这已经内置到 Terraform azure rm 提供程序中,可以使用以下代码实现

provider "azurerm" {
    subscription_id = ""
    features {
    key_vault {
      purge_soft_delete_on_destroy = true
    }
  }
}

data "azurerm_client_config" "current" {}

resource "azurerm_resource_group" "rg" {
  name     = "sqlpoc"
  location = "{region}"
}

resource "azurerm_sql_server" "primary" {
  name                         = "kmack-sql-primary"
  resource_group_name          = azurerm_resource_group.rg.name
  location                     = azurerm_resource_group.rg.location
  version                      = "12.0"
  administrator_login          = "sqladmin"
  administrator_login_password = "{password}"
}

resource "azurerm_sql_server" "secondary" {
  name                         = "kmack-sql-secondary"
  resource_group_name          = azurerm_resource_group.rg.name
  location                     = "usgovarizona"
  version                      = "12.0"
  administrator_login          = "sqladmin"
  administrator_login_password = "{password}"
}

resource "azurerm_sql_database" "db1" {
  name                = "kmackdb1"
  resource_group_name = azurerm_sql_server.primary.resource_group_name
  location            = azurerm_sql_server.primary.location
  server_name         = azurerm_sql_server.primary.name
}

resource "azurerm_sql_failover_group" "example" {
  name                = "sqlpoc-failover-group"
  resource_group_name = azurerm_sql_server.primary.resource_group_name
  server_name         = azurerm_sql_server.primary.name
  databases           = [azurerm_sql_database.db1.id]
  partner_servers {
    id = azurerm_sql_server.secondary.id
  }

  read_write_endpoint_failover_policy {
    mode          = "Automatic"
    grace_minutes = 60
  }
}

上面的 TF 代码将部署两个配置了异地复制的数据库服务器。关键部分如下

resource "azurerm_sql_failover_group" "example" {
  name                = "sqlpoc-failover-group"
  resource_group_name = azurerm_sql_server.primary.resource_group_name
  server_name         = azurerm_sql_server.primary.name
  databases           = [azurerm_sql_database.db1.id]
  partner_servers {
    id = azurerm_sql_server.secondary.id
  }

  read_write_endpoint_failover_policy {
    mode          = "Automatic"
    grace_minutes = 60
  }
}

重要的元素是“server_name”和“partner_servers”,这建立了数据复制的连接。然后,“read_write_endpoint_failover_policy”设置了故障转移策略。

© . All rights reserved.