Delen via


Aan de slag met actieve replicatie van Azure Cache voor Redis Enterprise of Azure Managed Redis met een door AKS gehoste toepassing

In deze zelfstudie host u een inventaristoepassing in Azure Kubernetes Service (AKS) en leert u hoe u actieve geo-replicatie kunt gebruiken om gegevens te repliceren in uw Azure Cache voor Redis Enterprise- of Azure Managed Redis-exemplaren in Azure-regio's.

Vereiste voorwaarden

Belangrijk

In deze zelfstudie wordt ervan uitgegaan dat u bekend bent met basisconcepten van Kubernetes, zoals containers, pods en service.

Overzicht

In deze zelfstudie wordt een voorbeeld van een inventarispagina gebruikt met drie verschillende T-shirtopties. De gebruiker kan elke T-shirt 'kopen' en de voorraaduitval zien vallen. Het unieke van deze demo is dat we de inventaris-app in twee verschillende regio's uitvoeren. Normaal gesproken moet u de database uitvoeren waarin inventarisgegevens in één regio worden opgeslagen, zodat er geen consistentieproblemen zijn. Met andere back-ends en synchronisatie van databases kunnen klanten een onaangename ervaring hebben vanwege een hogere latentie voor aanroepen in verschillende Azure-regio's. Wanneer u Azure Cache voor Redis Enterprise als back-end gebruikt, kunt u twee caches koppelen aan actieve geo-replicatie, zodat de inventaris consistent blijft in beide regio's terwijl u profiteert van lage latentieprestaties van Redis Enterprise in dezelfde regio.

Twee exemplaren van Azure Redis instellen

  1. Maak een nieuw Azure Cache voor Redis Enterprise- of Azure Managed Redis-exemplaar in de regio VS - west 2 met behulp van Azure Portal of het CLI-hulpprogramma van uw voorkeur. U kunt ook elke gewenste regio gebruiken. Gebruik de snelstartgids om aan de slag te gaan.

  2. Op het tabblad Geavanceerd :

    1. Schakel alleen niet-TLS-toegang in.
    2. Clusteringbeleid instellen op Onderneming
    3. Configureer een nieuwe actieve geo-replicatiegroep met behulp van deze handleiding. Uiteindelijk voegt u beide caches toe aan dezelfde replicatiegroep. Maak de groepsnaam met de eerste cache en voeg de tweede cache toe aan dezelfde groep.

    Belangrijk

    In deze zelfstudie wordt een niet-TLS-poort gebruikt voor demonstratie, maar we raden u ten zeerste aan een TLS-poort te gebruiken voor alles in productie.

  3. Stel een andere Azure Cache voor Redis Enterprise in de regio VS - oost in met dezelfde configuratie als de eerste cache. U kunt ook elke gewenste regio gebruiken. Zorg ervoor dat u dezelfde replicatiegroep kiest als de eerste cache.

Kubernetes-implementatiebestanden voorbereiden

Maak twee .yml bestanden met behulp van de volgende procedure. Eén bestand voor elke cache die u in de twee regio's hebt gemaakt.

Om gegevensreplicatie tussen regio's te demonstreren, voeren we twee exemplaren van dezelfde toepassing in verschillende regio's uit. Laten we één exemplaar uitvoeren in Seattle, west-naamruimte, terwijl de tweede wordt uitgevoerd in New York, east namespace.

Naamruimte West

Werk de volgende velden in het volgende YAML-bestand bij en sla het op als app_west.yaml.

  1. Werk de variabele REDIS_HOST bij met de URL van de eindpuntwaarde nadat u het poortachtervoegsel hebt verwijderd: 10000
  2. Werk REDIS_PASSWORD bij met de Access key van je West US 2 cache.
  3. Werk APP_LOCATION bij om de regio weer te geven waarin dit toepassingsexemplaren worden uitgevoerd. Voor deze cache configureert u de APP_LOCATION naar Seattle om aan te duiden dat dit toepassingsexemplaar in Seattle wordt uitgevoerd.
  4. Controleer of de waarde van de variabele namespace zich op beide plaatsen in het bestand bevindt west .

Deze moet eruitzien als de volgende code:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: west
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoWest.westus2.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "Seattle, WA" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: west
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

East-naamruimte

Sla nog een kopie van hetzelfde YAML-bestand op als app_east.yaml. Gebruik deze keer de waarden die overeenkomen met uw tweede cache.

  1. Werk de variabele REDIS_HOST bij met de eindpuntwaarde na het verwijderen van het poortachtervoegsel: 10000
  2. Werk REDIS_PASSWORD bij met de toegangssleutel van uw East US-cache.
  3. Werk APP_LOCATION bij om de regio weer te geven waarin dit toepassingsexemplaren worden uitgevoerd. Voor deze cache configureert u de APP_LOCATION op New York om aan te geven dat dit toepassingsexemplaar wordt uitgevoerd in New York.
  4. Controleer of de waarde van de variabele namespace zich op beide plaatsen in het bestand bevindt east .

Deze moet eruitzien als de volgende code:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: east
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoEast.eastus.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "New York, NY" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: east
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

Kubernetes CLI installeren en verbinding maken met uw AKS-cluster

In deze sectie installeert u eerst de Kubernetes CLI en maakt u vervolgens verbinding met een AKS-cluster.

Opmerking

Voor deze zelfstudie is een Azure Kubernetes Service-cluster vereist. U implementeert beide exemplaren van de toepassing in hetzelfde AKS-cluster.

De Kubernetes-CLI installeren

Gebruik de Kubernetes CLI, _kubectl, om vanaf uw lokale computer verbinding te maken met het Kubernetes-cluster. Als u lokaal werkt, kunt u de volgende opdracht gebruiken om kubectl te installeren.

az aks install-cli

Als u Azure Cloud Shell gebruikt, is kubectl al geïnstalleerd en kunt u deze stap overslaan.

Verbinding maken met uw AKS-clusters in twee regio's

Gebruik de portal om de resourcegroep en clusternaam voor uw AKS-cluster in de regio VS - west 2 te kopiëren. Als u kubectl wilt configureren om verbinding te maken met uw AKS-cluster, gebruikt u de volgende opdracht met uw resourcegroep en clusternaam:

 az aks get-credentials --resource-group myResourceGroup --name myClusterName

Controleer of u verbinding kunt maken met uw cluster door de volgende opdracht uit te voeren:


kubectl get nodes

U zou vergelijkbare uitvoer moeten zien met de lijst van uw clusterknooppunten.

NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-21274953-vmss000001   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000003   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000006   Ready    agent   1d    v1.24.15

Uw toepassing implementeren en testen

U hebt twee naamruimten nodig om uw toepassingen uit te voeren op uw AKS-cluster. Maak een webservice en implementeer vervolgens de applicatie.

Voer de volgende opdracht uit om de toepassingsexemplaren uit te rollen in uw AKS-cluster in de naamruimte west :

kubectl create namespace west

kubectl apply -f app_west.yaml

U krijgt een antwoord dat aangeeft dat uw implementatie en service is gemaakt:

deployment.apps/shoppingcart-app created
service/shoppingcart-svc created

Om de toepassing te testen, voert u de volgende opdracht uit om te controleren of de pod actief is.

kubectl get pods -n west

U ziet dat uw pod succesvol wordt uitgevoerd als:

NAME                                READY   STATUS                       RESTARTS   AGE
shoppingcart-app-5fffdcb5cd-48bl5   1/1     Running                      0          68s

Voer de volgende opdracht uit om het eindpunt voor uw toepassing op te halen:

kubectl get service -n west

Mogelijk ziet u dat de EXTERNAL-IP een paar minuten status <pending> heeft. Probeer het opnieuw totdat de status wordt vervangen door een IP-adres.

NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
shoppingcart-svc       LoadBalancer   10.0.166.147   20.69.136.105   80:30390/TCP   90s

Zodra de External-IP beschikbaar is, opent u een webbrowser naar het External-IP adres van uw service en ziet u de toepassing.

Voer dezelfde implementatiestappen uit en implementeer een exemplaar van de demotoepassing die moet worden uitgevoerd in de regio VS - oost.

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

Wanneer elk van de twee services in een browser wordt geopend, ziet u dat het wijzigen van de inventaris in één regio vrijwel onmiddellijk wordt weerspiegeld in de andere regio. De inventarisgegevens worden opgeslagen in de Redis Enterprise-exemplaren die gegevens repliceren tussen regio's.

Het is u gelukt. Klik op de knoppen en verken de demo.

Schermopname van twee overeenkomende browser met de winkelwagen-app die wordt uitgevoerd in verschillende regio's met dezelfde gegevens.

Als u het aantal opnieuw wilt instellen, voegt u het volgende toe /reset na de URL:

<IP address>/reset

Maak uw implementatie schoon

Voer de volgende opdrachten uit om uw cluster op te schonen:

kubectl delete deployment shoppingcart-app -n west
kubectl delete service shoppingcart-svc -n west

kubectl delete deployment shoppingcart-app -n east
kubectl delete service shoppingcart-svc -n east

De hulpbronnen opschonen

Als u de resources wilt blijven gebruiken die u in dit artikel hebt gemaakt, moet u de resourcegroep behouden.

Als u klaar bent met de resources, kunt u de Azure-resourcegroep verwijderen die u hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. Wanneer u een resourcegroep verwijdert, worden alle resources in de groep definitief verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde bron of bronngroep verwijdert. Als u de resources in een bestaande resourcegroep hebt gemaakt die resources bevat die u wilt behouden, kunt u elke resource afzonderlijk verwijderen in plaats van de resourcegroep te verwijderen.

Een resourcegroep verwijderen

  1. Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.

  2. Selecteer de resourcegroep die u wilt verwijderen.

    Als er veel resourcegroepen zijn, gebruikt u het vak Filter voor een veld... en typt u de naam van de resourcegroep die u voor dit artikel hebt gemaakt. Selecteer de bronnen groep in de lijst met resultaten.

    Schermopname van een lijst met resourcegroepen die u wilt verwijderen in het werkvenster.

  3. Selecteer Resourcegroep verwijderen.

  4. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Typ ter bevestiging de naam van de resourcegroep. Selecteer vervolgens Verwijderen.

    Schermopname van een formulier waarvoor de resourcenaam is vereist om het verwijderen te bevestigen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.