Handle and cache basic Patroni API checks
|
|
||
|---|---|---|
| extra | ||
| src | ||
| .pre-commit-config.yaml | ||
| build.sh | ||
| config.yml.example | ||
| LICENSE | ||
| README.md | ||
| VERSION | ||
END OF LIFE NOTICE
Stability issues with the Patroni API have been solved by upstream.
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.
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 requestshost: 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 beSSLv3.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 backendhost: patroni REST APIlistenaddressport: patroni REST APIlistenportscheme: patroni REST API scheme (eitherhttporhttps)insecure: disable certificate checks on HTTPS requests
cache: settings for the caching systemttl: time in second before response will be evincedinterval: 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!