mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-01-28 18:20:10 +00:00
For easier development using Docker the $HOSTNAME variable will be used to name the running Patroni. Bumped some _segments postgresql settings to ensure WAL files are not removed very quickly. Increased the timeout for the post request for Patroni, as some operations (failover) may take considerable time to complete. The failover to a specific member was broken in patronictl as it used a wrong key to specify the member to failover to. Pretty printing fix for xlog lag, to prevent false negatives to show up and have good alignment.
140 lines
3.4 KiB
Bash
Executable File
140 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function usage()
|
|
{
|
|
cat <<__EOF__
|
|
Usage: $0
|
|
|
|
Options:
|
|
|
|
--etcd ETCD Provide an external etcd to connect to
|
|
--name NAME Give the cluster a specific name
|
|
--etcd-only Do not run Patroni, run a standalone etcd
|
|
|
|
Examples:
|
|
|
|
$0 --etcd=127.17.0.84:4001
|
|
$0 --etcd-only
|
|
$0
|
|
$0 --name=true_scotsman
|
|
__EOF__
|
|
}
|
|
|
|
DOCKER_IP=$(hostname --ip-address)
|
|
PATRONI_SCOPE=${PATRONI_SCOPE:-batman}
|
|
|
|
optspec=":vh-:"
|
|
while getopts "$optspec" optchar; do
|
|
case "${optchar}" in
|
|
-)
|
|
case "${OPTARG}" in
|
|
etcd-only)
|
|
exec etcd --data-dir /tmp/etcd.data \
|
|
-advertise-client-urls=http://${DOCKER_IP}:4001 \
|
|
-listen-client-urls=http://0.0.0.0:4001 \
|
|
-listen-peer-urls=http://0.0.0.0:2380
|
|
exit 0
|
|
;;
|
|
cheat)
|
|
CHEAT=1
|
|
;;
|
|
name)
|
|
PATRONI_SCOPE="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
;;
|
|
name=*)
|
|
PATRONI_SCOPE=${OPTARG#*=}
|
|
;;
|
|
etcd)
|
|
ETCD_CLUSTER="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
;;
|
|
etcd=*)
|
|
ETCD_CLUSTER=${OPTARG#*=}
|
|
;;
|
|
help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
|
|
echo "Unknown option --${OPTARG}" >&2
|
|
fi
|
|
;;
|
|
esac;;
|
|
*)
|
|
if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then
|
|
echo "Non-option argument: '-${OPTARG}'" >&2
|
|
usage
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z ${ETCD_CLUSTER} ]
|
|
then
|
|
etcd --data-dir /tmp/etcd.data \
|
|
-advertise-client-urls=http://${DOCKER_IP}:4001 \
|
|
-listen-client-urls=http://0.0.0.0:4001 \
|
|
-listen-peer-urls=http://0.0.0.0:2380 > /var/log/etcd.log 2> /var/log/etcd.err &
|
|
ETCD_CLUSTER="127.0.0.1:4001"
|
|
fi
|
|
|
|
cat > /patroni/postgres.yml <<__EOF__
|
|
|
|
ttl: &ttl 30
|
|
loop_wait: &loop_wait 10
|
|
scope: &scope '${PATRONI_SCOPE}'
|
|
namespace: 'patroni'
|
|
restapi:
|
|
listen: 0.0.0.0:8008
|
|
connect_address: ${DOCKER_IP}:8008
|
|
etcd:
|
|
scope: *scope
|
|
ttl: *ttl
|
|
host: ${ETCD_CLUSTER}
|
|
postgresql:
|
|
name: ${HOSTNAME}
|
|
scope: *scope
|
|
listen: 0.0.0.0:5432
|
|
connect_address: ${DOCKER_IP}:5432
|
|
data_dir: data/postgresql0
|
|
maximum_lag_on_failover: 1048576 # 1 megabyte in bytes
|
|
pg_hba:
|
|
- host all all 0.0.0.0/0 md5
|
|
- hostssl all all 0.0.0.0/0 md5
|
|
- host replication replicator ${DOCKER_IP}/16 md5
|
|
replication:
|
|
username: replicator
|
|
password: rep-pass
|
|
network: 127.0.0.1/32
|
|
superuser:
|
|
password: zalando
|
|
restore: patroni/scripts/restore.py
|
|
admin:
|
|
username: admin
|
|
password: admin
|
|
parameters:
|
|
archive_mode: "on"
|
|
wal_level: hot_standby
|
|
archive_command: 'true'
|
|
max_wal_senders: 20
|
|
listen_addresses: 0.0.0.0
|
|
checkpoint_segments: 64
|
|
wal_keep_segments: 64
|
|
archive_timeout: 1800s
|
|
max_replication_slots: 20
|
|
hot_standby: "on"
|
|
__EOF__
|
|
|
|
cat /patroni/postgres.yml
|
|
|
|
if [ ! -z $CHEAT ]
|
|
then
|
|
while :
|
|
do
|
|
sleep 60
|
|
done
|
|
else
|
|
exec python /patroni.py /patroni/postgres.yml
|
|
fi
|