Add patroni-compose-etcd-3.yml

For starting up cluster easy with docker-compose.
And unify Dockerfile and scripts to be able to work with docker-compose
and the old one dev_patroni_cluster.sh script
This commit is contained in:
Alexander Kukushkin
2016-06-21 17:07:24 +02:00
parent 95efd72679
commit d65d1028a7
5 changed files with 130 additions and 74 deletions
+30 -53
View File
@@ -7,53 +7,39 @@ 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
--etcd Do not run Patroni, run a standalone etcd
--confd Do not run Patroni, run a standalone confd
Examples:
$0 --etcd=127.17.0.84:4001
$0 --etcd-only
$0 --etcd
$0 --confd
$0
$0 --name=true_scotsman
__EOF__
}
DOCKER_IP=$(hostname --ip-address)
PATRONI_SCOPE=${PATRONI_SCOPE:-batman}
ETCD_ARGS="--data-dir /tmp/etcd.data -advertise-client-urls=http://${DOCKER_IP}:2379 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://0.0.0.0:2380"
optspec=":vh-:"
while getopts "$optspec" optchar; do
case "${optchar}" in
-)
case "${OPTARG}" in
etcd-only)
(while sleep 1; do
confd -prefix=/service/$PATRONI_SCOPE -backend etcd -node 127.0.0.1:4001 \
-interval=10 >> /var/log/confd.log 2>> /var/log/confd.err
done) &
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
confd)
while ! curl -s ${PATRONI_ETCD_HOST}/v2/members | jq -r '.members[0].clientURLs[0]' | grep -q http; do
sleep 1
done
haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D
exec confd -prefix=${PATRONI_NAMESPACE:-/service}/$PATRONI_SCOPE -backend etcd -node $PATRONI_ETCD_HOST -interval=10
;;
etcd)
exec etcd $ETCD_ARGS
;;
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
@@ -75,32 +61,27 @@ while getopts "$optspec" optchar; do
done
## We start an etcd
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"
if [ -z ${PATRONI_ETCD_HOST} ]; then
etcd $ETCD_ARGS > /var/log/etcd.log 2> /var/log/etcd.err &
export PATRONI_ETCD_HOST="127.0.0.1:2379"
fi
export PATRONI_SCOPE
export PATRONI_NAME="${PATRONI_NAME:-${HOSTNAME}}"
export PATRONI_ETCD_HOST="$ETCD_CLUSTER"
export PATRONI_RESTAPI_CONNECT_ADDRESS="${DOCKER_IP}:8008"
export PATRONI_RESTAPI_LISTEN="0.0.0.0:8008"
export PATRONI_admin_PASSWORD="admin"
export PATRONI_admin_OPTIONS="createdb, createrole"
export PATRONI_admin_PASSWORD="${PATRONI_admin_PASSWORD:=admin}"
export PATRONI_admin_OPTIONS="$PATRONI_admin_OPTIONS:-createdb, createrole}"
export PATRONI_POSTGRESQL_CONNECT_ADDRESS="${DOCKER_IP}:5432"
export PATRONI_POSTGRESQL_LISTEN="0.0.0.0:5432"
export PATRONI_POSTGRESQL_DATA_DIR="data/${PATRONI_SCOPE}"
export PATRONI_REPLICATION_USERNAME="replicator"
export PATRONI_REPLICATION_PASSWORD="abcd"
export PATRONI_SUPERUSER_USERNAME="postgres"
export PATRONI_SUPERUSER_PASSWORD="postgres"
export PATRONI_REPLICATION_USERNAME="${PATRONI_REPLICATION_USERNAME:-replicator}"
export PATRONI_REPLICATION_PASSWORD="${PATRONI_REPLICATION_PASSWORD:-abcd}"
export PATRONI_SUPERUSER_USERNAME="${PATRONI_SUPERUSER_USERNAME:-postgres}"
export PATRONI_SUPERUSER_PASSWORD="${PATRONI_SUPERUSER_PASSWORD:-postgres}"
export PATRONI_POSTGRESQL_PGPASS="$HOME/.pgpass"
cat > /patroni/postgres.yaml <<__EOF__
cat > /patroni.yml <<__EOF__
bootstrap:
dcs:
postgresql:
@@ -112,14 +93,10 @@ bootstrap:
__EOF__
mkdir -p "$HOME/.config/patroni"
ln -s /patroni/postgres.yaml "$HOME/.config/patroni/patronictl.yaml"
ln -s /patroni.yml "$HOME/.config/patroni/patronictl.yaml"
if [ ! -z $CHEAT ]
then
while :
do
sleep 60
done
else
exec python /patroni.py /patroni/postgres.yaml
fi
[ -z $CHEAT ] && exec python /patroni.py /patroni.yml
while true; do
sleep 60
done