Heim >Datenbank >Redis >Datenwiederherstellung nach Serverabsturz mit Redis

Datenwiederherstellung nach Serverabsturz mit Redis

尚
nach vorne
2020-04-23 09:11:432425Durchsuche

Datenwiederherstellung nach Serverabsturz mit Redis

Da Redis im Speicher gespeichert wird und Datenstrukturspeichertypen bereitstellt, die üblicherweise in allgemeinen Programmiersprachen verwendet werden, wird es häufig für die Datenwiederherstellungsverarbeitung verwendet, wenn Server abstürzen.

Der Server kann die Daten, die während bestimmter bestimmter Prozesse in Redis gespeichert werden müssen, in Form von JSON-Objekten speichern. Dies wird häufig als Snapshot bezeichnet. Wenn der Server ausgeführt wird, wird Redis gelesen, um festzustellen, ob Es muss wiederhergestellt werden. Die Daten werden weiterhin verarbeitet.

Löschen Sie einfach die Redis-Daten, nachdem ein Geschäftsprozess abgeschlossen ist.

Redis bietet zwei Methoden zum Exportieren von Speicherdaten auf die Festplatte zur Datensicherung:

RDB-Modus (Standard)

Die Persistenz im RDB-Modus erfolgt durch Snapshotting (Snapshotting). Abgeschlossen, Wenn bestimmte Bedingungen erfüllt sind, erstellt Redis automatisch einen Snapshot aller Daten im Speicher und speichert sie auf der Festplatte. Die Bedingungen für die Erstellung eines Snapshots können vom Benutzer in der Konfigurationsdatei angepasst werden und bestehen aus zwei Parametern: Zeit und Anzahl der geänderten Schlüssel. Ein Snapshot wird erstellt, wenn die Anzahl der Schlüssel, die innerhalb der angegebenen Zeit geändert wurden, größer als der angegebene Wert ist. RDB ist die von Redis verwendete Standardpersistenzmethode. In der Konfigurationsdatei wurden drei Bedingungen voreingestellt:

save 900 1 # Wenn mindestens 1 Schlüssel innerhalb von 900 Sekunden geändert wird, wird ein Snapshot erstellt

speichern 300 10 # Machen Sie einen Schnappschuss, wenn mindestens 10 Schlüssel innerhalb von 300 Sekunden geändert wurden

speichern Sie 60 10000 # Machen Sie einen Schnappschuss, wenn mindestens 10000 Schlüssel innerhalb von 60 Sekunden geändert wurden

Kann mehrfach vorhanden sein. Es gibt mehrere Bedingungen und es besteht eine „ODER“-Beziehung zwischen den Bedingungen. Solange eine der Bedingungen erfüllt ist, wird ein Schnappschuss erstellt. Wenn Sie automatische Snapshots deaktivieren möchten, löschen Sie einfach alle Speicherparameter.

Redis speichert die Snapshot-Datei standardmäßig in der Datei dump.rdb im aktuellen Verzeichnis (das über CONFIG GET dir angezeigt werden kann). Sie können den Speicherpfad und den Dateinamen der Snapshot-Datei durch Konfigurieren angeben die Parameter dir und dbfilename.

Der Prozess der Redis-Implementierung von Snapshots

Redis verwendet die Fork-Funktion, um eine Kopie (untergeordneter Prozess) des aktuellen Prozesses (übergeordneter Prozess) zu kopieren;

Der übergeordnete Prozess wird fortgesetzt um vom Terminal gesendete Kundenbefehle zu empfangen und zu verarbeiten, und der Unterprozess beginnt, die Daten im Speicher in eine temporäre Datei auf der Festplatte zu schreiben.

Wenn der Unterprozess alle Daten schreibt, wird er ausgeführt Ersetzt die alte RDB-Datei bisher durch die temporäre Datei Ein Snapshot-Vorgang ist abgeschlossen.

Beim Ausführen von Fork verwendet das Betriebssystem (Unix-ähnliches Betriebssystem) die Copy-on-Write-Strategie. Das heißt, die übergeordneten und untergeordneten Prozesse nutzen zum Zeitpunkt der Ausführung der Fork-Funktion dieselben Speicherdaten Wenn der übergeordnete Prozess ein bestimmtes Datenelement ändern möchte (z. B. das Ausführen eines Schreibbefehls), kopiert das Betriebssystem das Datenelement, um sicherzustellen, dass die Daten des untergeordneten Prozesses nicht betroffen sind, also die neue RDB Die Datei speichert die Speicherdaten zum Zeitpunkt der Ausführung des Forks.

Redis ändert die RDB-Datei während des Snapshot-Vorgangs nicht. Die alte Datei wird erst nach Abschluss des Snapshots durch eine neue ersetzt, was bedeutet, dass die RDB-Datei jederzeit vollständig ist. Dadurch können wir die Redis-Datenbanksicherung implementieren, indem wir regelmäßig RDB-Dateien sichern. Die RDB-Datei ist ein komprimiertes Binärformat (der Parameter rdbcompression kann so konfiguriert werden, dass die Komprimierung deaktiviert wird, um CPU-Auslastung zu sparen), sodass der belegte Speicherplatz kleiner ist als die Datengröße im Speicher, was die Übertragung erleichtert.

Zusätzlich zu automatischen Snapshots können Sie den Befehl SAVE oder BGSAVE auch manuell senden, damit Redis den Snapshot ausführen kann. Der Unterschied zwischen den beiden Befehlen besteht darin, dass ersterer vom Hauptprozess ausgeführt wird und andere Anforderungen blockiert Letzteres wird über fork ausgeführt. Der untergeordnete Prozess führt Snapshot-Vorgänge aus. Nachdem Redis gestartet wurde, liest es die RDB-Snapshot-Datei und lädt die Daten von der Festplatte in den Speicher. Diese Zeit variiert je nach Größe und Struktur der Daten und Serverleistung. Normalerweise dauert es 20 bis 30 Sekunden, um eine 1 GB große Snapshot-Datei, die 10 Millionen Zeichenfolgenschlüssel aufzeichnet, in den Speicher zu laden. Persistenz wird durch RDB erreicht. Sobald Redis abnormal beendet wird, gehen alle nach dem letzten Snapshot geänderten Daten verloren. Dies erfordert, dass Entwickler mögliche Datenverluste innerhalb eines akzeptablen Bereichs kontrollieren, indem sie automatische Snapshot-Bedingungen basierend auf bestimmten Anwendungsszenarien kombinieren und festlegen. Wenn die Daten so wichtig sind, dass sie keinen Verlust zulassen, können Sie für die Persistenz die Verwendung der AOF-Methode in Betracht ziehen.

AOF-Modus

Standardmäßig aktiviert Redis die AOF-Persistenz (Append Only File) nicht. Sie kann über den appendonly-Parameter in redis.conf aktiviert werden:

appendonly ja

Beim Start führt Redis die Befehle in der AOF-Datei nacheinander aus, um die Daten von der Festplatte in den Speicher zu laden.

Aktivieren Sie AOF Persistenz: Jedes Mal, wenn ein Befehl ausgeführt wird, der die Daten in Redis ändert, schreibt Redis den Befehl in die AOF-Datei auf der Festplatte. Der Speicherort der AOF-Datei ist derselbe wie der Speicherort der RDB-Datei. Beide werden über den Parameter dir festgelegt. Der Standarddateiname lautet appendonly.aof und kann über den Parameter appendfilename geändert werden:

appendfilename appendonly.aof

Konfigurieren Sie die Bedingungen für Redis, um AOF-Dateien automatisch neu zu schreiben

auto-aof-rewrite-percentage 100 # Wenn die aktuelle AOF-Dateigröße den Prozentsatz der AOF-Dateigröße während überschreitet Beim letzten Neuschreiben wird es erneut durchgeführt. Wenn es noch nicht neu geschrieben wurde, basiert es auf der AOF-Dateigröße beim Start

auto-aof-rewrite-min-size 64mb # Die minimale AOF Dateigröße, die neu geschrieben werden darf

Konfigurieren Sie den Mechanismus, der erfordert, dass das System den Festplatten-Cache nach dem Schreiben einer AOF-Datei aktualisiert

# appendfsync immer # Die Synchronisierung wird jedes Mal durchgeführt, wenn ein Schreibvorgang ausgeführt wird, was am sichersten und langsamsten ist

appendfsync everysec # Führt jede Sekunde einen Synchronisierungsvorgang durch

# appendfsync no # Führt Synchronisierungsvorgänge nicht aktiv durch, sondern überlässt dies vollständig dem Betriebssystem (d. h. einmal alle 30 Sekunden), was am schnellsten ist und am unsichersten

Redis ermöglicht das gleichzeitige Öffnen von AOF und RDB, was nicht nur die Datensicherheit gewährleistet, sondern auch Backup- und andere Vorgänge sehr einfach macht. Nach dem Neustart von Redis zu diesem Zeitpunkt verwendet Redis die AOF-Datei zum Wiederherstellen der Daten, da durch die AOF-Persistenz möglicherweise weniger Daten verloren gehen

redis = require('redis'),//导入js模块
RDS_PORT = ,        //端口号
RDS_HOST = '',    //服务器IP
RDS_OPTS = {},            //设置项
redisdb = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);//创建连接
 
redisdb.select(20);//指定分区库
 
redisdb.on('ready', function (res) {
    console.log('ready');
});
 
redisdb.on('connect', function () {
    console.log('connect');
});
exports.redisdb = redisdb;
 
function redis_opt(opt, key, value, callback) {
 
    if (opt == 'get') {
        redisdb.get(key, function (err, data) {
            if (err == null) {
                callback(data);
            }
            else {
                callback(err);
            }
        });
    }
    else if (opt == 'set')
    {
        redisdb.set(key,value, function (err,result) {
            if (err == null) {
                callback(result);
            }
            else {
                callback(err);
            }
        });
    }
    else if (opt == 'del')
    {
        redisdb.del(key, function (err, result) {
            if (err == null) {
                callback(result);
            }
            else {
                callback(err);
            }
        });
    }
    else
    {
        callback("error opt!");
    }
    
}
 
function update(key)
{
    redis_opt("get", key, null, function (data) {
        console.log("the redis data is " + data);
        if (data) {
            count = parseInt(data);
            redis_opt("set", key, ++count , function (data) {
                console.log("set " + count  + " " + data);
            });  
        }
        else {
            redis_opt("set", key, 10000, function (data) {
                console.log("set " + 10000 + " " + data);
            });  
        }
    });
 
 
 
 
 
    
 
 
   
 
 
}
 
function clear(key)
{
    redis_opt("del", key, null, function (ret) {
        console.log("del " + key + " " + ret);
    });  
}
 
 
 
function main()
{
 
    var key = "count_test";
 
    setInterval(function () { clear(key) }, 5000);
 
    setInterval(function () { update(key) }, 1000);
 
}
 
 
 
 
//testmain();
 
 
main();

Der obige Code ist eine einfache Timerfunktion, das heißt, er wird regelmäßig nach dem gelesen Die Redis-Daten werden kumulativ geändert, wenn sie vorhanden sind, und initialisiert, wenn sie nicht vorhanden sind. Gleichzeitig wird zur Vereinfachung der Erklärung ein Timer eingestellt, um die Daten regelmäßig zu löschen.

Datenwiederherstellung nach Serverabsturz mit Redis

Datenwiederherstellung nach Serverabsturz mit Redis

Weitere Redis-Kenntnisse finden Sie in der Spalte Redis-Einführungs-Tutorial.

Das obige ist der detaillierte Inhalt vonDatenwiederherstellung nach Serverabsturz mit Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen