Freigeben über


Lastverteilung des HPC-Cache-Clientverkehrs

In diesem Artikel werden einige grundlegende Methoden zur Lastenverteilung des Client-Traffics auf alle Einbindungspunkte in Ihrem Azure HPC-Cache erläutert.

Jeder HPC-Cache verfügt über mindestens drei verschiedene IP-Adressen, und Caches mit größeren Durchsatzwerten können bis zu 12 aufweisen. Es ist wichtig, alle IP-Adressen zu verwenden, um die vollständigen Vorteile von Azure HPC Cache zu erhalten.

Es gibt verschiedene Lastenausgleichsoptionen für Ihre Clienteinbindungen:

  • Manuelles Auswählen einer anderen Bereitstellungs-IP für jeden Client
  • Schließen Sie die IP-Adressen-Rotation in Ihre Client-Einbindungsskripte ein.
  • Konfigurieren eines DNS-Systems zum automatischen Weiterleiten von Clientanforderungen unter allen verfügbaren Adressen (Roundrobin-DNS)

Das richtige Lastenausgleichssystem für Sie hängt von der Komplexität Ihres Workflows, der Anzahl der IP-Adressen im Cache und einer großen Anzahl anderer Faktoren ab. Wenden Sie sich an Ihren Azure-Ratgeber, wenn Sie Hilfe bei der Entscheidung benötigen, welcher Ansatz für Sie am besten geeignet ist.

Manuelles Zuweisen von IP-Adressen

Die IP-Adressen für die Bereitstellung des Caches werden auf den Seiten " Cacheübersicht " und " Bereitstellen " im Azure-Portal und in der Erfolgsmeldung angezeigt, die gedruckt wird, wenn Sie einen Cache mit Azure CLI oder PowerShell erstellen.

Sie können die Seite "Bereitstellungsanweisungen " verwenden, um einen angepassten Bereitstellungsbefehl für jeden Client zu generieren. Wählen Sie beim Erstellen mehrerer Befehle alle Werte der Cache-Bereitstellungsadresse aus.

Lesen Sie Mount the Azure HPC Cache für nähere Einzelheiten.

Verwenden des skriptierten Lastenausgleichs

Es gibt mehrere Möglichkeiten, Client-Einbindungen zwischen den verfügbaren IP-Adressen programmgesteuert zu wechseln. Hier sind zwei Beispiele.

Beispiel für das Mount-Befehlsskript cksum

In diesem Beispiel-Bereitstellungsbefehl werden die Hashfunktion cksum und der Clienthostname verwendet, um die Clientverbindungen automatisch unter allen verfügbaren IP-Adressen im HPC-Cache zu verteilen. Wenn alle Clientcomputer über eindeutige Hostnamen verfügen, können Sie diesen Befehl auf jedem Client ausführen, um sicherzustellen, dass alle verfügbaren Bereitstellungspunkte verwendet werden.

mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.0.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/${NAMESPACE} /mnt

Um dieses Beispiel in Ihrem Workflow zu verwenden, passen Sie die folgenden Begriffe an:

  • Verwenden Sie im X= Ausdruck eine durch Leerzeichen getrennte Liste aller Bereitstellungsadressen des Caches in sortierter Reihenfolge.

    Der Ausdruck (X=(10.0.0.{7..9}) legt die Variable X als diese Gruppe von Bereitstellungsadressen fest: {10.0.0.7, 10.0.0.8, 10.0.0.9}. Verwenden Sie die Basis-IP-Adresse des Caches und die genauen Adressen, die auf der Seite "Cacheübersicht" angezeigt werden. Wenn die Adressen nicht aufeinander folgen, listen Sie sie alle in numerischer Reihenfolge auf.

  • Verwenden Sie im %3 Feld die tatsächliche Anzahl der Mount-IP-Adressen, die Ihr Cache hat (in der Regel 3, 6, 9 oder 12).

    Verwenden Sie %9 beispielsweise, wenn Ihr Cache neun IP-Adressen für die Client-Bereitstellung verfügbar macht.

  • Verwenden Sie für den Ausdruck ${NAMESPACE}den Namespacepfad des Speicherziels, auf den der Client zugreift.

    Sie können eine Variable verwenden, die Sie definiert haben (NAMESPACE im Beispiel), oder sie können stattdessen den Literalwert übergeben.

    Im Befehlsbeispiel am Ende dieses Abschnitts wird ein Literalwert für den Namespacepfad verwendet. /blob-target-1

  • Wenn Sie einen benutzerdefinierten lokalen Pfad auf Ihren Clientcomputern verwenden möchten, ändern Sie den Wert /mnt in den gewünschten Pfad.

Hier sehen Sie ein Beispiel eines aufgefüllten Clienteinbindungsbefehls:

mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.7.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/blob-target-1 /hpc-cache/blob1 

Roundrobin-Funktion (Beispiel)

In diesem Codebeispiel werden Client-IP-Adressen als Randomisierungselement verwendet, um Clients an alle verfügbaren IP-Adressen des HPC-Caches zu verteilen.

function mount_round_robin() {

  # to ensure the clients are spread out somewhat evenly the default
  # mount point is based on this client's IP octet4 % number of HPC cache mount IPs.

  declare -a MOUNT_IPS="($(echo ${NFS_IP_CSV} | sed "s/,/ /g"))"
  HASH=$(hostname | cksum | cut -f 1 -d ' ')
  DEFAULT_MOUNT_INDEX=$((${HASH} % ${#MOUNT_IPS[@]}))
  ROUND_ROBIN_IP=${MOUNT_IPS[${DEFAULT_MOUNT_INDEX}]}

  DEFAULT_MOUNT_POINT="${BASE_DIR}/default"

  # no need to write again if it is already there
  if ! grep --quiet "${DEFAULT_MOUNT_POINT}" /etc/fstab; then
      echo "${ROUND_ROBIN_IP}:${NFS_PATH} ${DEFAULT_MOUNT_POINT} nfs hard,proto=tcp,mountproto=tcp,retry=30 0 0" >> /etc/fstab
      mkdir -p "${DEFAULT_MOUNT_POINT}"
      chown nfsnobody:nfsnobody "${DEFAULT_MOUNT_POINT}"
  fi
  if ! grep -qs "${DEFAULT_MOUNT_POINT} " /proc/mounts; then
      retrycmd_if_failure 12 20 mount "${DEFAULT_MOUNT_POINT}" || exit 1
  fi
}

Verwenden des DNS-Lastenausgleichs

In diesem Abschnitt werden die Grundlagen der Konfiguration eines DNS-Systems zum Verteilen von Clientverbindungen an alle Bereitstellungspunkte in Ihrem Azure HPC-Cache erläutert. Diese Methode berücksichtigt nicht den Datenverkehr, den jeder Client generiert, sondern stellt sicher, dass Clients gleichmäßig über alle Schnittstellen des Caches verteilt werden, anstatt nur ein oder zwei zu verwenden.

Dieses Dokument enthält keine Anweisungen zum Einrichten und Verwalten eines DNS-Servers für Ihre Clients in der Azure-Umgebung.

DNS ist nicht erforderlich, um Clients mithilfe des NFS-Protokolls und der IP-Adressen bereitstellen zu können. DNS wird benötigt, wenn Sie Domänennamen anstelle von IP-Adressen verwenden möchten, um Hardware-NAS-Systeme zu erreichen, oder wenn Ihr Workflow bestimmte erweiterte Protokolleinstellungen enthält.

Auf das DNS-System, das Sie zum Verteilen von Adressen an Clients verwenden, muss nicht über den HPC-Cache zugegriffen werden. In einigen Fällen möchten Sie möglicherweise ein benutzerdefiniertes DNS-System für den Cache selbst verwenden, aber das Konfigurieren dieses Systems ist viel komplizierter als das Einrichten dieser Art von Client-Roundrobin-System. Sie müssen den Azure-Support konsultieren, wenn Sie darüber nachdenken, den DNS-Server Ihres HPC-Caches in ein benutzerdefiniertes System zu ändern.

Konfigurieren der Round-Robin-Verteilung für Cache-Mount-Punkte

Ein RRDNS-System (Roundrobin DNS) leitet Clientanforderungen automatisch an mehrere Adressen weiter.

Um dieses System einzurichten, müssen Sie die Konfigurationsdatei des DNS-Servers so anpassen, dass beim Abrufen von Bereitstellungsanforderungen an die Hauptdomänenadresse des HPC-Caches der Datenverkehr zwischen allen Bereitstellungspunkten des HPC-Cachesystems zugewiesen wird. Clients stellen den HPC-Cache mithilfe ihres Domänennamens als Serverargument bereit und werden automatisch an die nächste Bereitstellungs-IP weitergeleitet.

Es gibt zwei Hauptschritte zum Konfigurieren von RRDNS:

  1. Ändern Sie die named.conf Datei Ihres DNS-Servers so, dass die zyklische Reihenfolge für Abfragen an Ihren HPC-Cache festgelegt wird. Diese Option veranlasst den Server, alle verfügbaren IP-Adressen zu durchlaufen. Fügen Sie eine Anweisung wie die folgende hinzu:

    options {
        rrset-order {
            class IN A name "hpccache.contoso.com" order cyclic;
        };
    };
    
  2. Konfigurieren Sie wie im folgenden Beispiel für jede verfügbare IP-Adresse A- und Zeigereinträge (PTR).

    Diese nsupdate Befehle bieten ein Beispiel für die ordnungsgemäße Konfiguration von DNS für einen HPC-Cache mit dem Domänennamen hpccache.contoso.com und drei Bereitstellungsadressen (10.0.0.10, 10.0.11 und 10.0.0.12):

    update add hpccache.contoso.com. 86400 A 10.0.0.10
    update add hpccache.contoso.com. 86400 A 10.0.0.11
    update add hpccache.contoso.com. 86400 A 10.0.0.12
    update add client-IP-10.contoso.com. 86400 A 10.0.0.10
    update add client-IP-11.contoso.com. 86400 A 10.0.0.11
    update add client-IP-12.contoso.com. 86400 A 10.0.0.12
    update add 10.0.0.10.in-addr.arpa. 86400 PTR client-IP-10.contoso.com
    update add 11.0.0.10.in-addr.arpa. 86400 PTR client-IP-11.contoso.com
    update add 12.0.0.10.in-addr.arpa. 86400 PTR client-IP-12.contoso.com
    

    Diese Befehle erstellen einen A-Eintrag für jede Bereitstellungsadresse des HPC-Caches und richten Zeigereinträge ein, um reverse DNS-Prüfungen entsprechend zu unterstützen.

    Das folgende Diagramm zeigt die grundlegende Struktur dieser Konfiguration.

    Diagramm der DNS-Konfiguration des Client-Bereitstellungspunkts.

Nachdem das RRDNS-System konfiguriert wurde, weisen Sie Ihren Clientcomputern an, sie zu verwenden, um die HPC-Cacheadresse in ihren Bereitstellungsbefehlen aufzulösen.

Nächste Schritte