jouir / patroniglue

Handle and cache basic Patroni API checks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

patroniglue

Handle and cache basic Patroni API checks

Patroni uses the built-in Python HTTP server to expose database states. It's perfect to be used by a load balancer like HAProxy to achieve high-availability. But, sometimes, this interface freezes. There's an open issue we are trying to close actively. As production doesn't wait, patroniglue was created to offload those checks and release pressure by adding a little response cache.

Deprecated

We now use nginx. See configuration example.

Usage

Start process using a configuration file:

patroniglue -config config.yml

Add more logging output:

patroniglue -config config.yml -verbose

Print usage:

patroniglue -help

Configuration

Configuration file format is YAML.

  • frontend: settings to handle incoming requests
    • host: address to handle requests (localhost by default)
    • port: port to handle requests (80 by default)
    • certfile: path to SSL certificate file (will use HTTP by default if not provided)
    • keyfile: path to SSL private key file (will use HTTP by default if not provided)
    • tls-min-version: minimum TLS version for HTTPS service (could be SSLv3.0, TLSv1.0,TLSv1.1, TLSv1.2, TLSv1.3)
    • tls-ciphers: list of supported ciphers (see full list)
  • backend: settings for sending requests to a backend
    • host: patroni REST API listen address
    • port: patroni REST API listen port
    • scheme: patroni REST API scheme (either http or https)
    • insecure: disable certificate checks on HTTPS requests
  • cache: settings for the caching system
    • ttl: time in second before response will be evinced
    • interval: time in second used by the internal cache loop to check for keys to remove

See config.yml.example file for an example.

Internals

  • Frontend handles HTTP or HTTPS requests on "/primary", "/master", "/replica", "/read-write" and "/read-only" routes available on Patroni API
  • Backend requests Patroni API using HTTP or HTTPS protocol and exposes state to frontend
  • Cache implements an in-memory key-value store to cache backend responses for some time

Build

Run ./build.sh script and enjoy!

About

Handle and cache basic Patroni API checks

License:MIT License


Languages

Language:Go 97.2%Language:Shell 2.8%