[LINUX] Super einfaches Cluster Management mit bgworker

In diesem Artikel werden die Punkte beschrieben, an denen Sie Ihr eigenes __bgworker-Modul mithilfe der Background Worker Processes-Funktion (im Folgenden: bgwoker) erstellen, die als neue Funktion aus PostgreSQL 9.3 eingeführt wurde, und das __super-einfache Cluster-Verwaltungsmodul, das Sie selbst erstellt haben. Ich werde "pg_promoter" __ vorstellen.

Was ist bgwoker?

Eine Funktion, die erweitert werden kann, damit vom Benutzer bereitgestellter Code in separaten Prozessen in PostgreSQL ausgeführt werden kann. Als Feature,

Und so weiter. Weitere Informationen finden Sie unter Offizielles Dokument.

Punkte des selbstgemachten Arbeiters

Wenn ich meinen eigenen bgworker mache, werde ich drei Punkte einführen, die ich fühlte, als ich es tatsächlich machte.

Bevor Sie anfangen zu machen

Es gibt ein Modul namens worker_spi im Contrib-Modul von PostgreSQL, so dass es einfach ist, es zu erstellen, indem man darauf verweist. Da es die minimal erforderlichen Funktionen hat, können Sie Ihren eigenen bgworker erstellen, indem Sie ihn einfach ändern.

_PG_init() Informationen zur Funktion _PG_init (), die beim Laden von bgworker aufgerufen wird.

_PG_init()


void
_PG_init(void)
{
    BackgroundWorker worker;
        
    /*Definieren Sie die erforderlichen Parameter usw.*/

    /*Von hier aus die Einstellungen für bgworker*/
    worker.bgw_flags = BGWORKER_SHMEM_ACCESS |
        BGWORKER_BACKEND_DATABASE_CONNECTION;
    worker.bgw_start_time = BgWorkerStart_ConsistentState;
    worker.bgw_restart_time = BGW_NEVER_RESTART;
    worker.bgw_main = pg_promoter_main;
    worker.bgw_notify_pid = 0;
    
    /*bgworker Registrierung*/
    snprintf(worker.bgw_name, BGW_MAXLEN, "pg_promoter");
    RegisterBackgroundWorker(&worker);
}

Hier wird der bgworker selbst festgelegt. Darunter sind "worker.bgw_flags" und "worker.start_time" unten zusammengefasst.

--worker.bgw_flags (legt die vom Modul benötigten Funktionen fest)

Wert Inhalt
BGWORKER_SHMEM_ACCESS Ermöglichen Sie den Zugriff auf den gemeinsam genutzten Speicher
BGWORKER_BACKEND_DATABASE_CONNECTION Kann Transaktionen und Abfragen ausführen

--worker.start_time (legt fest, wann bgworker gestartet wird)

Wert Inhalt
BgWorkerStart_PostmasterStart Beginnen Sie nach der Postgres-Initialisierung
BgWorkerStart_ConsistentState Starten Sie, nachdem schreibgeschützte Abfragen ausgeführt werden können
BgWorkerStart_RecoveryFinished Referenz/Wird gestartet, wenn eine Aktualisierungsabfrage ausgeführt wird

Features erstellen

Das Erstellen von Funktionen ist nicht auf bgworker beschränkt, aber ich denke, es ist einfach, Code mit __ zu schreiben, der auf andere Programme verweist. In dem als nächstes vorgestellten "pg_promoter" habe ich ihn mit Bezug auf pg_ctl, pgbench, postgres_fdw usw. erstellt.

Super einfaches Cluster Management Modul "pg_promoter"

Ich habe ein ultra-einfaches Cluster-Management-Modul "pg_promoter" mit der Funktion bgworker erstellt. Wie der Name schon sagt, ist "pg_promoter" ein einfaches Modul, das den Standby-Server einfach zum Master befördert (fehlt ihm die Funktionalität?). Die Hauptmerkmale sind wie folgt.

Verwendung von pg_promoter

Installation von pg_promoter

Als bgwoker registrierte Module werden auf die gleiche Weise wie bei der Installation des Contrib-Moduls kompiliert und mit make, make install installiert.

Registriert in postgresql.conf

Setzen Sie bgworker bei der Registrierung auf "shared_preload_libraries".

postgresql.conf


shared_preload_libraries = 'pg_promoter'
#Das Folgende ist pg_Dies ist ein Einstellungselement, das für den Veranstalter erforderlich ist
pg_promoter.primary_conninfo = 'host=localhost port=15432'
pg_promoter.keep_alive = 5

Nehmen Sie die obigen Einstellungen + Replikationseinstellungen vor.

Server starten, bgwoker starten

  1. Starten Sie den Master-Server

pg_ctl start -D data

  1. Starten Sie den Standby-Server

pg_ctl start -D 2data

Betrachtet man den Prozess,

14084 pts/2 S 0:00 /home/postgres/pgsql/9.3/bin/postgres -D data 14086 ? Ss 0:00 postgres: checkpointer process 14087 ? Ss 0:00 postgres: writer process 14088 ? Ss 0:00 postgres: wal writer process 14089 ? Ss 0:00 postgres: autovacuum launcher process 14090 ? Ss 0:00 postgres: stats collector process 14105 pts/2 S 0:00 /home/postgres/pgsql/9.3/bin/postgres -D 2data 14109 ? Ss 0:00 postgres: startup process waiting for 000000010000000000000003 14110 ? Ss 0:00 postgres: checkpointer process 14111 ? Ss 0:00 postgres: writer process 14112 ? Ss 0:00 postgres: stats collector process 14113 ? Ss 0:00 postgres: bgworker: pg_promoter 14114 ? Ss 0:00 postgres: wal receiver process streaming 0/3000090 14115 ? Ss 0:00 postgres: wal sender process postgres [local] streaming 0/3000090

Sie können sehen, dass 14113? Ss 0:00 postgres: bgworker: pg_promoter und bgworker ausgeführt werden. Mit anderen Worten, "pg_promoter" überwacht das Leben und den Tod des Masters (PID ist 14084) im Hintergrund von PostgreSQL.

Standby-Server-Promotion

Versuchen Sie, den Standby-Server-Prozess in diesem Status zu beenden. kill -sigkill 14084

Dann nach ein paar Sekunden. ..

LOG: received promote request LOG: redo done at 0/20000F0 LOG: selected new timeline ID: 2 LOG: worker process: pg_promoter (PID 14113) exited with exit code 1 LOG: unregistering background worker "pg_promoter" LOG: archive recovery complete LOG: database system is ready to accept connections LOG: autovacuum launcher started

Ich habe ein Log bekommen und wurde befördert!

Quellcode

Es ist schwer zu verstehen, ob es sich um einen Artikel handelt, also dachte ich: "Ich möchte, dass Sie es versuchen!". Also hatte ich vor, ihn auf Github zu stellen, aber ich hatte nicht genug Zeit, ihn zu geben. Ich werde es bald auf Github setzen, also benutze es bitte!

(Hinzugefügt am 24.12.2013) Veröffentlicht auf github! pg_promoter URL : https://github.com/Masahiko-Sawada/pg_promoter Bitte benutzen Sie es!

Zusammenfassung

Dieses Mal habe ich ein einfaches Cluster-Management-Modul mit der Funktion von bgworker erstellt. Zuerst habe ich es mit Interesse gemacht, aber ich hatte das Gefühl, dass ich, wenn ich es schaffe, ein Cluster-Management-Modul machen könnte, das einigermaßen gut verwendet werden kann. Es ist ungefähr 4 Monate her, seit PostgreSQL 9.3 veröffentlicht wurde, aber da es eine Funktion ist, die verschiedene Dinge tun kann, denke ich, dass in Zukunft verschiedene Module herauskommen werden. Es gibt nicht viele Informationen über bgworker. Bitte beziehen Sie sich darauf, wenn Sie Ihren eigenen bgworker erstellen oder einen anderen bgworker verwenden! Ein schönes Wochenende wünsche ich ihnen!

Recommended Posts

Super einfaches Cluster Management mit bgworker
Routineverwaltung mit Kalender
YouTube-Videoverwaltung mit Python 3
[GUI in Python] PyQt5-Layout-Management-
Einfaches Tippspiel mit DragonRuby
Passwortverwaltung per Python: Schlüsselbund
Serververwaltung mit Jupyter (1) -Import