Tutorial: Simulieren eines Fehlers bei Zugriff auf redundanten Speicher mit LesezugriffTutorial: Simulate a failure in accessing read-access redundant storage

Dieses Tutorial ist der zweite Teil einer Reihe.This tutorial is part two of a series. In diesem Teil erfahren Sie, welchen Nutzen ein georedundanter Speicher mit Lesezugriff (Read-Access Geographically Redundant Storage, RA-GRS) bietet, indem Sie einen Fehler simulieren.In it, you learn about the benefits of a read-access geo-redundant (RA-GRS) by simulating a failure.

Zum Simulieren eines Fehlers können Sie Fiddler oder statisches Routing verwenden.In order to simulate a failure, you can use either Fiddler or Static Routing. Beide Methoden ermöglichen es Ihnen, einen Fehler für Anforderungen an den primären Endpunkt Ihres RA-GRS-Speicherkontos (georedundanter Speicher mit Lesezugriff) zu simulieren, sodass die Anwendung stattdessen vom sekundären Endpunkt liest.Either method will allow you to simulate failure for requests to the primary endpoint of your read-access geo-redundant (RA-GRS) storage account, causing the application read from the secondary endpoint instead.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

Im zweiten Teil der Reihe lernen Sie Folgendes:In part two of the series, you learn how to:

VoraussetzungenPrerequisites

Führen Sie vor Beginn dieses Tutorials das vorherige Tutorial durch: Herstellen von Hochverfügbarkeit für Anwendungsdaten mit Azure Storage.Before you begin this tutorial, complete the previous tutorial: Make your application data highly available with Azure storage.

Gehen Sie wie folgt vor, um mit Fiddler einen Fehler zu simulieren:To simulate a failure using Fiddler:

Simulieren eines Fehlers mit FiddlerSimulate a failure with Fiddler

Zum Simulieren eines Fehlers mit Fiddler injizieren Sie eine fehlerhafte Antwort für Anforderungen an den primären Endpunkt Ihres RA-GRS-Speicherkontos.To simulate failure with Fiddler, you inject a failed response for requests to the primary endpoint of your RA-GRS storage account.

In den folgenden Abschnitten wird gezeigt, wie Sie mit Fiddler einen Fehler simulieren und die Wiederherstellung des primären Endpunkts durchführen.The following sections depict how to simulate a failure and primary endpoint restoration with fiddler.

Starten von FiddlerLaunch fiddler

Öffnen Sie Fiddler, und wählen Sie zuerst Rules (Regeln) und anschließend Customize Rules (Regeln anpassen) aus.Open Fiddler, select Rules and Customize Rules.

Anpassen von Fiddler-Regeln

Der Fiddler ScriptEditor wird gestartet und zeigt die Datei SampleRules.js an.The Fiddler ScriptEditor launches and displays the SampleRules.js file. Mit dieser Datei können Sie Fiddler anpassen.This file is used to customize Fiddler.

Fügen Sie das folgende Codebeispiel in die OnBeforeResponse-Funktion ein.Paste the following code sample in the OnBeforeResponse function. Der neue Code ist auskommentiert, damit die damit erstellte Logik nicht unmittelbar implementiert wird.The new code is commented out to ensure that the logic it creates is not implemented immediately.

Wählen Sie anschließend File (Datei) und dann Save (Speichern) aus, um Ihre Änderungen zu speichern.Once complete, select File and Save to save your changes.

    /*
        // Simulate data center failure
        // After it is successfully downloading the blob, pause the code in the sample,
        // uncomment these lines of script, and save the script.
        // It will intercept the (probably successful) responses and send back a 503 error. 
        // When you're ready to stop sending back errors, comment these lines of script out again 
        //     and save the changes.

        if ((oSession.hostname == "contosoragrs.blob.core.windows.net") 
            && (oSession.PathAndQuery.Contains("HelloWorld"))) {
            oSession.responseCode = 503;  
        }
    */

Einfügen einer benutzerdefinierten Regel

Unterbrechen der AnwendungInterrupting the application

Führen Sie die Anwendung in Ihrer integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) oder in einer Shell aus.Run the application in your IDE or shell.

Drücken Sie im Konsolenfenster eine Taste, um die Anwendung anzuhalten, während diese aus dem primären Endpunkt liest.Once the application begins reading from the primary endpoint, press any key in the console window to pause the application.

Szenario-App

Simulieren eines FehlersSimulate failure

Während die Anwendung angehalten wird, heben Sie die Auskommentierung der benutzerdefinierten Regel auf, die Sie in Fiddler gespeichert haben.While the application is paused, uncomment the custom rule we saved in Fiddler.

Im Codebeispiel wird nach Anforderungen an das RA-GRS-Speicherkonto gesucht, und wenn der Pfad den Namen der Datei (HelloWorld) enthält, wird der Antwortcode 503 - Service Unavailable zurückgegeben.The code sample looks for requests to the RA-GRS storage account and, if the path contains the name of the file HelloWorld, returns a response code of 503 - Service Unavailable.

Navigieren Sie zu Fiddler, und wählen Sie zuerst Rules -> (Regeln) und anschließend Customize Rules... (Regeln anpassen...) aus.Navigate to Fiddler and select Rules -> Customize Rules....

Heben Sie die Auskommentierung der folgenden Zeilen auf, und ersetzen Sie STORAGEACCOUNTNAME durch den Namen Ihres Speicherkontos.Uncomment the following lines, replace STORAGEACCOUNTNAME with the name of your storage account. Wählen Sie zuerst File -> (Datei) und anschließend Save (Speichern) aus, um die Änderungen zu speichern.Select File -> Save to save your changes.

Hinweis

Wenn Sie die Beispielanwendung unter Linux ausführen, müssen Sie Fiddler jeweils neu starten, wenn Sie die Datei CustomRule.js bearbeiten, damit die benutzerdefinierte Logik für Fiddler installiert wird.If you are running the sample application on Linux, you need to restart Fiddler whenever you edit the CustomRule.js file, in order for Fiddler to install the custom logic.

         if ((oSession.hostname == "STORAGEACCOUNTNAME.blob.core.windows.net")
         && (oSession.PathAndQuery.Contains("HelloWorld"))) {
         oSession.responseCode = 503;
         }

Drücken Sie zum Fortsetzen der Anwendung eine beliebige Taste.To resume the application, press any key.

Sobald die Anwendung erneut gestartet wird, treten beim Senden von Anforderungen an den primären Endpunkt Fehler auf.Once the application starts running again, the requests to the primary endpoint begin to fail. Die Anwendung versucht fünfmal, erneut eine Verbindung mit dem primären Endpunkt herzustellen.The application attempts to reconnect to the primary endpoint 5 times. Wenn der Verbindungsaufbau mehr als fünfmal scheitert, fordert die Anwendung das Bild vom sekundären Endpunkt an, der schreibgeschützt ist.After the failure threshold of five attempts, it requests the image from the secondary read-only endpoint. Wenn die Anwendung das Bild 20-mal erfolgreich vom sekundären Endpunkt abgerufen hat, versucht sie, eine Verbindung mit dem primären Endpunkt herzustellen.When the application successfully retrieves the image 20 times from the secondary endpoint it will attempt to connect to the primary endpoint. Wenn dieser weiterhin nicht erreichbar ist, beginnt die Anwendung erneut mit dem Lesen aus dem sekundären Endpunkt.If the primary endpoint is still unreachable, the application resumes reading from the secondary endpoint.

Hierbei handelt es sich um das Muster Trennschalter (Circuit Breaker), das im vorherigen Tutorial beschrieben wurde.This pattern is the Circuit Breaker pattern described in the previous tutorial.

Einfügen einer benutzerdefinierten Regel

Simulieren der Wiederherstellung des primären EndpunktsSimulate primary endpoint restoration

Durch die benutzerdefinierte Regel, die Sie im vorherigen Schritt in Fiddler festgelegt haben, treten beim Senden von Anforderungen an den primären Endpunkt Fehler auf.With the Fiddler custom rule set in the preceding step, requests to the primary endpoint fail.

Um den primären Endpunkt in der Simulation wiederherzustellen, entfernen Sie die Logik, mit der der 503-Fehler eingefügt wurde.In order to simulate the primary endpoint functioning again, you remove the logic to inject the 503 error.

Drücken Sie eine Taste, um die Anwendung anzuhalten.To pause the application, press any key.

Navigieren Sie zu Fiddler, und wählen Sie zuerst Rules (Regeln) und anschließend Customize Rules... (Regeln anpassen...) aus.Navigate to Fiddler and select Rules and Customize Rules....

Kommentieren Sie in der OnBeforeResponse-Funktion die benutzerdefinierte Logik aus, oder entfernen Sie diese, sodass die Standardfunktion wieder vorhanden ist.Comment or remove the custom logic in the OnBeforeResponse function, leaving the default function.

Wählen Sie File (Datei) und anschließend Save (Speichern) aus, um die Änderungen zu speichern.Select File and Save to save the changes.

Entfernen der benutzerdefinierten Regel

Drücken Sie anschließend zum Fortsetzen der Anwendung eine Taste.When complete, press any key to resume the application. Die Anwendung liest nun erneut aus dem primären Endpunkt, bis 999 Lesevorgänge erfasst wurden.The application continues reading from the primary endpoint until it hits 999 reads.

Fortsetzen der Anwendung

Simulieren eines Fehlers mit einer ungültigen statischen RouteSimulate a failure with an invalid static route

Sie können eine ungültige statische Route für alle Anforderungen an den primären Endpunkt Ihres Speicherkontos vom Typ Georedundanter Speicher mit Lesezugriff (RA-GRS) erstellen.You can create an invalid static route for all requests to the primary endpoint of your read-access geo-redundant (RA-GRS) storage account. In diesem Tutorial wird der lokale Host als Gateway für das Weiterleiten von Anforderungen an das Speicherkonto verwendet.In this tutorial, the local host is used as the gateway for routing requests to the storage account. Die Nutzung des lokalen Hosts als Gateway bewirkt, dass für alle Anforderungen an den primären Endpunkt Ihres Speicherkontos eine Schleife zurück zum Host erfolgt. Dies führt schließlich zu einem Fehler.Using the local host as the gateway causes all requests to your storage account primary endpoint to loop back inside the host, which subsequently leads to failure. Führen Sie die folgenden Schritte aus, um einen Fehler zu simulieren und die Wiederherstellung des primären Endpunkts mit einer ungültigen statischen Route durchzuführen.Follow the following steps to simulate a failure, and primary endpoint restoration with an invalid static route.

Starten und Anhalten der AnwendungStart and pause the application

Führen Sie die Anwendung in Ihrer integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) oder in einer Shell aus.Run the application in your IDE or shell. Drücken Sie im Konsolenfenster eine Taste, um die Anwendung anzuhalten, während diese aus dem primären Endpunkt liest.Once the application begins reading from the primary endpoint, press any key in the console window to pause the application.

Simulieren eines FehlersSimulate failure

Starten Sie die Eingabeaufforderung bei angehaltener Anwendung unter Windows als Administrator, oder führen Sie das Terminal unter Linux als root-Benutzer aus.With the application paused, start command prompt on Windows as an administrator or run terminal as root on Linux.

Geben Sie an einer Eingabeaufforderung oder in einem Terminal den folgenden Befehl ein, um Informationen zur Domäne des primären Endpunkts des Speicherkontos abzurufen.Get information about the storage account primary endpoint domain by entering the following command on a command prompt or terminal.

nslookup STORAGEACCOUNTNAME.blob.core.windows.net

Ersetzen Sie STORAGEACCOUNTNAME durch den Namen Ihres Speicherkontos.Replace STORAGEACCOUNTNAME with the name of your storage account. Kopieren Sie die IP-Adresse Ihres Speicherkontos zur späteren Verwendung in einen Text-Editor.Copy to the IP address of your storage account to a text editor for later use.

Geben Sie zum Abrufen der IP-Adresse Ihres lokalen Hosts an der Windows-Eingabeaufforderung ipconfig bzw. im Linux-Terminal ifconfig ein.To get the IP address of your local host, type ipconfig on the Windows command prompt, or ifconfig on the Linux terminal.

Geben Sie den folgenden Befehl an einer Windows-Eingabeaufforderung oder einem Linux-Terminal ein, um eine statische Route für einen Zielhost hinzuzufügen.To add a static route for a destination host, type the following command on a Windows command prompt or Linux terminal.

LinuxLinux

route add <destination_ip> gw <gateway_ip>

WindowsWindows

route add <destination_ip> <gateway_ip>

Ersetzen Sie <destination_ip> durch die IP-Adresse Ihres Speicherkontos und <gateway_ip> durch die IP-Adresse Ihres lokalen Hosts.Replace <destination_ip> with your storage account IP address, and <gateway_ip> with your local host IP address.

Drücken Sie zum Fortsetzen der Anwendung eine beliebige Taste.To resume the application, press any key.

Sobald die Anwendung erneut gestartet wird, treten beim Senden von Anforderungen an den primären Endpunkt Fehler auf.Once the application starts running again, the requests to the primary endpoint begin to fail. Die Anwendung versucht fünfmal, erneut eine Verbindung mit dem primären Endpunkt herzustellen.The application attempts to reconnect to the primary endpoint five times. Wenn der Verbindungsaufbau mehr als fünfmal scheitert, fordert die Anwendung das Bild vom sekundären Endpunkt an, der schreibgeschützt ist.After the failure threshold of five attempts, it requests the image from the secondary read-only endpoint. Nachdem die Anwendung das Bild erfolgreich 20 Mal vom sekundären Endpunkt abgerufen hat, versucht sie, eine Verbindung mit dem primären Endpunkt herzustellen.After the application successfully retrieves the image 20 times from the secondary endpoint, the application attempts to connect to the primary endpoint. Wenn dieser weiterhin nicht erreichbar ist, beginnt die Anwendung erneut mit dem Lesen aus dem sekundären Endpunkt.If the primary endpoint is still unreachable, the application resumes reading from the secondary endpoint. Hierbei handelt es sich um das Muster Trennschalter (Circuit Breaker), das im vorherigen Tutorial beschrieben wurde.This pattern is the Circuit Breaker pattern described in the previous tutorial.

Simulieren der Wiederherstellung des primären EndpunktsSimulate primary endpoint restoration

Löschen Sie die statische Route des primären Endpunkts aus der Routingtabelle, um zu simulieren, dass der primäre Endpunkt wieder funktioniert.To simulate the primary endpoint functioning again, delete the static route of the primary endpoint from the routing table. Dies ermöglicht, dass alle Anforderungen an den primären Endpunkt über das Standardgateway geleitet werden.This allows all requests to the primary endpoint to be routed through the default gateway.

Geben Sie den folgenden Befehl an einer Windows-Eingabeaufforderung oder in einem Linux-Terminal ein, um die statische Route eines Zielhosts (Speicherkonto) zu löschen.To delete the static route of a destination host, the storage account, type the following command on a Windows command prompt or linux terminal.

LinuxLinux

route del <destination_ip> gw <gateway_ip>

WindowsWindows

route delete <destination_ip>

Drücken Sie eine beliebige Taste, um die Ausführung der Anwendung fortzusetzen.Press any key to resume the application. Die Anwendung liest nun erneut aus dem primären Endpunkt, bis 999 Lesevorgänge erfasst wurden.The application continues reading from the primary endpoint until it hits 999 reads.

Fortsetzen der Anwendung

Nächste SchritteNext steps

Im zweiten Teil dieser Reihe haben Sie gelernt, wie Sie einen Fehler simulieren, um den georedundanten Speicher mit Lesezugriff zu testen.In part two of the series, you learned about simulating a failure to test read access geo-redundant storage.

Im folgenden Artikel finden Sie weitere Informationen zur Funktionsweise von georedundantem Speicher mit Lesezugriff (RA-GRS) und zu den damit verbundenen Risiken:To learn more about how RA-GRS storage works, as well as its associated risks, read the following article: