Zu Hauptinhalten wechseln
pdf?stylesheet=default
Blackboard Help

Redis-Cache – Grundlagen für Administratoren

Der Building Block „Redis-Cache“ sorgt dafür, dass Redis vom Cache-Framework von Blackboard Learn als zusätzliche Speichermöglichkeit außerhalb des JVM-Heaps genutzt werden kann. Redis ist eine sehr leistungs- und im Netzwerk einsatzfähige, fortschrittliche Open-Source-Schlüsselwerte-Datenstruktur. Redis wird auch von Unternehmen wie Twitter, Craigslist, Github, Stackoverflow und Instagram genutzt.

Der Redis-Cache-Building Block wird von Blackboard Learn 9.1 SP 11 und höher unterstützt. 

Voraussetzungen

Der Redis-Cache-Building Block sorgt dafür, dass Redis vom Cache-Framework von Blackboard Learn als zusätzliche Speichermöglichkeit außerhalb des Heaps genutzt werden kann. Redis ist eine sehr leistungs- und im Netzwerk einsatzfähige fortschrittliche Open-Source-Schlüsselwerte-Datenstruktur. Redis wird auch von Unternehmen wie Twitter, Craigslist, Github, Stackoverflow und Instagram genutzt.

Wesentliche Vorteile hinsichtlich Leistung, Skalierbarkeit und Verfügbarkeit

  • Verbesserter Durchsatz bei Anforderungen und schnellere Antwortzeiten

  • Kein Risiko eines Leistungsabfalls

  • Der Cache wird von allen Anwendungsservern gemeinsam verwendet und die wichtigsten Daten werden lokal gespeichert

  • Der Cache steht bei JVM-Heap-Auslastung zur Verfügung

  • Ermöglicht eine Skalierung des Systems bei verwaltbarer JVM-Heap-Größe

  • Größerer Cache und schnellerer Überlaufspeicher

  • Schnelle und effiziente Serialisierung von Objekt-Graphen

  • Asynchrone PUTs und Updates per Write-behind-Strategie

  • Verbessert die Off-Heap-Caching-Möglichkeiten

  • Verringert den Overhead der On-Heap-Clusterannulierung

  • Caches, die auch bei Anwendungsneustarts und -abstürzen erhalten bleiben

  • Umfassende Überwachungsfunktionen zur vorbeugenden Wartung und Fehlerbehebung

Überwachung von Redis-Cache-Server

B2 Version 1.2 und höher: Überwachung von Redis-Cache-Server ist über den Link „Redis-Cache“ link unter „Tools und Funktionen“ auf der Haupt-Systemadministratorseite verfügbar.

B2 Version 1.1 und früher: Auf die Überwachung von Redis-Cache-Server kann über die Administratorkonsole zugegriffen werden. Suchen Sie nach dem Navigationslink „Redis Cache“ im Hauptmenü. Wenn Sie die Administratorkonsole nicht installiert haben, können Sie auf die Überwachung von Redis-Cache-Server zugreifen, indem Sie manuell den Browser auf den URL Pfad richten: /webapps/bb-redis-cache-BBLEARN/execute/redisStats.

Wann benötigen Sie diesen Building Block?

Die Verwendung des Redis-Cache-Building Blocks empfiehlt sich, wenn ein oder mehrere der folgenden Umstände eintreten:

  • Hohe Cache-Eviction-Rate
  • Auslastung der Systemressourcen auf dem Datenbankserver
  • Hohe JVM -Heap-Auslastung
  • Hohe Auslastung von Ehcache-Festplattenauslagerung
  • Horizontal große Blackboard Learn-Bereitstellungen mit hohem Clustercache-Invalidierungs-Datenverkehr (benötigt einen zusätzlichen Schritt zum Reduzieren der Ehcache-Größe, um den Datenverkehr zu senken).

So installieren und aktivieren Sie den Redis-Cache-Building Block

Mit Hilfe von Software-Updates können Sie den Redis-Cache-Building Block direkt über die Systemadministration installieren. Sie können aber auch die Website Behind the Blackboard Downloads besuchen und den Redis-Cache-Building Block von dort herunterladen und manuell installieren.

Software-Updates

„Software-Updates“ finden Sie in der Systemadministration. Ist ein neuer Building Block verfügbar oder wurde ein Building Block aktualisiert, werden Sie durch sich verändernde Symbole darüber informiert. Klicken Sie einfach auf das Symbol Es sind Featured Building Blocks verfügbar und suchen Sie den Redis-Cache-Building Block. Klicken Sie auf  Installieren. Nachdem er installiert wurde, müssen Sie den Building Block verfügbar machen.

Behind the Blackboard Downloads

Laden Sie den Redis-Cache-Building Block von der Homepage Behind the Blackboard Downloads herunter. Er befindet sich unter der Übersicht der Building Blocks für Learn. Speichern Sie die Datei auf einem lokalen Laufwerk. Entpacken Sie die Paketdatei, um auf die  WAR-Datei zuzugreifen.

  1. Navigieren Sie zu Systemadministration > Building Blocks.
  2. Klicken Sie auf  Installierte Tools.
  3. Klicken Sie in der Aktionsleiste auf Building Blocks hochladen.
  4. Suchen Sie nach der WAR-Datei des Redis-Cache-Building Blocks.
  5. Klicken Sie auf  Senden.
  6. Wenn der Building Block installiert wurde, erhalten Sie eine Erfolgsmeldung. Setzen Sie den Building Block auf Aktiv und klicken Sie auf Genehmigen.

So aktivieren Sie Redis-Cache

  1. Installieren Sie einen Redis-Server. Eine schrittweise Anleitung finden Sie unter So installieren Sie Redis Server.
  2. Navigieren Sie in der Systemadministration zur Seite mit den Einstellungen für den Redis-Cache-Building Block.
  3. Wählen Sie die Liste der Caches aus, um Redis zu aktivieren.
  4. Geben Sie in den Feldern Host, Port und Kennwort die für die Verbindungseinstellungen für Redis erforderlichen Werte ein.
  5. Klicken Sie auf Senden.
  6. Stellen Sie sicher, dass der Redis-Server-Port und die RMI-Ports zwischen dem Redis-Server und den Learn-Anwendungsservern geöffnet sind.
  7. Starten Sie alle Learn-Anwendungsserver neu (für die Produktivumgebung empfiehlt sich ein Rolling Restart).
  8. Navigieren Sie in der Systemadministration zu der Seite, die den Redis-Verbindungsstatus anzeigt.
  9. Überprüfen Sie, ob sämtliche Anwendungsserver mit Redis verbunden sind.

So installieren Sie Redis Server

Für die folgenden Schritte wird vorausgesetzt, dass Sie Redis unter Red Hat Enterprise Linux 6 installieren.

  1. Bereiten Sie einen Linux-Server vor. Es wird dringend empfohlen, einen dedizierten Rechner oder eine dedizierte VM-Instanz zu verwenden. Führen Sie Redis nicht unter Windows oder Solaris aus. Blackboard Learn unter Windows oder Solaris kann Redis unter Linux nutzen.
    1. Setzen Sie die Einstellung für die Mehrfachvergabe von Arbeitsspeicher für den Linux-Kernel auf 1, indem Sie zu /etc/sysctl.conf die Angabe vm.overcommit_memory=1 hinzufügen. Starten Sie den Server neu oder führen Sie den Befehl sysctl.vm.overcommit_memory=1 aus, damit die Änderung wirksam wird. Eine Erklärung hierzu finden Sie unter FAQ zu Redis.

      Bei Redis handelt es sich um einen Single-Threaded-Server. Für ihn sind eher schnelle CPUs mit großem Cache als solche mit zahlreichen Kernen geeignet. Intel-CPUs sind derzeit als am besten geeignet zu empfehlen. Laut Redis-Dokumentation ist es nicht unüblich, dass mit einer AMD Opteron-CPU im Vergleich zu ähnlichen Nehalem-EP-, Westmere-EP- oder Sandy-Bridge-CPUs von Intel nur die Hälfte der Leistung erzielt wird.

    2. Der Redis-Durchsatz wird durch das Netzwerk deutlich mehr eingeschränkt als durch die CPU. Verwenden Sie schnelle und/oder mehrere NICs.
    3. (Optional) Redis wird auf einer VM langsamer ausgeführt, weshalb die Ausführung auf einem physischen System empfohlen wird.
  2. Laden Sie die neueste stabile Version von Redis herunter und richten Sie sie ein.

    wget http://redis.googlecode.com/files/redis-x.x.xx.tar.gz
    tar xzf redis-x.x.xx.tar.gz
    mv redis-x.x.xx /usr/local/redis
    cd /usr/local/redis
    make

  3. Bereiten Sie die Konfigurationsdatei für den Redis-Server vor, indem Sie $REDIS_HOME/redis.conf kopieren. Legen Sie folgende Eigenschaften fest:

    daemonize yes # Use "no" when run under daemontools.
    pidfile /var/run/redis/redis_6379.pid
    port 6379
    timeout 300 # Reclaim inactive connections (seconds).
    tcp-keepalive 0 # Keep connections live from network tools likefirewall.
    loglevel notice # Keep it moderately verbose.
    logfile /var/log/redis/redis_6379.log
    databases 1
    #save 900 1 # Disable snapshotting.
    #save 300 10 # Disable snapshotting.
    #save 60 10000 # Disable snapshotting.
    requirepass xxxx # Use at least 16 characters with mix lowercase and uppercase
    # characters, numbers, and symbols. Try not to use words or
    # phrases in your password.
    maxclients 100000
    maxmemory xxxx # Make sure Redis doesn't use swap (bytes).
    maxmemory-policy volatile-lru # We use expire.
    maxmemory-samples 3
    appendonly no
    slowlog-log-slower-than 50000 # Execution time threshold (microseconds).
    slowlog-max-len 128 # Length of the slow log.

  4. Fügen Sie unter root ein Stammverzeichnis für Redis hinzu.

    # Redis
    export REDIS_HOME=/usr/local/redis

  5. Erstellen Sie einen Redis-user.

    useradd -d /home/redis -s /bin/sh redis
    chown -R redis:redis $REDIS_HOME
    chmod 700 $REDIS_HOME

  6. Bereiten Sie das Redis-Init-Skript vor.

    cp utils/redis_init_script /etc/init.d/redis_6379

  7. Konfigurieren Sie das Redis-Init-Skript.

    # chkconfig: - 85 15
    # description: Redis is a persistent key-value database
    # processname: redis
    REDISUSER="redis"
    REDISPORT=6379
    EXEC=/usr/local/redis/src/redis-server
    CLIEXEC=/usr/local/redis/src/redis-cli
    PIDFILE=/var/run/redis/redis_6379.pid
    CONF="/usr/local/redis/6379.conf"
    $EXEC $CONF ==change to==> /bin/su - $REDISUSER -c "$EXEC $CONF"

  8. Aktivieren Sie den Redis-Dienst.

    mkdir /var/run/redis/var/log/redis
    chown redis:adm /var/run/redis /var/log/redis
    sudo chmod 750 /var/log/redis
    cd /etc/init.d
    chkconfig --add redis_6379

  9. Starten Sie den Redis-Server.

    service redis start

Sicherheit

Absichern des Redis-Servers

Der Redis-Server wird in zweifacher Hinsicht abgesichert:

  • Durch Konfiguration geeigneter Sicherheitseinstellungen für die Redis-Anwendung.
  • Durch die sichere Konfiguration des Servers, auf dem Redis ausgeführt wird.

Bei der Konfiguration der Redis-Sicherheitseinstellungen ist darauf zu achten, dass die Redis-Anwendung intern bestmöglich abgesichert wird. Die sichere Konfiguration des Servers betrifft die Einstellungen und Konfigurationen des Servers, mit denen der Server und die Redis-Anwendung, ohne Berücksichtigung der Anwendung selbst, abgesichert werden. In den folgenden Abschnitten werden diese beiden Arten der Konfiguration beschrieben.

Redis-Sicherheitseinstellungen

Die beiden wichtigsten Einstellungen für den Redis-Server selbst sind Folgende:

  • Verwenden eines sicheren Kennworts für Redis
  • Sperren des Zugriffs auf bestimmte Redis-Befehle

Weitere Informationen zur empfohlenen Sicherheitskonfiguration für Redis finden Sie unter Redis-Sicherheit.

Redis-Kennwort

Der Redis-Server ist bei seriellen String-Lookups sehr effizient, und genau darum handelt es sich bei der Lookup-Anfrage für das Redis-Kennwort. Außerdem wird das Redis-Kennwort nur von der Blackboard-Anwendung angefordert. Die Benutzer müssen es sich nicht merken. Daher sollte das verwendete Kennwort wesentlich sicherer sein als üblicherweise. Während Sie sich bei der Festlegung der Kennwortlänge normalerweise nach den  OWASP-Richtlinien zur Länge und Komplexität von Kennwörtern richten sollten, müssen in diesem Fall bei der Auswahl von Kennwörtern die Konventionen zur Berücksichtigung ihrer Merkfähigkeit nicht beachtet werden, da die Endbenutzer sich dieses Kennwort nicht merken müssen.

Richtlinie Grund
Verwenden Sie mindestens 16 Zeichen, anstelle von 8. Ein Brute-Force-Angriff würde n hoch 8 Mal solange brauchen, wie für ein aus 8 Zeichen bestehendes Kennwort, was das übliche Minimum ist.
Kombinieren Sie Klein- und Großbuchstaben, Ziffern und Symbole. Wie bei normalen Kennwörtern wird durch das Kombinieren von Klein- und Großbuchstaben, Ziffern und Symbolen die Wahrscheinlichkeit eines erfolgreichen Wörterbuchangriffs (Dictionary Attack) reduziert und die Komplexität zum Schutz vor Brute-Force-Angriffen erhöht, da alle Arten von Zeichen überprüft werden müssen.
Verwenden Sie möglichst keine Wörter oder Sätze in Ihrem Kennwort. Da sich niemand diese Kennwort merken muss, können Sie das Risiko von Wörterbuchangriffen vollständig ausschalten, indem Sie keine Wörter oder Sätze verwenden.

Die Kennworteinstellung selbst muss mit der requirepass-Anweisung zur Redis-Konfigurationsdatei hinzugefügt werden. Beispiel:

requirepass ^a@$4J0|-|k!4P+f%

Sperren von Redis-Befehlen

Da Redis von Blackboard nur als Cache genutzt wird, gibt es eine Reihe von Befehlen, die nicht benötigt werden. Einige dieser Befehle könnten von einem böswilligen Benutzer dazu missbraucht werden, Denial-of-Service-Angriffe über Cache-Fehler oder durch Ausführen des Servers außerhalb des Bereichs durchzuführen, oder auch eine Gefährdung der Datensicherheit darstellen, da die Möglichkeit besteht, dass böswillige Benutzer sämtliche Cache-Daten auslesen. Redis stellt eine Oberfläche zum Ändern bzw. vollständigen Löschen dieser Befehle bereit, was von Blackboard für einige ganz bestimmte Befehle empfohlen wird:

Schlüssel Grund für die Empfehlung zum Löschen
APPEND Erlaubt die Änderung von Schlüsseln, um Cache-Fehler zu erzwingen
BGSAVE Befehl, der den Datensatz auf Festplatte speichert, was die Datensicherheit gefährden könnte, wenn ein Benutzer die Datei erhält
RENAME Benennt einen Schlüssel um, wodurch Cache-Fehler erzwungen würden
SAVE Siehe BGSAVE
SPOP "Entfernt ein zufälliges Element aus dem Satz"
SREM "Entfernt ein oder mehrere Elemente aus dem Satz"

Um diese Befehle zu sperren, fügen Sie der Redis-Konfigurationsdatei folgende Zeilen hinzu:

rename-command APPEND ""
rename-command BGSAVE ""
rename-command RENAME ""
rename-command SAVE ""
rename-command SPOP ""
rename-command SREM ""

Indem Sie die betreffenden Befehle jeweils in eine leere Zeichenfolge umbenennen, sperren Sie jeglichen Zugriff darauf. Darüber hinaus sollten auch alle neu erstellten Redis-Befehle auf diese Weise gesperrt werden, da der Building Block sie nicht benötigt.

Sichere Serverkonfiguration

Zur Absicherung des Servers, auf dem Redis ausgeführt wird, ist dafür zu sorgen, dass nur diejenigen Benutzer auf den Redis-Server zugreifen können, die diesen Zugriff tatsächlich benötigen, und außerdem nicht autorisierte Zugriffe auf die Redis-Anwendung über Datei- und Netzwerkberechtigungen zu verhindern.

Ausführen von Redis ohne Root-Kontext

Auf Linux-Rechnern hat der Root-Benutzer uneingeschränkten Zugriff auf alle Dateien im System, unabhängig von den vorhandenen Berechtigungen oder Zugriffsbeschränkungen. Deshalb ist es gefährlich, zur Ausführung von Anwendungen den Account des Root-Benutzers zu verwenden, da ein böswilliger Benutzer mit einem darauf angelegten Angriff den Account, mit dem die betreffende Anwendung ausgeführt wird, unter seine Kontrolle bringen könnte. Da Redis keine solche Zugriffsberechtigung auf das System benötigt, sollte ein Benutzer-Account zur Installation und Ausführung der Redis-Anwendung verwendet werden, das lediglich über die zur Ausführung von Redis erforderlichen Berechtigungen verfügt.

Blackboard empfiehlt, diesen Account ausschließlich für die Ausführung des Redis-Servers zu verwenden. Der Account sollte keinerlei Berechtigung für das Betriebssystem oder andere Anwendungen oder Daemons, die auf diesem Server ausgeführt werden, besitzen.

Absichern der Redis-Konfigurationsdatei

Das vom Redis-Server verwendete Kennwort (siehe weiter oben) wird im Klartext in der Konfigurationsdatei gespeichert. Dies kann von Blackboard nicht beeinflusst werden, da es in Redis derzeit so gehandhabt wird. Daher müssen Sie den Kreis der Benutzer einschränken, die Zugriff auf die Datei erhalten sollen. Der Zugriff sollte auf den Benutzer beschränkt werden, der die Redis-Anwendung ausführt.

Führen Sie zu diesem Zweck folgenden Befehl aus, wobei davon ausgegangen wird, dass der Name der Redis-Konfigurationsdatei redis.conf lautet:

chown 600 redis.conf

Blockieren des unnötigen Datenverkehrs zum Redis-Server

Auf den Redis-Server sollte, sofern Redis die einzige Anwendung ist, die darauf ausgeführt wird, nicht über das offene Internet zugegriffen werden können. Ein Zugriff auf diesen Server sollte nur in folgenden Situationen möglich sein:

  • Ein Administrator muss auf dem Redis-Server arbeiten
  • Blackboard kommuniziert über den Redis-Port

Hierdurch wird verhindert, dass nicht autorisierte Benutzer versuchen, den Redis-Server zum Absturz zu bringen, unzulässige Befehle in Redis auszuführen usw. Sofern der standardmäßige Redis-Port 6379 verwendet wird, fügen Sie der Firewall für diesen Server Regeln folgender Art hinzu:

Regel Erklärung
Blockieren Sie den gesamten Datenverkehr zum und vom Server Außer bei folgenden Ausnahmen sollte dies das Standardverhalten sein.
Erstellen Sie eine Ausnahme für Loopback-Anforderungen Der Server sollte Zugriff auf sich selbst haben, zumindest für die Überwachung eingehender Anforderungen an Redis mit Hilfe von redis-cli commandmonitor.
Erstellen Sie eine Ausnahme für den Datenverkehr von und zu den Blackboard-Servern ausschließlich über den Redis-Port Der Blackboard-Server sollte über den Port 6379 mit Redis kommunizieren können und Blackboard sollte Antworten vom Redis-Server empfangen können.
Erstellen Sie eine Ausnahme, um die Remote-Administration von einem bestimmten Computer aus zu ermöglichen Administratoren benötigen möglicherweise Zugriff auf den Server, um Redis zu aktualisieren, Protokolle zu überprüfen, die Leistung zu überwachen usw. Sofern ein Administrator keinen Direktzugriff auf den Computer hat, muss er remote auf den Server zugreifen können. Der SSH-Datenverkehr sollte auf einen einzelnen oder wenige Computer beschränkt sein, so dass Endbenutzer nicht über den Port 22 mit dem Server kommunizieren können.

Administratoren müssen ebenfalls Ausnahmen für umgebungsspezifische Elemente, wie z. B. benötigte gemeinsame Ressourcen, erstellen können. Hierbei wird es sich bei jeder Institution um andere handeln.

Implementieren der Überwachung des Datenverkehrs

Zur Vorbeugung gegen einem Angriff auf den Redis-Server von einer externen Quelle sollte irgendein Schutzmechanismus gegen Eindringen in das System eingerichtet sein. Folgende Elemente können beispielsweise überwacht werden, um möglicherweise schädlichen Datenverkehr zu kennzeichnen oder vollständig zu löschen:

  1. Wenn von einer anderen Quelle als einem Blackboard-Anwendungsserver oder Systemverwaltungsserver versucht wird, auf den Redis-Server zuzugreifen, sollte dies gekennzeichnet werden.
  2. Bei Eingabe eines falschen Kennworts sollte dies gekennzeichnet werden.
  3. Wenn zu viele Anfragen von einer einzigen Stelle aus an den Redis-Server gesendet werden, kennzeichnen Sie den Datenverkehr. Die Überwachung typischer Nutzungsmuster sowie Prognosen in Bezug auf Grenzfälle (z. B. in einer Woche, in der Abschlussprüfungen stattfinden) können nützlich sein, um zu ermitteln, wie viele Anfragen pro Minute zu erwarten sind.

Durch die Implementierung dieser Regeln zum Schutz vor Eindringlingen können Sie besser feststellen, ob versucht wird, unbefugt auf den Redis-Server oder die Redis-Anwendung zuzugreifen.

Building Block-Berechtigungen

Java-Typ Name Aktionen Warum ist diese Berechtigung erforderlich?
persist * *
  • Über die Seite "Einstellungen" müssen Konfigurationsdaten in die SYSTEM_REGISTRY-Tabelle geladen und persistent gespeichert werden.
  • Speichert und lädt Redis-Server- und Cache-Statistiken über die angegebene Dauer in die Statistikdatenbank zur Durchführung von Trendanalysen.
java.io.FilePermission 1. BB_HOME/-

2. BB_CONTENT/-

3. "${java.home}/-

1. Lesen, Schreiben, Löschen (read, write, delete)

2. Lesen, Schreiben, Löschen (read, write, delete)

3. Lesen

  • Liest Eigenschaftendateien im Stammverzeichnis von Blackboard Learn.
  • Speichert einen für eine Learn-Instanz eindeutigen Hash-Wert, der von allen Learn-Anwendungsservern innerhalb eines Clusters gemeinsam verwendet wird. Er wird im Redis-Cache-Schlüssel verwendet, um Datenkonflikte aufgrund der Nutzung des Redis-Caches durch eine andere Learn-Instanz oder andere Anwendungen zu vermeiden.
  • Ehcache-Funktion für Festplatten-Overflow
java.lang.reflect.
ReflectPermission
suppressAccessChecks * Wird vom Spring-Framework und einem Framework zur Serialisierung von Objekt-Graphen, Kryo, verwendet.
java.lang.
RuntimePermission
* * Wird von verschiedenen Blackboard Learn-Komponenten, einschließlich Protokolldiensten und Dienst-Managern, verwendet.
java.net.
SocketPermission
* Verbinden, Annehmen, Auflösen, Warten (connect, accept, resolve, listen) Verbindung mit dem Redis-Server und Peer-Blackboard Learn-Anwendungsknoten.
javax.management.
MBeanServerPermission
* * Dient zum Anzeigen der Cache-Statistik für MBean.
javax.management.
MBeanPermission
* * Dient zum Anzeigen der Cache-Statistik für MBean.
attribute user.authinfo Abrufen (get) Ruft Benutzerfunktionen für Operationen ab.