mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
Update docker-compose example to postgres 10 (#737)
Some other changes are related to the new version of confd, which now requires specifying etcd url instead of etcd host.
This commit is contained in:
committed by
Oleksii Kliukin
parent
c8f9199988
commit
26466237b9
+9
-12
@@ -1,45 +1,42 @@
|
|||||||
## This Dockerfile is meant to aid in the building and debugging patroni whilst developing on your local machine
|
## This Dockerfile is meant to aid in the building and debugging patroni whilst developing on your local machine
|
||||||
## It has all the necessary components to play/debug with a single node appliance, running etcd
|
## It has all the necessary components to play/debug with a single node appliance, running etcd
|
||||||
FROM postgres:9.6
|
FROM postgres:10
|
||||||
MAINTAINER Alexander Kukushkin <[email protected]>
|
MAINTAINER Alexander Kukushkin <[email protected]>
|
||||||
|
|
||||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
RUN export DEBIAN_FRONTEND=noninteractive \
|
||||||
&& echo 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";' > /etc/apt/apt.conf.d/01norecommend \
|
&& echo 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";' > /etc/apt/apt.conf.d/01norecommend \
|
||||||
&& apt-get update -y \
|
&& apt-get update -y \
|
||||||
&& apt-get upgrade -y \
|
&& apt-get upgrade -y \
|
||||||
&& apt-get install -y curl jq haproxy python-psycopg2 python-yaml python-requests python-six python-pysocks \
|
# postgres:10 is based on debian, which has patroni package. We will install all required dependencies
|
||||||
python-dateutil python-pip python-setuptools python-prettytable python-wheel python-psutil python locales \
|
&& apt-get install -s patroni | sed -n -e '/^Inst patroni /d' -e 's/^Inst \([^ ]\+\) .*$/\1/p' \
|
||||||
|
| xargs apt-get install -y curl jq haproxy locales python3-etcd python3-kazoo \
|
||||||
|
|
||||||
## Make sure we have a en_US.UTF-8 locale available
|
## Make sure we have a en_US.UTF-8 locale available
|
||||||
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
|
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
|
||||||
|
|
||||||
&& pip install 'python-etcd>=0.4.3,<0.5' click tzlocal cdiff \
|
|
||||||
|
|
||||||
&& mkdir -p /home/postgres \
|
&& mkdir -p /home/postgres \
|
||||||
&& chown postgres:postgres /home/postgres \
|
&& chown postgres:postgres /home/postgres \
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
&& apt-get remove -y python-pip python-setuptools \
|
&& apt-get purge -y libpython2.7-stdlib libpython2.7-minimal \
|
||||||
&& apt-get autoremove -y \
|
&& apt-get autoremove -y \
|
||||||
&& apt-get clean -y \
|
&& apt-get clean -y \
|
||||||
&& rm -rf /var/lib/apt/lists/* /root/.cache
|
&& rm -rf /var/lib/apt/lists/* /root/.cache
|
||||||
|
|
||||||
ENV ETCDVERSION 3.2.3
|
ENV ETCDVERSION 3.2.23
|
||||||
RUN curl -L https://github.com/coreos/etcd/releases/download/v${ETCDVERSION}/etcd-v${ETCDVERSION}-linux-amd64.tar.gz \
|
RUN curl -L https://github.com/coreos/etcd/releases/download/v${ETCDVERSION}/etcd-v${ETCDVERSION}-linux-amd64.tar.gz \
|
||||||
| tar xz -C /usr/local/bin --strip=1 --wildcards --no-anchored etcd etcdctl
|
| tar xz -C /usr/local/bin --strip=1 --wildcards --no-anchored etcd etcdctl
|
||||||
|
|
||||||
ENV CONFDVERSION 0.11.0
|
ENV CONFDVERSION 0.16.0
|
||||||
RUN curl -L https://github.com/kelseyhightower/confd/releases/download/v${CONFDVERSION}/confd-${CONFDVERSION}-linux-amd64 > /usr/local/bin/confd \
|
RUN curl -L https://github.com/kelseyhightower/confd/releases/download/v${CONFDVERSION}/confd-${CONFDVERSION}-linux-amd64 > /usr/local/bin/confd \
|
||||||
&& chmod +x /usr/local/bin/confd
|
&& chmod +x /usr/local/bin/confd
|
||||||
|
|
||||||
ADD patronictl.py patroni.py docker/entrypoint.sh /
|
ADD patronictl.py patroni.py docker/entrypoint.sh /
|
||||||
ADD patroni /patroni/
|
ADD patroni /patroni/
|
||||||
ADD extras/confd /etc/confd
|
ADD extras/confd /etc/confd
|
||||||
RUN ln -s /patronictl.py /usr/local/bin/patronictl
|
|
||||||
|
|
||||||
### Setting up a simple script that will serve as an entrypoint
|
RUN sed -i 's/env python/&3/' patroni*.py && ln -s /patronictl.py /usr/local/bin/patronictl && mkdir /data/ /run/haproxy \
|
||||||
RUN mkdir /data/ && touch /pgpass /patroni.yml \
|
&& touch /pgpass /patroni.yml && chown postgres:postgres -R /patroni/ /data/ /pgpass /patroni.yml /etc/haproxy /var/run/ /var/lib/ /var/log/
|
||||||
&& chown postgres:postgres -R /patroni/ /data/ /pgpass /patroni.yml /etc/haproxy /var/run/ /var/lib/ /var/log/
|
|
||||||
|
|
||||||
EXPOSE 2379 5432 8008
|
EXPOSE 2379 5432 8008
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -15,7 +15,7 @@ dbnode1:
|
|||||||
- ./patroni:/patroni
|
- ./patroni:/patroni
|
||||||
env_file: docker/patroni-secrets.env
|
env_file: docker/patroni-secrets.env
|
||||||
environment:
|
environment:
|
||||||
PATRONI_ETCD_HOST: patroni_etcd:2379
|
PATRONI_ETCD_URL: http://patroni_etcd:2379
|
||||||
PATRONI_NAME: dbnode1
|
PATRONI_NAME: dbnode1
|
||||||
PATRONI_SCOPE: testcluster
|
PATRONI_SCOPE: testcluster
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ dbnode2:
|
|||||||
- ./patroni:/patroni
|
- ./patroni:/patroni
|
||||||
env_file: docker/patroni-secrets.env
|
env_file: docker/patroni-secrets.env
|
||||||
environment:
|
environment:
|
||||||
PATRONI_ETCD_HOST: patroni_etcd:2379
|
PATRONI_ETCD_URL: http://patroni_etcd:2379
|
||||||
PATRONI_NAME: dbnode2
|
PATRONI_NAME: dbnode2
|
||||||
PATRONI_SCOPE: testcluster
|
PATRONI_SCOPE: testcluster
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ dbnode3:
|
|||||||
- ./patroni:/patroni
|
- ./patroni:/patroni
|
||||||
env_file: docker/patroni-secrets.env
|
env_file: docker/patroni-secrets.env
|
||||||
environment:
|
environment:
|
||||||
PATRONI_ETCD_HOST: patroni_etcd:2379
|
PATRONI_ETCD_URL: http://patroni_etcd:2379
|
||||||
PATRONI_NAME: dbnode3
|
PATRONI_NAME: dbnode3
|
||||||
PATRONI_SCOPE: testcluster
|
PATRONI_SCOPE: testcluster
|
||||||
|
|
||||||
@@ -53,6 +53,6 @@ haproxy:
|
|||||||
- "5000:5000"
|
- "5000:5000"
|
||||||
- "5001:5001"
|
- "5001:5001"
|
||||||
environment:
|
environment:
|
||||||
PATRONI_ETCD_HOST: patroni_etcd:2379
|
PATRONI_ETCD_URL: http://patroni_etcd:2379
|
||||||
PATRONI_SCOPE: testcluster
|
PATRONI_SCOPE: testcluster
|
||||||
command: --confd
|
command: --confd
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ function docker_run()
|
|||||||
ETCD_CONTAINER="${PATRONI_SCOPE}_etcd"
|
ETCD_CONTAINER="${PATRONI_SCOPE}_etcd"
|
||||||
docker_run ${ETCD_CONTAINER} ${DOCKER_IMAGE} --etcd
|
docker_run ${ETCD_CONTAINER} ${DOCKER_IMAGE} --etcd
|
||||||
|
|
||||||
DOCKER_ARGS="--link=${ETCD_CONTAINER}:${ETCD_CONTAINER} -e PATRONI_SCOPE=${PATRONI_SCOPE} -e PATRONI_ETCD_HOST=${ETCD_CONTAINER}:2379"
|
DOCKER_ARGS="--link=${ETCD_CONTAINER}:${ETCD_CONTAINER} -e PATRONI_SCOPE=${PATRONI_SCOPE} -e PATRONI_ETCD_URL=http://${ETCD_CONTAINER}:2379"
|
||||||
PATRONI_ENV=$(sed 's/#.*//g' docker/patroni-secrets.env | sed -n 's/^PATRONI_.*$/-e &/p' | tr '\n' ' ')
|
PATRONI_ENV=$(sed 's/#.*//g' docker/patroni-secrets.env | sed -n 's/^PATRONI_.*$/-e &/p' | tr '\n' ' ')
|
||||||
PATRONI_VOLUME="-v $(dirname $(dirname $(realpath $0)))/patroni:/patroni"
|
PATRONI_VOLUME="-v $(dirname $(dirname $(realpath $0)))/patroni:/patroni"
|
||||||
|
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ while getopts "$optspec" optchar; do
|
|||||||
done
|
done
|
||||||
exec $CONFD zookeeper -node ${PATRONI_ZOOKEEPER_HOSTS}
|
exec $CONFD zookeeper -node ${PATRONI_ZOOKEEPER_HOSTS}
|
||||||
else
|
else
|
||||||
while ! curl -s ${PATRONI_ETCD_HOST}/v2/members | jq -r '.members[0].clientURLs[0]' | grep -q http; do
|
while ! curl -s ${PATRONI_ETCD_URL}/v2/members | jq -r '.members[0].clientURLs[0]' | grep -q http; do
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
exec $CONFD etcd -node $PATRONI_ETCD_HOST
|
exec $CONFD etcd -node $PATRONI_ETCD_URL
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
etcd)
|
etcd)
|
||||||
@@ -74,9 +74,9 @@ while getopts "$optspec" optchar; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
## We start an etcd
|
## We start an etcd
|
||||||
if [[ -z ${PATRONI_ETCD_HOST} && -z ${PATRONI_ZOOKEEPER_HOSTS} ]]; then
|
if [[ -z ${PATRONI_ETCD_URL} && -z ${PATRONI_ZOOKEEPER_HOSTS} ]]; then
|
||||||
etcd $ETCD_ARGS > /var/log/etcd.log 2> /var/log/etcd.err &
|
etcd $ETCD_ARGS > /var/log/etcd.log 2> /var/log/etcd.err &
|
||||||
export PATRONI_ETCD_HOST="127.0.0.1:2379"
|
export PATRONI_ETCD_URL="http://127.0.0.1:2379"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PATRONI_SCOPE
|
export PATRONI_SCOPE
|
||||||
@@ -108,7 +108,7 @@ __EOF__
|
|||||||
mkdir -p "$HOME/.config/patroni"
|
mkdir -p "$HOME/.config/patroni"
|
||||||
[ -h "$HOME/.config/patroni/patronictl.yaml" ] || ln -s /patroni.yml "$HOME/.config/patroni/patronictl.yaml"
|
[ -h "$HOME/.config/patroni/patronictl.yaml" ] || ln -s /patroni.yml "$HOME/.config/patroni/patronictl.yaml"
|
||||||
|
|
||||||
[ -z $CHEAT ] && exec python /patroni.py /patroni.yml
|
[ -z $CHEAT ] && exec python3 /patroni.py /patroni.yml
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
sleep 60
|
sleep 60
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
`confd` directory contains haproxy template files for the [confd](https://github.com/kelseyhightower/confd) -- lightweight configuration management tool
|
`confd` directory contains haproxy template files for the [confd](https://github.com/kelseyhightower/confd) -- lightweight configuration management tool
|
||||||
You need to copy content of `confd` directory into /etcd/confd and run confd service:
|
You need to copy content of `confd` directory into /etcd/confd and run confd service:
|
||||||
```bash
|
```bash
|
||||||
$ confd -prefix=/service/$PATRONI_SCOPE -backend etcd -node $PATRONI_ETCD_HOST -interval=10
|
$ confd -prefix=/service/$PATRONI_SCOPE -backend etcd -node $PATRONI_ETCD_URL -interval=10
|
||||||
```
|
```
|
||||||
It will periodically update haproxy.cfg with the actual list of Patroni nodes from `etcd` and "reload" haproxy when it is necessary.
|
It will periodically update haproxy.cfg with the actual list of Patroni nodes from `etcd` and "reload" haproxy when it is necessary.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user