Gyakorlat – Földrajzilag elosztott automatikus feladatátvételi csoportok olvasásra optimalizálással

Befejeződött

A georeplikációval és az automatikus feladatátvételi csoportokkal az előző leckében ismerkedett meg. Ebben a gyakorlatban az automatikus feladatátvételi csoportokat fogja konfigurálni az Azure SQL-adatbázishoz. Ezt követően feladatátvételt kezdeményez, és megtekinti annak eredményét.

Automatikus feladatátvételi csoportok az Azure SQL-ben

Ha automatikus feladatátvételi csoportokat szeretne konfigurálni egy vagy több adatbázishoz, majd meg szeretné tekinteni az eredményeket, az alábbi lépéseket kell végrehajtania:

  1. A környezet konfigurálása.
  2. Üres Azure SQL Database-kiszolgáló létrehozása a feladatátvételi régióban.
  3. Feladatátvételi csoport létrehozása a kiszolgálók között.
  4. A hálózat konfigurálása.
  5. Egy vagy több adatbázis felvétele a feladatátvételi csoportba.
  6. A parancssori alkalmazások konfigurálása.
  7. A futó alkalmazások értelmezése.
  8. Feladatátvétel kezdeményezése.
  9. Feladat-visszavétel.

Ez a gyakorlat végigvezeti az AdventureWorks-adatbázis automatikus feladatátvételi csoportjainak konfigurálásán. Ezt követően egy egyszerű parancssori alkalmazást fog használni, amely segít megérteni, hogy hol mennek végbe az olvasási és írási műveletek, és hogy miért lényeges az alkalmazásokon belüli újrapróbálkozási logika. Végül egy szórakoztató gyakorlat keretében meghatározza, hogy hány olvasási replika van rendelve egy üzletileg kritikus adatbázishoz, amely automatikus feladatátvételi csoporttal is rendelkezik.

A környezet konfigurálása

  1. Másolja be az alábbi kódot a Jegyzettömbbe vagy más szövegszerkesztőbe. Adja meg az adatait. Adja meg az SQL-hitelesítési jelszót. A $drLocation értékeként adja meg az a régiót, ahol a feladatátvételi csoportot szeretné elhelyezni. Ideális esetben válasszon egy régiót, amely az aktuális kiszolgáló régiójához van párosítva. Ellenőrizze a párosított régiók listáját. Minimumkövetelmény, hogy ne egyezzen meg az eredeti adatbázis régiójával. Végül adja meg a helyi számítógép IP-címét. Ha meg kell állapítania az IP-címet, nyissa meg a PowerShellt a helyi számítógépen, és futtassa az (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content parancsot.

    # Add your info
    $password = "password"
    $drLocation = "westus2"
    $ipAddress = "xx.xx.xx.xx"
    
  2. A Cloud Shellben, ennek a lapnak a jobb oldalán futtassa a módosított parancsot.

  3. Futtassa ezt a szkriptet az Azure Cloud Shellben a következő lépésekben használandó változók konfigurálásához:

    $admin = "cloudadmin"
    $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like <rgn>Sandbox resource group name</rgn>
    $location = $resourceGroup.Location
    $resourceGroup = $resourceGroup.ResourceGroupName
    $database = "AdventureWorks"
    $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup
    $server = $server.ServerName
    $drServer = "$($server)-dr"
    $failoverGroup = "$($server)-fg"
    $firewallRule = "AllowMyIp"
    Write-Host "Variables Received"
    
  4. Hozzon létre egy üres Azure SQL Database-kiszolgálót a feladatátvételi régióban ennek a szkriptnek az Azure Cloud Shellben való futtatásával:

    # Create a backup server in the failover region
    New-AzSqlServer -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -Location $drLocation `
        -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
        -ArgumentList $admin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
    Write-Host "New Azure SQL Database logical server Created in different region"
    
  5. Hozzon létre egy feladatátvételi csoportot a kiszolgálók között ennek a szkriptnek az Azure Cloud Shellben való futtatásával:

    # Create a failover group between the servers
    New-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -PartnerServerName $drServer `
        -FailoverGroupName $failoverGroup 
    Write-Host "New auto-failover group created between the two Azure SQL Database logical servers"
    
  6. Konfigurálja a hálózatot ennek a szkriptnek az Azure Cloud Shellben való futtatásával:

    # Add a firewall rule that gives your VM access to the new server
    New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -FirewallRuleName $firewallRule `
        -StartIpAddress $ipAddress `
        -EndIpAddress $ipAddress;
    

    Ez a hálózati beállítás elégséges az automatikus feladatátvételi csoportok bemutatásának céljára. Kissé eltér attól, amelyet nagyvállalati környezetben kellene beállítania. Vállalati környezetben a hozzáférést igénylő gép valószínűleg több erőforrásból áll, amelyek valamilyen alkalmazást alkotnak. Az adatbázis feladatátvételekor esetleg az alkalmazásokhoz, virtuális gépekhez vagy más erőforrásokhoz is feladatátvételt kíván végrehajtani. Az erőforrások mindkét halmazának hozzá kell férnie a másik régió erőforrásaihoz, kiszolgálóihoz és adatbázisaihoz. Ennek érdekében létesíthet virtuális hálózatok közötti társviszonyt vagy kapcsolatot, esetleg használhat valami mást (például Azure ExpressRoute-ot). Ez a forgatókönyvtől függ.

  7. Vegyen fel egy vagy több adatbázist a feladatátvételi csoportban ezzel az Azure Cloud Shellben futtatott szkripttel:

    # Add the database or databases to the failover group
    Get-AzSqlDatabase -ResourceGroupName $resourceGroup `
        -ServerName $server -DatabaseName $database | `
        Add-AzSqlDatabaseToFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -FailoverGroupName $failoverGroup
    Write-Host "AdventureWorks database added to the auto-failover group"
    

    A szkript futtatása eltarthat egy ideig. Visszaállítja az adatbázist a másik régióban, amely során átmásolja az adatokat az eredeti régióból a vészhelyreállítási régióba. Megkezdheti a következő szakasz lépéseit, és később visszatérhet ellenőrizni, hogy lefutott-e már a szkript.

Ezzel üzembe helyezte és konfigurálta az automatikus feladatátvételi csoportot az AdventureWorks adatbázishoz.

A parancssori alkalmazások konfigurálása

Ebben a szakaszban két ostress számítási feladatot fog használni a feladatátvételi csoportban található elsődleges és másodlagos kiszolgálók Updateability tulajdonságának (az adatbázis ReadWrite vagy ReadOnly állapotának) ellenőrzéséhez. Ennek a példának a célja olyan alkalmazást szimulálni, amelyben olvasási és írási számítási feladatok is vannak.

  1. Nyisson meg két külön parancsablakot. Az ablakokat úgy rendezze el, hogy ez az ablak (a böngésző), és mindkét parancsablak is látható legyen.

  2. Mindkét parancssori ablakban lépjen az Availability mappára, ahogyan az előző gyakorlatokban is tette. Használhatja például ezt a parancsot:

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    
  3. Az első parancssori ablakot a létrehozott feladatátvételi csoportban található elsődleges kiszolgáló állapotának ellenőrzésére fogja használni. Futtassa ezt a parancsot a kiszolgálónév és a jelszó használatával:

    .\ostress.exe -S"<server-name>-fg.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -oprimary
    

    Megjegyzés:

    Automatikus feladatátvételi csoportok esetén a feladatátvételi csoport nevéhez kapcsolódik, amely az adatbázis absztrakciója.

  4. A második parancssori ablakot a létrehozott feladatátvételi csoportban található másodlagos kiszolgáló állapotának ellenőrzésére fogja használni. Futtassa ezt a parancsot a kiszolgálónév és a jelszó használatával:

    ostress.exe -S"<server-name>-fg.secondary.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -osecondary
    

Az első parancs eredményének azért kell lennie READ_WRITE, mert ellenőrzi az elsődleges feladatátvételi csoport kiszolgálóját, és nem kezdeményezett feladatátvételt.

A második parancs eredményének azért kell lennie READ_ONLY, mert ellenőrzi a konfigurált vészhelyreállítást vagy a másodlagos kiszolgálót. Egyszerre csak egy kiszolgálóról végezhet írási műveletet.

A következő lépések során megfigyelheti, mi történik a két kiszolgálón feladatátvételkor.

Feladatátvétel kezdeményezése és az eredmények megtekintése

  1. A másodlagos kiszolgáló állapotának ellenőrzéséhez használja a lap jobb oldalán található Azure Cloud Shell-terminált:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    Az eredmény megmutatja, hogy az automatikus feladatátvételi csoportban lévő másodlagos kiszolgáló elsődleges vagy másodlagos adatbázisként funkcionál.

  2. Most láthatja, hogy mi történik feladatátvételkor. Kezdeményezzen manuális feladatátvételt ezekkel az Azure Cloud Shell-terminálban kiadott Azure PowerShell-parancsokkal:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $drServer -FailoverGroupName $failoverGroup
    

    A feladatátvétel során előfordulhat, hogy a kapcsolatok megszakadnak egy pillanatra, de mivel az alkalmazás folyamatosan próbálkozik, az alkalmazás nem hiúsul meg teljesen. A feladatátvétel befejezése után látni fogja, hogy a READ_WRITE és READ_ONLY eredmények visszaállnak, és nem cserélődnek fel.

    Az automatikus feladatátvételi csoportok Azure SQL Database-ben és Azure SQL Managed Instance-ben való használatának egyik előnye, hogy nem szükséges frissítenie a kapcsolati sztringeket a feladatátvétel után. Továbbra is az elsődlegeshez (<failover-group>.database.windows.net) kapcsolódik az írási, és a másodikhoz (<failover-group>.secondary.database.windows.net) az olvasási számítási feladatokkal. Az Azure gondoskodik róla, hogy az azokhoz tartozó régióban illetve kiszolgálón elhelyezkedő megfelelő adatbázisokhoz legyenek irányítva.

  3. Ellenőrizze a másodlagos kiszolgáló állapotát ennek a szkriptnek az Azure Cloud Shellben való futtatásával:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    Most ennek a kiszolgálónak kell elsődleges szerepkörben lennie.

  4. Végezze el a feladat-visszavételt ennek a szkriptnek az Azure Cloud Shellben való futtatásával:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $server -FailoverGroupName $failoverGroup
    
  5. Végül ismét ellenőrizheti a másodlagos kiszolgáló állapotát. Futtassa ezt a szkriptet az Azure Cloud Shellben:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    
  6. Mindkét parancsablakot bezárhatja, és teljes méretűvé teheti a Microsoft Learn böngészőablakát.

Ebben a gyakorlatban az automatikus feladatátvételi csoportok üzembe helyezését és konfigurálását sajátíthatta el. Azt is megtudhatta, hogy mit jelent mindez az alkalmazások szempontjából. Az automatikus feladatátvételi csoportok használata csak egy módja annak, hogy magasabb rendelkezésre állást és jobb olvasásra optimalizálást érjen el az Azure SQL-ben.