Windows Azure High Availability İçin Database Mirroring
Bu makalemizde Windows Azure High Availability için Database Mirroring işleminin nasıl yapıldığını göreceğiz. Windows Azure portal kullanımı yerine Windows Azure PowerShell komutları ile işlemlerimizi yapacağız.
-
IT altyapımızı oluşturabilmemiz için değişken serileri tanımlamamız gerekmektedir. Örnek değişken serilerini aşağıda bulabilirsiniz.
Not: Windows Azure PowerShell için gereken .publishsettings dosyasının nasıl import edileceğini önceki makalelerimizde bahsetmiştim.
$location = “West US”
$affinityGroupName = “MshowtoAG”
$affinityGroupDescription = “MSHOWTO SQL HADR Affinity Group”
$affinityGroupLabel = “IaaS BI Affinity Group”
$workingDir = “C:\script\”
$networkConfigPath = $workingDir + “NetworkConfig.xml”
$virtualNetworkName = “MshowtoNET”
$storageAccountName = “<uniquestorageaccountname>”
$storageAccountLabel = ” MSHOWTO SQL HADR Storage Account”
$storageAccountContainer = “https://” + $storageAccountName + “.blob.core.windows.net/vhds/”
$serviceName = “<uniqueservicename>”
$sqlImageName = (Get-AzureVMImage | where {$_.Label -like “SQL Server 2012 SP1 Enterprise*”} | sort PublishedDate -Descending)[0].ImageName
$availabilitySetName = ” MSHOWTOHADR”
$subnetName = “Back”
$domainUser = “Administrator”
$sql1ServerName = ” MSHOWTOSQL1″
$sql2ServerName = ” MSHOWTOSQL2″
$sql3ServerName = ” MSHOWTOSQL3″
$dataDiskSize = 100
$vmAdminUser = ” MshowtoAdmin”
$vmAdminPassword = “Mshowto!123”
$storageAccountName ve $serviceName değişkenleri benzersiz olmalı. Çünkü bu değişkenleri cloud service ve cloud storage account olarak kullanacksınız.
-
Bir affinity group oluşturmak için
New-AzureAffinityGroup -Name $affinityGroupName -Location $location
-Description $affinityGroupDescription -Label $affinityGroupLabel
-
Yapılandırma dosyası import ederek Virtual Network oluşturmak
Set-AzureVNetConfig -ConfigurationPath $networkConfigPath
Yapılandırma dosyası XML formatında olmalıdır. MshowtoAG affinity group’u çağıran virtual network’ün ismi yukarıda belirttiğimiz gibi MshowtoNet olmalıdır. Örnek XML dosyasının içeriğini aşağıda görebilirsiniz.
<NetworkConfiguration xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns=”http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration”>
<VirtualNetworkConfiguration>
<Dns />
<VirtualNetworkSites>
<VirtualNetworkSite name=”MshowtoNET” AffinityGroup=”MshowtoAG”>
<AddressSpace>
<AddressPrefix>10.10.0.0/16</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name=”Front”>
<AddressPrefix>10.10.1.0/24</AddressPrefix>
</Subnet>
<Subnet name=”Back”>
<AddressPrefix>10.10.2.0/24</AddressPrefix>
</Subnet>
</Subnets>
</VirtualNetworkSite>
</VirtualNetworkSites>
</VirtualNetworkConfiguration>
</NetworkConfiguration>
-
Storage hesabının oluşturulması ile birlikte sahip olduğunuz subscription’a atanması
New-AzureStorageAccount -StorageAccountName $storageAccountName -Label $storageAccountLabel -AffinityGroup $affinityGroupName
Set-AzureSubscription -SubscriptionName (Get-AzureSubscription).SubscriptionName -CurrentStorageAccount $storageAccountName
-
İlk SQL Server VM’in oluşturulması
# Create MSHOTOSQL1…
New-AzureVMConfig `
-Name $sql1ServerName `
-InstanceSize Large `
-ImageName $sqlImageName `
-MediaLocation “$storageAccountContainer$sql1ServerName.vhd” `
-AvailabilitySetName $availabilitySetName `
-HostCaching “ReadOnly” `
-DiskLabel “OS” |
Add-AzureProvisioningConfig `
-Windows `
-DisableAutomaticUpdates `
-AdminUserName $vmAdminUser `
-Password $vmAdminPassword |
Set-AzureSubnet `
-SubnetNames $subnetName |
Add-AzureEndpoint `
-Name “SQL” `
-Protocol “tcp” `
-PublicPort 1 `
-LocalPort 1433 |
New-AzureVM `
-ServiceName $serviceName `
–AffinityGroup $affinityGroupName `
-VNetName $virtualNetworkName
-
MSHOWTOSQL2 ve MSHOWTOSQL3 VM’lerin oluşturulması
# Create MSHOWTOSQL2…
New-AzureVMConfig `
-Name $sql2ServerName `
-InstanceSize Large `
-ImageName $sqlImageName `
-MediaLocation “$storageAccountContainer$sql2ServerName.vhd” `
-AvailabilitySetName $availabilitySetName `
-HostCaching “ReadOnly” `
-DiskLabel “OS” |
Add-AzureProvisioningConfig `
-Windows `
-DisableAutomaticUpdates `
-AdminUserName $vmAdminUser `
-Password $vmAdminPassword |
Set-AzureSubnet `
-SubnetNames $subnetName |
Add-AzureEndpoint `
-Name “SQL” `
-Protocol “tcp” `
-PublicPort 2 `
-LocalPort 1433 |
New-AzureVM `
-ServiceName $serviceName
# Create MSHOWTOSQL3…
New-AzureVMConfig `
-Name $sql3ServerName `
-InstanceSize Large `
-ImageName $sqlImageName `
-MediaLocation “$storageAccountContainer$sql3ServerName.vhd” `
-AvailabilitySetName $availabilitySetName `
-HostCaching “ReadOnly” `
-DiskLabel “OS” |
Add-AzureProvisioningConfig `
-Windows `
-DisableAutomaticUpdates `
-AdminUserName $vmAdminUser `
-Password $vmAdminPassword |
Set-AzureSubnet `
-SubnetNames $subnetName |
New-AzureVM `
-ServiceName $serviceName
-
Bir süre geçtikten sonra sanal sunucularınız kurulacaktır. MSHOWTOSQL1 sanal sunucusuna bağlanın ve SQLCMD.EXE’yi çalıştırın. Server certificate oluşturmak ve yedeğini almak için
SQLCMD -S MSHOWTOSQL1
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<Strong_Password_#1>’;
GO
CREATE CERTIFICATE MSHOWTOSQL1_cert WITH SUBJECT = ‘MSHOWTOSQL1 certificate’;
GO
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE MSHOWTOSQL1_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
BACKUP CERTIFICATE MSHOWTOSQL1_cert TO FILE = ‘MSHOWTOSQL1_cert.cer’;
GO
-
MSHOWTOSQL2 sanal sunucusuna bağlanın ve SQLCMD.EXE’yi çalıştırın. Server certificate oluşturmak ve yedeğini almak için
SQLCMD -S MSHOWTOSQL2
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<Strong_Password_#2>’;
GO
CREATE CERTIFICATE MSHOWTOSQL2_cert WITH SUBJECT = ‘MSHOWTOSQL2 certificate for database mirroring’;
GO
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE MSHOWTOSQL2_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
BACKUP CERTIFICATE MSHOWTOSQL2_cert TO FILE = ‘MSHOWTOSQL2_cert.cer’;
GO
-
MSHOWTOSQL3 sanal sunucusuna bağlanın ve SQLCMD.EXE’yi çalıştırın. Server certificate oluşturmak ve yedeğini almak için
SQLCMD -S MSHOWTOSQL3
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<Strong_Password_#3>’;
GO
CREATE CERTIFICATE MSHOWTOSQL3_cert WITH SUBJECT = ‘MSHOWTOSQL3 certificate for database mirroring’;
GO
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE MSHOWTOSQL3_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
BACKUP CERTIFICATE MSHOWTOSQL3_cert TO FILE = ‘MSHOWTOSQL3_cert.cer’;
GO
-
Sertifikalar varsayılan directory olarak C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA altına kaydedilecektir.
-
MSHOWTOSQL1 sunucusu üzerinde
CREATE LOGIN DBMirroringLogin WITH PASSWORD = ‘Mshowto!123’;
GO
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL2_cert.cer’
GO
CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL3_cert.cer’
GO
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
-
MSHOWTOSQL2 sunucusu üzerinde
CREATE LOGIN DBMirroringLogin WITH PASSWORD = ‘Mshowto!123’;
GO
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL1_cert.cer’
GO
CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL3_cert.cer’
GO
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
-
MSHOWTOSQL3 sunucusu üzerinde
CREATE LOGIN DBMirroringLogin WITH PASSWORD = ‘Mshowto!123’;
GO
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL1_cert.cer’
GO
CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = ‘MSHOWTOSQL2_cert.cer’
GO
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
-
MSHOWTOSQL1 üzerinde database oluşturmak ve log dosyaları ile birlikte full yedek almak için.
CREATE database MyDB1
GO
BACKUP DATABASE MyDB1 TO DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak’;
GO
BACKUP LOG MyDB1 TO DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log’;
GO
-
Backup dosyalarını MSHOWTOSQL2 sunucusu üzerinde C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP lokasyonuna kopyalayın.
-
MSHOWTOSQL2 üzerinde restore işlemi için
RESTORE DATABASE MyDB1 FROM DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak’ WITH NORECOVERY;
GO
RESTORE LOG MyDB1 FROM DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log’ WITH NORECOVERY;
GO
ALTER DATABASE MyDB1 SET PARTNER = ‘TCP://MSHOWTOSQL1:5022’;
GO
-
MSHOWTOSQL1 sunucusu üzerinde MSHOWTOSQL2’yi mirroring partner, MSHOWTOSQL3’ü witness server yapmak için
ALTER DATABASE MyDB1 SET PARTNER = ‘TCP:// MSHOWTOSQL2:5022’;
GO
ALTER DATABASE MyDB1 SET WITNESS = ‘TCP:// MSHOWTOSQL3:5022’;
GO