* debian/pg_createconfig_patroni: New script.

* debian/dcs.yml, debian/config.yml.in: New configuration templates.
  * debian/patroni.install: Install new script to /usr/bin and configuration
    templates to /etc/patroni.
This commit is contained in:
Michael Banck 2018-11-05 08:49:40 +01:00
parent 0a80df53c0
commit 8cb3cbda6e
5 changed files with 196 additions and 0 deletions

4
debian/changelog vendored
View file

@ -7,6 +7,10 @@ patroni (1.5.1-1) UNRELEASED; urgency=medium
* debian/patches/consul_import.patch: Likewise.
* debian/patches/coverage_binary.patch: Likewise.
* debian/patches/startup_scripts.patch: Likewise.
* debian/pg_createconfig_patroni: New script.
* debian/dcs.yml, debian/config.yml.in: New configuration templates.
* debian/patroni.install: Install new script to /usr/bin and configuration
templates to /etc/patroni.
-- Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org> Fri, 02 Nov 2018 19:23:09 +0100

99
debian/config.yml.in vendored Normal file
View file

@ -0,0 +1,99 @@
scope: "@VERSION@-@CLUSTER@"
namespace: "/postgresql-common/"
name: @HOSTNAME@
#etcd:
# host: 127.0.0.1:2379
#consul:
# host: http://127.0.0.1:8500
# host: https://127.0.0.1:8500
#zookeeper:
# hosts: 127.0.0.1:2181
restapi:
listen: @HOSTIP@:8008
connect_address: @HOSTIP@:8008
# certfile: /etc/ssl/certs/ssl-cert-snakeoil.pem
# keyfile: /etc/ssl/private/ssl-cert-snakeoil.key
# authentication:
# username: username
# password: password
# ctl:
# insecure: false # Allow connections to SSL sites without certs
# certfile: /etc/ssl/certs/ssl-cert-snakeoil.pem
# cacert: /etc/ssl/certs/ssl-cacert-snakeoil.pem
bootstrap:
# Custom bootstrap method
method: pg_createcluster
pg_createcluster:
command: /usr/share/patroni/pg_createcluster_patroni
# this section will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster
# and all other cluster members will use it as a `global configuration`
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
# master_start_timeout: 300
# synchronous_mode: false
# standby_cluster:
# host: 127.0.0.1
# port: 1111
# primary_slot_name: patroni
postgresql:
use_pg_rewind: true
# use_slots: true
parameters:
# wal_level: hot_standby
# hot_standby: "on"
# wal_keep_segments: 8
# max_wal_senders: 10
# max_replication_slots: 10
# wal_log_hints: "on"
# archive_mode: "on"
# archive_timeout: 1800s
# archive_command: mkdir -p ../wal_archive && test ! -f ../wal_archive/%f && cp %p ../wal_archive/%f
# recovery_conf:
# restore_command: cp ../wal_archive/%f %p
# some desired options for 'initdb'
initdb: # Note: It needs to be a list (some options need values, others are switches)
- encoding: UTF8
- data-checksums
pg_hba: # Add following lines to pg_hba.conf after running 'initdb'
- host replication replicator 127.0.0.1/32 md5
- host all all 0.0.0.0/0 md5
# - hostssl all all 0.0.0.0/0 md5
postgresql:
# Custom clone method
create_replica_method:
- pg_clonecluster
pg_clonecluster:
command: /usr/share/patroni/pg_clonecluster_patroni
listen: @HOSTIP@:5432
connect_address: @HOSTIP@:5432
data_dir: /var/lib/postgresql/@VERSION@/@CLUSTER@
bin_dir: /usr/lib/postgresql/@VERSION@/bin
config_dir: /etc/postgresql/@VERSION@/@CLUSTER@
pgpass: /etc/patroni/pgpass
authentication:
replication:
username: replicator
password: rep-pass
# superuser:
# username: postgres
# password: zalando
parameters:
unix_socket_directories: '/var/run/postgresql/'
# Emulate default Debian/Ubuntu logging
logging_collector: 'on'
log_directory: '/var/log/postgresql'
log_filename: 'postgresql-@VERSION@-@CLUSTER@.log'

9
debian/dcs.yml vendored Normal file
View file

@ -0,0 +1,9 @@
#etcd:
# host: 127.0.0.1:2379
#consul:
# host: http://127.0.0.1:8500
# host: https://127.0.0.1:8500
zookeeper:
hosts: 127.0.0.1:2181

View file

@ -3,5 +3,8 @@ extras/startup-scripts/patroni.service lib/systemd/system
extras/startup-scripts/patroni@.service lib/systemd/system
debian/pg_clonecluster_patroni usr/share/patroni
debian/pg_createcluster_patroni usr/share/patroni
debian/pg_createconfig_patroni usr/bin
debian/dcs.yml etc/patroni
debian/config.yml.in etc/patroni
debian/tmp/usr/lib
debian/tmp/usr/bin

81
debian/pg_createconfig_patroni vendored Executable file
View file

@ -0,0 +1,81 @@
#!/bin/sh
for i in "$@"
do
case $i in
--scope=*)
SCOPE="${i#*=}"
shift # past argument=value
;;
--hostip=*)
HOSTIP="${i#*=}"
shift # past argument=value
;;
--force)
FORCE="y"
shift # past argument=value
;;
*)
# unknown option
;;
esac
done
if [ -z "$SCOPE" ]; then
echo "Required option --scope missing"
exit 1
fi
# support both '-' and '/' as separator
if [ $(echo $SCOPE | grep -- -) ]
then
VERSION=$(echo $SCOPE | sed -e 's/-.*//')
CLUSTER=$(echo $SCOPE | sed -e 's/.*-//')
else
VERSION=$(echo $SCOPE | sed -e 's/\/.*//')
CLUSTER=$(echo $SCOPE | sed -e 's/.*\///')
fi
# check DCS configuration
if [ ! -f /etc/patroni/dcs.yml ]; then
echo "DCS not configured yet, edit /etc/patroni/dcs.yml"
exit 1
fi
grep -v "^#" /etc/patroni/dcs.yml | grep -v "^$" > /dev/null 2>&1
if [ $? != 0 ]; then
echo "DCS not configured yet, edit /etc/patroni/dcs.yml"
exit 1
fi
CONFIG_FILE=/etc/patroni/${VERSION}-${CLUSTER}.yml
if [ -f $CONFIG_FILE -a -z "$FORCE" ]; then
echo "Patroni configuration file already exists"
exit 1
else
rm -f $CONFIG_FILE
touch $CONFIG_FILE
fi
HOSTNAME=$(hostname)
# set default ipv4 address in case it was not provided
if [ -z "$HOSTIP" ]; then
HOSTIP=$(ip -4 route get 8.8.8.8 | grep ^8.8.8.8 | sed s/.*src.//)
fi
echo "scope: \"$VERSION-$CLUSTER\"" >> $CONFIG_FILE
echo "namespace: \"/postgresql-common/\"" >> $CONFIG_FILE
echo "name: \"$HOSTNAME\"" >> $CONFIG_FILE
echo "" >> $CONFIG_FILE
# add DCS configuration
cat /etc/patroni/dcs.yml >> $CONFIG_FILE
echo "" >> $CONFIG_FILE
# add remaining patroni configuration from template
cat /etc/patroni/config.yml.in | \
sed -e s/@VERSION@/${VERSION}/ \
-e s/@CLUSTER@/${CLUSTER}/ \
-e s/@HOSTIP@/${HOSTIP}/ \
>> $CONFIG_FILE