Người dùng có thể tạo một nhóm chuyển đổi dự phòng (Auto-failover groups) để sao chép thông tin từ nhiều cơ sở dữ liệu khác nhau. Quá trình này luôn đảm bảo tính khả dụng của dữ liệu trong trường hợp một cơ sở dữ liệu bị lỗi hoặc ngừng hoạt động.
Auto-failover groups là một lớp trừu tượng được khai báo cho phép người dùng nhóm nhiều cơ sở dữ liệu lại với nhau để sao chép địa lý. Bài viết dưới đây sẽ cung cấp các phương pháp để định cấu hình, kiểm tra chuyển đổi dự phòng và thêm cơ sở dữ liệu Azure SQL bằng cách sử dụng Azure Portal, PowerShell hoặc Azure CLI.
Mục lục
Để hoàn thành hướng dẫn trong bài viết này, hãy đảm bảo người dùng đã có:
Nội dung phần này tập trung hướng dẫn người dùng cách tạo máy chủ SQL và cơ sở dữ liệu bằng Azure portal, Azure CLI và PowerShell trong Azure Cloud Shell. Khi tạo cơ sở dữ liệu, người dùng cũng sẽ thiết lập các quy tắc tường lửa để bảo vệ máy chủ khỏi sự đe dọa từ các địa chỉ IP không được phép truy cập.
Để tạo một một cơ sở dữ liệu đơn trong Azure Portal, người dùng cần thực hiện các bước sau:
Chọn OK.
Ghi lại tên đăng nhập và mật khẩu của quản trị viên máy chủ để đăng nhập vào máy chủ và cơ sở dữ liệu sau khi tạo xong.
Sau khi thực hiện bất kỳ thay đổi nào, hãy chọn Apply.
Ở phần này, người dùng sẽ biết cách khởi tạo các cơ sở dữ liệu một cách nhanh chóng, chỉ với công cụ trong PowerShell.
Để chạy đoạn mã mẫu sau trong Azure Cloud Shell, hãy chọn Try it trong thanh tiêu đề mã. Khi Cloud Shell mở ra, chọn Copy và dán đoạn mã mẫu vào cửa sổ Cloud Shell.
Trong mã, người dùng hãy thay thế <Subscription ID> bằng ID Đăng ký Azure của mình. Đố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.
Làm theo hướng dẫn trên màn hình để đăng nhập vào Azure và chạy mã.
Người dùng cũng có thể sử dụng Azure Cloud Shell từ cổng thông tin Azure, bằng cách chọn biểu tượng Cloud Shell ở thanh trên cùng.
Nếu đây là lần đầu tiên sử dụng Cloud Shell từ cổng thông tin Azure, hãy chọn PowerShell trên hộp thoại Welcome.
Sử dụng đoạn mã PowerShell sau để tạo một cơ sở dữ liệu đơn lẻ:
# 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
>>> Xem thêm: Hướng dẫn sửa lỗi Outlook yêu cầu nhập password liên tục
Những khối lệnh Azure CLI dưới đây được dùng để tạo các tài nguyên như nhóm tài nguyên, máy chủ SQL, cơ sở dữ liệu và quy tắc tường lửa IP. Trong quá trình tạo ra chúng, người dùng cần ghi lại tên của nhóm tài nguyên và máy chủ đã được tạo ra để sau này có thể dễ dàng quản lý.
Nếu người dùng hiện chưa có tài khoản Azure, hãy tạo một tài khoản miễn phí trên Azure trước khi bắt đầu thực hiện các lệnh.
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ó chứa các công cụ Azure thông dụng đã được cài đặt và cấu hình sẵn để 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 chúng.
Khi đăng nhập vào Azure Cloud Shell, tài khoản người dùng sử dụng ban đầu sẽ được xác thực tự động. Nếu muốn sử dụng một đăng ký khác, hãy thay thế <Subscription ID> bằng ID đăng ký Azure cá nhân trong đoạn mã sau. Nếu người dùng chưa có đăng ký Azure, hãy tạo một tài khoản miễn phí Azure trước khi bắt đầu.
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
Để tạo cơ sở dữ liệu và các tài nguyên cần thiết khác, người dùng cần phải lập một vài giá trị tham số. Trong đó, tên máy chủ phải là duy nhất trên toàn bộ Azure, do đó ta sử dụng hàm <$RANDOM> để khởi tạo.
Thay thế <0.0.0.0> bằng phạm vi địa chỉ IP phù hợp với môi trường cá nhân người dùng. Sử dụng địa chỉ IP công khai của máy tính người dùng đang sử dụng để giới hạn truy cập vào máy chủ.
# 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ã này để tạo một nhóm tài nguyên bằng lệnh az group create:
echo "Creating $resourceGroup in $location..."
az group create --name $resourceGroup --location "$location" --tags $tag
Sử dụng đoạn mã dưới đây để khởi tạo máy chủ bằng 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ã sau để cấu hình quy tắc tường lửa bằng 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 cơ sở dữ liệu bằng 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
Ở bước này, người dùng sẽ được hướng dẫn cách tạo một kết nối chuyển đổi tự động giữa hai máy chủ SQL ở hai khu vực khác nhau, nhằm đảm bảo tính khả dụng của cơ sở dữ liệu trong trường hợp máy chủ chính gặp sự cố.
Sử dụng đoạn mã mẫu dưới đây để tạo nhóm chuyển đổi dự phòng và thêm cơ sở dữ liệu Azure SQL người dùng vào đó bằng PowerShell:
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$adminLogin = "azureuser"
$password = "password"+(New-Guid).Guid
$serverName = "mysqlserver-$(Get-Random)"
$databaseName = "mySampleDatabase"
$drLocation = "East 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 to your DB)
$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 a secondary server in the failover region
Write-host "Creating a secondary server in the failover region..."
$drServer = New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-Location $drLocation `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
$drServer
# Create a server firewall rule that allows access from the specified IP range
Write-host "Configuring firewall for secondary server..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
$serverFirewallRule
# Create a failover group between the servers
$failovergroup = Write-host "Creating a failover group between the primary and secondary server..."
New-AzSqlDatabaseFailoverGroup `
–ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-PartnerServerName $drServerName `
–FailoverGroupName $failoverGroupName `
–FailoverPolicy Automatic `
-GracePeriodWithDataLossHours 2
$failovergroup
# Add the database to the failover group
Write-host "Adding the database to the failover group..."
Get-AzSqlDatabase `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName | `
Add-AzSqlDatabaseToFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
Write-host "Successfully added the database to the failover group..."
Ở nội dung này, người dùng sẽ được hướng dẫn tạo nhóm chuyển đổi dự phòng và thêm cơ sở dữ liệu cá nhân vào đó bằng Azure CLI.
Đặt các giá trị tham số bổ sung này để tạo nhóm chuyển đổi dự phòng, bên cạnh các giá trị đã được định nghĩa trong đoạn mã trước đó.
failoverGroup="msdocs-azuresql-failover-group-$randomIdentifier"
failoverLocation="Central US"
secondaryServer="msdocs-azuresql-secondary-server-$randomIdentifier"
Sử dụng đoạn mã mẫu dưới đây để tạo máy chủ phụ bằng lệnh az sql server create:
echo "Creating $secondaryServer in $failoverLocation..."
az sql server create --name $secondaryServer --resource-group $resourceGroup --location "$failoverLocation" --admin-user $login --admin-password $password
Sử dụng đoạn mã mẫu dưới đây để tạo nhóm chuyển đổi dự phòng bằng lệnh az sql failover-group create:
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 --add-db $database
>>> Xem thêm: Power Apps và những điều cần biết – Phần 1
Trong bước này, người dùng sẽ thực hiện việc chuyển đổi hoạt động từ máy chủ chính sang máy chủ phụ trong nhóm chuyển đổi dự phòng của mình.
Các đoạn mã mẫu dưới đây sẽ giúp người dùng kiểm tra việc chuyển đổi sang dự phòng bằng PowerShell.
# Set variables
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$drServerName = "mysqlserver-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Check role of secondary replica
Write-host "Confirming the secondary replica is secondary...."
(Get-AzSqlDatabaseFailoverGroup `
-FailoverGroupName $failoverGroupName `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName).ReplicationRole
# Set variables
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$drServerName = "mysqlserver-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Failover to secondary server
Write-host "Failing over failover group to the secondary..."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FailoverGroupName $failoverGroupName
Write-host "Failed failover group successfully to" $drServerName
# Set variables
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$drServerName = "mysqlserver-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Failover to secondary server
Write-host "Failing over failover group to the secondary..."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FailoverGroupName $failoverGroupName `
-AllowDataLoss
Write-host "Failed failover group successfully to" $drServerName
# Set variables
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$serverName = "mysqlserver-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Revert failover to primary server
Write-host "Failing over failover group to the primary...."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
Write-host "Failed failover group successfully back to" $serverName
Các đoạn mã mẫu dưới đây sẽ giúp người dùng kiểm tra việc chuyển đổi sang dự phòng bằng Azure CLI.
Sử dụng lệnh az sql failover-group show để xác minh vai trò máy chủ với:
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
Sử dụng lệnh az sql failover-group set-primary để chuyển đổi sang máy chủ phụ. Sử dụng lệnh az sql failover-group show để xác minh việc chuyển đổi thành công:
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
Sử dụng lệnh az sql failover-group set-primary để khôi phục chuyển đổi dự phòng về máy chủ chính:
echo "Failing back to $server...."
az sql failover-group set-primary --name $failoverGroup --resource-group $resourceGroup --server $server
Nội dung này sẽ hướng dẫn người dùng cách xóa tất cả các tài nguyên, bao gồm cả máy chủ và cơ sở dữ liệu.
Người dùng có thể sử dụng đoạn mã dưới đây để xóa các tài nguyên đã tạo:
# Set variables
$resourceGroupName = "myResourceGroup-$(Get-Random)"
# Remove the resource group
Write-host "Removing resource group..."
Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Write-host "Resource group removed =" $resourceGroupName
Sau khi hoàn thành công việc, người dùng có thể sử dụng lệnh az group delete để xóa nhóm tài nguyên đã tạo trước đó:
echo "Cleaning up resources by removing the resource group..."
az group delete --name $resourceGroup -y
Những bài viết liên quan:
Mong rằng sau khi đã biết cách thêm cơ sở dữ liệu Azure SQL vào một nhóm chuyển đổi dự phòng trong Azure, người dùng đã có thể tự tăng cường khả năng bảo vệ dữ liệu của mình.
Tham khảo thêm các dịch vụ hiện có của FPT Cloud qua: