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.serververwenden, um eine Liste von Servern konsistent zu hashenlocal 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.