Zum Inhalt

jump-consistent-hash: Konsistenter Hash für nginx-module-lua

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-jump-consistent-hash

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-jump-consistent-hash

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-jump-consistent-hash v0.1.4, veröffentlicht am 09. Mai 2016.


Eine einfache Implementierung von diesem Papier.

Funktionen

  • kleiner Speicherbedarf und schnell
  • Konsistenz wird durch das Aktualisieren der Server aufrechterhalten

Verwendung

  • Sie können das grundlegende jchash-Modul verwenden, um einen konsistenten Hash zu erstellen

    local jchash = require "resty.chash.jchash"
    
    local buckets = 8
    local id = jchash.hash_short_str("random key", buckets)
    

  • oder Sie können das Wrapper-Modul resty.chash.server verwenden, um eine Liste von Servern konsistent zu hashen

    local jchash_server = require "resty.chash.server"
    
    local my_servers = {
        { "127.0.0.1", 80, 1},   -- {addr, port, weight} Gewicht kann weggelassen werden, wenn es 1 ist
        { "127.0.0.2", 80 },
        { "127.0.0.3", 80 }
    }
    
    local cs, err = jchash_server.new(my_servers)
    local uri = ngx.var.uri
    local svr = cs:lookup(uri)
    local addr = svr[1]
    local port = svr[2]
    
    -- jetzt können Sie den ngx.balancer verwenden, um ein konsistentes LB durchzuführen
    
    -- Sie können sogar die Serverliste aktualisieren und trotzdem die Konsistenz aufrechterhalten, z.B.
    local my_new_servers = {
        { "127.0.0.2", 80 },
        { "127.0.0.3", 80 },
        { "127.0.0.4", 80 }
    }
    
    cs:update_servers(my_new_servers)
    svr = cs:lookup(uri)   -- wenn der Server 127.0.0.2 war, bleibt er gleich,
                           -- da wir nur die 127.0.0.4 aktualisieren.
    
    -- was noch wichtiger ist, die Konsistenz bleibt auch erhalten, wenn sich die Anzahl der Server ändert! z.B.
    local my_less_servers = {
        { "127.0.0.2", 80 },
        { "127.0.0.3", 80 }
    }
    cs:update_servers(my_less_servers)
    svr = cs:lookup(uri)   -- wenn der Server 127.0.0.2 war, bleibt er gleich,
                           -- wenn der Server 127.0.0.4 war, hat er eine 50%ige Chance,
                           -- 127.0.0.3 oder 127.0.0.4 zu sein
    
    cs:update_servers(my_new_servers)
    svr = cs:lookup(uri)   -- wenn der Server 127.0.0.2 war, hat er eine 66%ige Chance, gleich zu bleiben
    

Test

make test

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-jump-consistent-hash.