Azure SQL Database cho phép doanh nghiệp tập trung các tài nguyên cơ sở dữ liệu vào một nhóm chung để sử dụng, giúp tiết kiệm chi phí và tăng khả năng mở rộng cho các ứng dụng trong tổ chức. Ngoài ra, elastic pool cũng cung cấp chức năng giám sát, quản lý tài nguyên để đảm bảo sự ổn định và hiệu suất của các cơ sở dữ liệu.
Azure SQL Database elastic pool là một tính năng của dịch vụ cơ sở dữ liệu quản lý của Microsoft Azure, cho phép người dùng tổ chức, chia sẻ tài nguyên bộ nhớ và CPU giữa nhiều cơ sở dữ liệu trong cùng một nhóm. Doanh nghiệp ứng dụng Azure SQL Database elastic pool để quản lý số lượng lớn các cơ sở dữ liệu một cách hiệu quả và tối ưu hóa sử dụng tài nguyên.
Bài viết này nhằm cung cấp cách định cấu hình nhóm chuyển đổi tự động cho cơ sở dữ liệu SQL Azure và kiểm tra chuyển đổi dự phòng bằng cổng Azure.
Mục lục
Người dùng phải có một tài khoản Azure chính chủ. Nếu chưa có, hãy tạo ngay cho mình một tài khoản miễn phí.
Trong bước này, người dùng sẽ được hướng dẫn cách tạo một nhóm tài nguyên, máy chủ SQL, cơ sở dữ liệu đơn và quy tắc tường lửa IP.
Người dùng có thể tạo cơ sở dữ liệu bằng cách sử dụng cổng thông tin Azura, Azure CLI hoặc PowerShell trong Azure Cloud Shell.
Để tạo một nhóm tài nguyên, máy chủ và cơ sở dữ liệu duy nhất trong cổng Azure:
Hãy ghi lại thông tin, mật khẩu của quản trị viên để đăng nhập vào máy chủ và cơ sở dữ liệu của máy chủ. Nếu quên thông tin đăng nhập hoặc mật khẩu, người dùng có thể lấy tên đăng nhập hoặc đặt lại mật khẩu trên trang SQL server sau khi tạo cơ sở dữ liệu. Để mở trang chủ SQL, hãy chọn tên máy chủ trên trang Overview.
>>> Xem thêm: Khung kiến trúc Microsoft Azure: Tối ưu hóa chi phí và khối lượng công việc
Ở nội dung này, người dùng sẽ biết cách tạo ra các cơ sở dữ liệu.
Để có thể tạo một nhóm tài nguyên, máy chủ và cơ sở dữ liệu duy nhất bằng Windows PowerShell, người dùng cần phải cài đặt mô-đun Azure PowerShell.
Để chạy mẫu mã sau trong Azure Cloud Shell, hãy chọn Try it (dùng thử) trong thanh tiêu đề mã. Tiếp đó, hãy chọn Copy và dán mẫu mã vào cửa sổ Cloud Shell. Theo đó, hãy thay thế <Subscription ID> bằng ID đăng ký Azure. Còn đối với $startIp và $endIp, hãy thay thế 0.0.0.0 bằng địa chỉ IP công cộng của máy tính mà người dùng đang sử dụng.
Ngoài ra, người dùng cũng có thể sử dụng Azure Cloud Shell từ cổng Azure bằng cách chọn biểu tượng Cloud Shell trên thanh trên cùng.
Nếu là lần đầu tiên sử dụng Cloud Shell từ cổng thông tin, hãy chọn PowerShell trên hộp thoại Welcome.
Mã PowerShell sau đây được dùng để tạo một nhóm tài nguyên Azure, máy chủ, cơ sở dữ liệu đơn và quy tắc tường lửa để truy cập vào máy chủ.
# Set variables for your server and database
$subscriptionId = '<SubscriptionID>'
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "West US"
$adminLogin = "azureuser"
$password = "Azure1234567"
$serverName = "mysqlserver-$(Get-Random)"
$databaseName = "mySampleDatabase"
# The ip address range that you want to allow to access your server
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"
# Show randomized variables
Write-host "Resource group name is" $resourceGroupName
Write-host "Server name is" $serverName
# Connect to Azure
Connect-AzAccount
# Set subscription ID
Set-AzContext -SubscriptionId $subscriptionId
# Create a resource group
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location -Tag @{Owner="SQLDB-Samples"}
$resourceGroup
# Create a server with a system wide unique server name
Write-host "Creating primary server..."
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $adminLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
$server
# Create a server firewall rule that allows access from the specified IP range
Write-host "Configuring firewall for primary server..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
$serverFirewallRule
# Create General Purpose standard-series (Gen5) database with 2 vCores
Write-host "Creating a gen5 2 vCore database..."
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Edition GeneralPurpose `
-VCore 2 `
-ComputeGeneration Gen5 `
-MinimumCapacity 2 `
-SampleName "AdventureWorksLT"
$database
Để sử dụng Azure CLI tạo một nhóm tài nguyên, máy chủ, cơ sở dữ liệu đơn và quy tắc tường lửa IP, trước tiên người dùng cần tạo cho mình một tài khoản Azura.
Người dùng có thể sử dụng môi trường Bash trong Azure Cloud Shell để quản lý tài nguyên Azure. Để biết thêm thông tin, hãy xem Quickstart for Bash in Azure Cloud Shell.
Nếu muốn chạy các lệnh tham khảo CLI trên máy tính cục bộ, hãy cài đặt Azure CLI. Nếu người dùng đang làm việc trên hệ điều hành Windows hoặc macOS, hãy xác định xem Azure CLI có thể chạy trong một container Docker hay không. Để biết thêm thông tin, hãy xem How to run the Azure CLI in a Docker container.
Azure Cloud Shell là một chương trình tương tác miễn phí mà người dùng có thể sử dụng để chạy các bước trong bài viết này. Nó có các công cụ Azure thông dụng đã được cài đặt sẵn và cấu hình để sử dụng với tài khoản của người dùng.
Để mở Cloud Shell, hãy chọn Try it ở góc phải phía trên của khối mã. Người dùng cũng có thể khởi động Cloud Shell trên một tab trình duyệt riêng bằng cách truy cập vào https://shell.azure.com.
Khi Cloud Shell được mở, hãy xác nhận rằng Bash được chọn cho môi trường của máy chủ. Các phiên sau sẽ sử dụng Azure CLI trong môi trường Bash. Chọn Copy để sao chép các khối mã, dán chúng vào Cloud Shell và nhấn Enter để chạy.
Cloud Shell được xác thực tự động bằng tài khoản được đăng nhập ban đầu. Nếu người dùng muốn đăng nhập bằng một đăng ký khác, hãy sử dụng đoạn mã sau và thay thế <Subscription ID> bằng ID đăng ký Azure của mình.
Còn nếu người dùng hiện tại chưa có tài khoản Azure, hãy tạo tài khoản Azure miễn phí trước khi bắt đầu.
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
Người dùng cần phải đặt các giá trị tham số để sử dụng trong quá trình tạo cơ sở dữ liệu và các tài nguyên cần thiết. Tên máy chủ phải là duy nhất trên tất cả các tài nguyên trong Azure, do đó hàm $RANDOM được sử dụng để tạo tên máy chủ.
Thay thế <0.0.0.0> bằng phạm vi địa chỉ IP để phù hợp với môi trường cụ thể từng người dùng riêng biệt. Sử dụng địa chỉ IP công cộng của máy tính người dùng đang hoạt động để giới hạn quyền truy cập vào máy chủ chỉ cho địa chỉ IP.
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="East US"
resourceGroup="msdocs-azuresql-rg-$randomIdentifier"
tag="create-and-configure-database"
server="msdocs-azuresql-server-$randomIdentifier"
database="msdocsazuresqldb$randomIdentifier"
login="azureuser"
password="Pa$$w0rD-$randomIdentifier"
# Specify appropriate IP address values for your environment
# to limit access to the SQL Database server
startIp=0.0.0.0
endIp=0.0.0.0
echo "Using resource group $resourceGroup with login: $login, password: $password..."
Sử dụng đoạn mã dưới đây để tạo một nhóm tài nguyên với lệnh “az group create”. Một nhóm tài nguyên Azure là một thùng chứa logic, trong đó các tài nguyên Azure được triển khai và quản lý.
echo "Creating $resourceGroup in $location..."
az group create --name $resourceGroup --location "$location" --tags $tag
Sử dụng đoạn mã dưới đây để tạo một máy chủ với lệnh “az sql server create”:
echo "Creating $server in $location..."
az sql server create --name $server --resource-group $resourceGroup --location "$location" --admin-user $login --admin-password $password
Sử dụng đoạn mã dưới đây để tạo một quy tắc tường lửa với lệnh “az sql server firewall-rule create”:
echo "Configuring firewall..."
az sql server firewall-rule create --resource-group $resourceGroup --server $server -n AllowYourIp --start-ip-address $startIp --end-ip-address $endIp
Sử dụng đoạn mã dưới đây để tạo một cơ sở dữ liệu với lệnh “az sql db create”:
echo "Creating $database on $server..."
az sql db create --resource-group $resourceGroup --server $server --name $database --sample-name AdventureWorksLT --edition GeneralPurpose --family Gen5 --capacity 2 --zone-redundant true # zone redundancy is only supported on premium and business critical service tiers
Trong bước này, người dùng sẽ được hướng dẫn tạo một elastic pool và thêm cơ sở dữ liệu của mình vào nó.
Hãy làm theo các bước hướng dẫn dưới đây để tạo elastic pool bằng cổng thông tin Azure.
Sử dụng đoạn mã dưới đây để tạo elastic pools và máy chủ phụ bằng PowerShell:
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
$poolName = "myElasticPool"
$databaseName = "mySampleDatabase"
$drLocation = "West US"
$drServerName = "mysqlsecondary-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# The ip address range that you want to allow to access your server
# Leaving at 0.0.0.0 will prevent outside-of-azure connections
# $startIp = "0.0.0.0"
# $endIp = "0.0.0.0"
# Show randomized variables
Write-host "DR Server name is" $drServerName
Write-host "Failover group name is" $failoverGroupName
# Create primary standard-series (Gen5) elastic 2 vCore pool
Write-host "Creating elastic pool..."
$elasticPool = New-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-ElasticPoolName $poolName `
-Edition "GeneralPurpose" `
-vCore 2 `
-ComputeGeneration Gen5
$elasticPool
# Add single db into elastic pool
Write-host "Creating elastic pool..."
$addDatabase = Set-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-ElasticPoolName $poolName
$addDatabase
>>> Xem thêm: 11 lợi ích của điện toán đám mây dành cho doanh nghiệp
Dưới đây là hướng dẫn chi tiết cách thêm cơ sở dữ liệu vào elastic pool bằng cách sử dụng Azure CLI.
Để tạo elastic pool, người dùng cần thiết lập các giá trị tham số bổ sung sau đây.
pool="msdocs-azuresql-pool-$randomIdentifier"
Hãy sử dụng lệnh “az sql elastic-pool create” để tạo elastic pool.
echo "Creating $pool on $server..."
az sql elastic-pool create --name $pool --resource-group $resourceGroup --server $server
Hãy sử dụng lệnh “az sql db update” để thêm một cơ sở dữ liệu vào elastic pool.
echo "Adding $database to $pool..."
az sql db update --elastic-pool $pool --name $database --resource-group $resourceGroup --server $server
Trong bước này, người dùng sẽ được hướng dẫn tạo một nhóm chuyển đổi dự phòng giữa một máy chủ hiện có và một máy chủ mới ở một khu vực khác. Sau đó, thêm elastic pool vào nhóm chuyển đổi dự phòng.
Sử dụng đoạn mã dưới đây để tạo nhóm chuyển đổi dự phòng bằng PowerShell.
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Create a secondary server in the failover region
Write-host "Creating a secondary server in the failover region..."
New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-Location $drLocation `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
Write-host "Secondary server =" $drServerName
# Create a server firewall rule that allows access from the specified IP range
Write-host "Configuring firewall for secondary server..."
New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
Write-host "Firewall configured"
# Create secondary standard-series (Gen5) elastic 2 vCore pool
Write-host "Creating secondary elastic pool..."
$elasticPool = New-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-ElasticPoolName $poolName `
-Edition "GeneralPurpose" `
-vCore 2 `
-ComputeGeneration Gen5
$elasticPool
# Create a failover group between the servers
Write-host "Creating failover group..."
New-AzSqlDatabaseFailoverGroup `
ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-PartnerServerName $drServerName `
FailoverGroupName $failoverGroupName `
FailoverPolicy Automatic `
-GracePeriodWithDataLossHours 2
Write-host "Failover group created successfully."
# Add elastic pool to the failover group
Write-host "Enumerating databases in elastic pool...."
$FailoverGroup = Get-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
$databases = Get-AzSqlElasticPoolDatabase `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-ElasticPoolName $poolName
Write-host "Adding databases to failover group..."
$failoverGroup = $failoverGroup | Add-AzSqlDatabaseToFailoverGroup `
-Database $databases
$failoverGroup
Trong bước này, người dùng sẽ được hướng dẫn cách sử dụng Azure CLI để tạo máy chủ phụ, nhóm chuyển đổi dự phòng, elastic pool và thêm cơ sở dữ liệu vào nhóm chuyển đổi dự phòng.
Sử dụng đoạn mã dưới đây để thiết lập các giá trị tham số bổ sung trong nhóm chuyển đổi dự phòng:
failoverGroup="msdocs-azuresql-failover-group-$randomIdentifier"
failoverLocation="Central US"
secondaryServer="msdocs-azuresql-secondary-server-$randomIdentifier"
Để tạo máy chủ phụ, người dùng hãy sử dụng lệnh “az sql server create” như sau:
echo "Creating $secondaryServer in $failoverLocation..."
az sql server create --name $secondaryServer --resource-group $resourceGroup --location "$failoverLocation" --admin-user $login --admin-password $password
Để tạo elastic pool trên máy chủ phụ, người dùng hãy sử dụng lệnh “az sql elastic-pool create” như sau:
echo "Creating $pool on $secondaryServer..."
az sql elastic-pool create --name $pool --resource-group $resourceGroup --server $secondaryServer
Để tạo nhóm chuyển đổi dự phòng, người dùng hãy sử dụng lệnh “az sql failover-group create” như sau:
echo "Creating $failoverGroup between $server and $secondaryServer..."
az sql failover-group create --name $failoverGroup --partner-server $secondaryServer --resource-group $resourceGroup --server $server --failover-policy Automatic --grace-period 2
databaseId=$(az sql elastic-pool list-dbs --name $pool --resource-group $resourceGroup --server $server --query [0].name -o json | tr -d '"')
Lệnh “az sql failover-group update” dưới đây sẽ giúp người dùng có thể thêm cơ sở dữ liệu vào các nhóm chuyển đổi dự phòng như sau:
echo "Adding $database to $failoverGroup..."
az sql failover-group update --name $failoverGroup --add-db $databaseId --resource-group $resourceGroup --server $server
Trong bước này, người dùng sẽ được hướng dẫn thực hiện việc chuyển đổi dự phòng từ máy chủ chính sang máy chủ phụ, sau đó chuyển đổi trở lại máy chủ chính.
Để thử nghiệm chuyển đổi dự phòng bằng giao diện Azure Portal, người dùng hãy lần lượt làm theo các bước sau:
Để thử nghiệm chuyển đổi dự phòng bằng PowerShell, hãy sử dụng đoạn mã sau:
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
# $failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Check role of secondary replica
Write-host "Confirming the secondary server is secondary...."
(Get-AzSqlDatabaseFailoverGroup `
-FailoverGroupName $failoverGroupName `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName).ReplicationRole
# Failover to secondary server
Write-host "Failing over failover group to the secondary..."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FailoverGroupName $failoverGroupName
Write-host "Failover group failed over to" $drServerName
Để chuyển đổi dự phòng sang máy chủ phụ, hãy sử dụng đoạn mã dưới đây:
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
# $failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Check role of secondary replica
Write-host "Confirming the secondary server is now primary"
(Get-AzSqlDatabaseFailoverGroup `
-FailoverGroupName $failoverGroupName `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName).ReplicationRole
# Revert failover to primary server
Write-host "Failing over failover group to the primary...."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
Write-host "Failover group failed over to" $serverName
Trong bước này, người dùng sẽ được hướng dẫn cách sử dụng Azure CLI để thử nghiệm chuyển đổi dự phòng.
Hãy sử dụng lệnh “az sql failover-group show” để kiểm tra các vai trò sẵn có trong máy chủ:
echo "Confirming the role of each server in the failover group..." # note ReplicationRole property
az sql failover-group show --name $failoverGroup --resource-group $resourceGroup --server $server
Hãy sử dụng lệnh “az sql failover-group set-primary” để chuyển đổi dự phòng sang máy phụ:
echo "Failing over to $secondaryServer..."
az sql failover-group set-primary --name $failoverGroup --resource-group $resourceGroup --server $secondaryServer
echo "Confirming role of $secondaryServer is now primary..." # note ReplicationRole property
az sql failover-group show --name $failoverGroup --resource-group $resourceGroup --server $server
Lệnh “az sql failover-group set-primary” sẽ giúp người dùng có thể chuyển đổi dự phòng trở lại máy chủ chính:
echo "Failing back to $server...."
az sql failover-group set-primary --name $failoverGroup --resource-group $resourceGroup --server $server
Lưu ý, thao tác xóa nhóm tài nguyên là vĩnh viễn và không thể hoàn tác. Người dùng hãy đảm bảo rằng quản trị viên đã sao lưu và lưu trữ toàn bộ dữ liệu quan trọng trước khi thực hiện xóa.
Nếu muốn xóa một nhóm tài nguyên trong Azure Portal, người dùng có thể làm theo các bước sau:
Dọn dẹp tài nguyên trong máy chủ bằng cách sử dụng PowerShell như sau:
# Set variables for your server and database
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# Clean up resources by removing the resource group
Write-host "Removing resource group..."
Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Write-host "Resource group removed =" $resourceGroupName
Sử dụng lệnh sau để xóa nhóm tài nguyên bằng cách sử dụng lệnh az group delete:
echo "Cleaning up resources by removing the resource group..."
az group delete --name $resourceGroup -y
Những bài viết liên quan:
Qua những thông tin trên, mong rằng tất cả cá nhân trong tổ chức đều có thể biết cách thêm Azure SQL Database elastic pool vào nhóm chuyển đổi dự phòng.
Nếu doanh nghiệp cần tư vấn về các dịch vụ của Microsoft Cloud, hãy liên hệ với FPT Smart Cloud để được hỗ trợ sớm nhất.