Zum Inhalt

stream-upsync: NGINX-Modul zum Synchronisieren von Stream-Backends von Consul oder etcd

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-stream-upsync
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 nginx-module-stream-upsync

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_stream_upsync_module.so;

Dieses Dokument beschreibt nginx-module-stream-upsync v1.2.2, veröffentlicht am 02. Januar 2020.


nginx-consul:

stream {
    upstream test {
        upsync 127.0.0.1:8500/v1/kv/upstreams/test/ upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;

        include /usr/local/nginx/conf/servers/servers_test.conf;
    }

    upstream bar {
        server 127.0.0.1:8090 weight=1 fail_timeout=10 max_fails=3;
    }

    server {
        listen 12345;

        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass test;
    }

    server {
        listen 2345;

        upstream_show
    }

    server {
        listen 127.0.0.1:9091;

        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass bar;
    }
}
nginx-etcd:
stream {
    upstream test {
        upsync 127.0.0.1:2379/v2/keys/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=etcd strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;

        include /usr/local/nginx/conf/servers/servers_test.conf;
    }

    upstream bar {
        server 127.0.0.1:8090 weight=1 fail_timeout=10 max_fails=3;
    }

    server {
        listen 12345;

        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass test;
    }

    server {
        listen 2345;

        upstream_show
    }

    server {
        listen 127.0.0.1:9091;

        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass bar;
    }
}
upsync_lb:
stream {
    upstream test {
        least_conn; //hash $uri consistent;

        upsync 127.0.0.1:8500/v1/kv/upstreams/test/ upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
        upsync_lb least_conn; //hash_ketama;

        include /usr/local/nginx/conf/servers/servers_test.conf;
    }

    upstream bar {
        server 127.0.0.1:8090 weight=1 fail_timeout=10 max_fails=3;
    }

    server {
        listen 12345;

        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass test;
    }

    server {
        listen 2345;

        upstream_show
    }

    server {
        listen 127.0.0.1:9091;

        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass bar;
    }
}

HINWEIS: Der Befehl include für upstream ist notwendig, beim ersten Mal sollte die dump-Datei alle Server enthalten.

Beschreibung

Dieses Modul bietet eine Methode zur Entdeckung von Backend-Servern. Es unterstützt das dynamische Hinzufügen oder Löschen von Backend-Servern über Consul/etcd und das dynamische Anpassen des Gewichts der Backend-Server. Das Modul zieht rechtzeitig die neue Liste der Backend-Server von Consul/etcd, um den NGINX-IP-Router zu synchronisieren. NGINX muss nicht neu geladen werden. Es hat einige Vorteile gegenüber anderen:

  • zeitnah

    Das Modul sendet den Schlüssel an Consul/etcd mit einem Index. Consul/etcd vergleicht diesen mit seinem Index. Wenn sich der Index nicht ändert, bleibt die Verbindung fünf Minuten bestehen. In dieser Zeit wird jede Operation am Schlüssel-Wert sofort zurückgemeldet.

  • Leistung

    Das Abrufen von Consul/etcd entspricht einer Anfrage an NGINX. Das Aktualisieren des IP-Routers erfordert kein Neuladen von NGINX, sodass die Auswirkungen auf die Leistung von NGINX gering sind.

  • Stabilität

    Selbst wenn ein Abruf fehlschlägt, wird der nächste upsync_interval abgerufen, sodass garantiert ist, dass der Backend-Server stabil Dienste bereitstellt. Zudem wird das Dumpen der neuesten Konfiguration an einen Speicherort unterstützt, sodass NGINX jederzeit neu geladen werden kann, selbst wenn Consul/etcd ausfällt.

Direktiven

upsync

syntax: upsync $consul/etcd.api.com:$port/v1/kv/upstreams/$upstream_name/ [upsync_type=consul/etcd] [upsync_interval=Sekunden/Minuten] [upsync_timeout=Sekunden/Minuten] [strong_dependency=off/on]
default: none, wenn Parameter weggelassen werden, sind die Standardparameter upsync_interval=5s upsync_timeout=6m strong_dependency=off

context: upstream

description: Ziehen Sie Upstream-Server von Consul/etcd... .

Die Bedeutungen der Parameter sind:

  • upsync_interval

    Zeitintervall für das Abrufen von Servern von Consul/etcd.

  • upsync_timeout

    Timeout für die Anfrage zum Abrufen von Servern von Consul/etcd.

  • upsync_type

    Typ des Servers, von dem die Server abgerufen werden.

  • strong_dependency

    Wenn NGINX gestartet wird und strong_dependency aktiviert ist, bedeutet dies, dass die Server von Consul/etcd abhängen und Server von Consul/etcd abgerufen werden.

upsync_dump_path

syntax: upsync_dump_path $path

default: /tmp/servers_$host.conf

context: upstream

description: Dumpen Sie die Upstream-Backends in den $path.

upsync_lb

syntax: upsync_lb $load_balance

default: round_robin/ip_hash/hash modula

context: upstream

description: Hauptsächlich für least_conn und konsistente Hashes, wenn Sie eines davon verwenden, müssen Sie upsync_lb angeben.

upsync_show

syntax: upsync_show

default: none

context: server

description: Zeigt alle Upstreams an.

curl http://localhost:2345/upstream_show

zeige alle Upstreams an

Consul_interface

Daten können aus dem Schlüssel/Wert-Speicher oder dem Dienstkatalog abgerufen werden. Im ersten Fall muss der Parameter upsync_type der Direktive consul sein. Zum Beispiel

    upsync 127.0.0.1:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;

Im zweiten Fall muss es consul_services sein.

    upsync 127.0.0.1:8500/v1/catalog/service/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul_services strong_dependency=off;

Sie können Backend-Server über consul_ui oder http_interface hinzufügen oder löschen. Nachfolgend Beispiele für den Schlüssel/Wert-Speicher.

http_interface Beispiel:

  • hinzufügen
        curl -X PUT http://$consul_ip:$port/v1/kv/upstreams/$upstream_name/$backend_ip:$backend_port
    
    default: weight=1 max_fails=2 fail_timeout=10 down=0 backup=0;

    curl -X PUT -d "{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
oder
    curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
Wert unterstützt das JSON-Format.

  • löschen

        curl -X DELETE http://$consul_ip:$port/v1/kv/upstreams/$upstream_name/$backend_ip:$backend_port
    

  • gewicht-anpassen

        curl -X PUT -d "{\"weight\":2, \"max_fails\":2, \"fail_timeout\":10}" http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
    oder
        curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
    

  • Server-Down markieren

        curl -X PUT -d "{\"weight\":2, \"max_fails\":2, \"fail_timeout\":10, \"down\":1}" http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
    oder
        curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10, "down":1}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
    

  • überprüfen

        curl http://$consul_ip:$port/v1/kv/upstreams/$upstream_name?recurse
    

Etcd_interface

Sie können Backend-Server über http_interface hinzufügen oder löschen.

Hauptsächlich wie etcd, http_interface Beispiel:

  • hinzufügen
        curl -X PUT http://$etcd_ip:$port/v2/keys/upstreams/$upstream_name/$backend_ip:$backend_port
    
    default: weight=1 max_fails=2 fail_timeout=10 down=0 backup=0;

    curl -X PUT -d value="{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://$etcd_ip:$port/v2/keys/$dir1/$upstream_name/$backend_ip:$backend_port
Wert unterstützt das JSON-Format.

  • löschen

        curl -X DELETE http://$etcd_ip:$port/v2/keys/upstreams/$upstream_name/$backend_ip:$backend_port
    

  • gewicht-anpassen

        curl -X PUT -d "{\"weight\":2, \"max_fails\":2, \"fail_timeout\":10}" http://$etcd_ip:$port/v2/keys/$dir1/$upstream_name/$backend_ip:$backend_port
    

  • Server-Down markieren

        curl -X PUT -d value="{\"weight\":2, \"max_fails\":2, \"fail_timeout\":10, \"down\":1}" http://$etcd_ip:$port/v2/keys/$dir1/$upstream_name/$backend_ip:$backend_port
    

  • überprüfen

        curl http://$etcd_ip:$port/v2/keys/upstreams/$upstream_name
    

Code-Stil

Der Code-Stil basiert hauptsächlich auf style

Siehe auch

Quellabhängigkeit

GitHub

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