configure slave connection info at every startup

This commit is contained in:
Sameer Naik
2015-10-27 14:44:34 +05:30
parent e9afd6a54a
commit d75474f195
2 changed files with 67 additions and 55 deletions

View File

@@ -1,50 +1,54 @@
# PostgreSQL Utility functions
PROGRAM_OPTIONS="-D $BITNAMI_APP_DIR/data --config_file=$BITNAMI_APP_DIR/conf/postgresql.conf --hba_file=$BITNAMI_APP_DIR/conf/pg_hba.conf --ident_file=$BITNAMI_APP_DIR/conf/pg_ident.conf"
initialize_replication_parameters() {
if [ "$POSTGRESQL_REPLICATION_MODE" == "slave" ]; then
echo "==> Trying to fetch replication parameters from the master link..."
echo ""
POSTGRESQL_MASTER_HOST=${POSTGRESQL_MASTER_HOST:-$MASTER_PORT_5432_TCP_ADDR}
POSTGRESQL_MASTER_PORT=${POSTGRESQL_MASTER_PORT:-$MASTER_PORT_5432_TCP_PORT}
POSTGRESQL_MASTER_USER=${POSTGRESQL_MASTER_USER:-$MASTER_ENV_POSTGRESQL_USER}
POSTGRESQL_MASTER_PASSWORD=${POSTGRESQL_MASTER_PASSWORD:-$MASTER_ENV_POSTGRESQL_PASSWORD}
POSTGRESQL_REPLICATION_USER=${POSTGRESQL_REPLICATION_USER:-$MASTER_ENV_POSTGRESQL_REPLICATION_USER}
POSTGRESQL_REPLICATION_PASSWORD=${POSTGRESQL_REPLICATION_PASSWORD:-$MASTER_ENV_POSTGRESQL_REPLICATION_PASSWORD}
if [ ! $POSTGRESQL_MASTER_HOST ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_MASTER_HOST as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_MASTER_PORT ]; then
echo "POSTGRESQL_MASTER_PORT not specified. Defaulting to 5432"
echo ""
POSTGRESQL_MASTER_PORT=${POSTGRESQL_MASTER_PORT:-5432}
fi
if [ ! $POSTGRESQL_MASTER_USER ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_MASTER_USER as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_REPLICATION_USER ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_REPLICATION_USER as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_REPLICATION_PASSWORD ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_REPLICATION_PASSWORD as well"
echo ""
exit -1
fi
fi
}
initialize_database() {
chmod 0700 $BITNAMI_APP_DIR/data
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER $BITNAMI_APP_DIR/data $BITNAMI_APP_DIR/conf
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER $BITNAMI_APP_DIR/data
case "$POSTGRESQL_REPLICATION_MODE" in
slave)
echo "==> Trying to fetch replication parameters from the master link..."
echo ""
POSTGRESQL_MASTER_HOST=${POSTGRESQL_MASTER_HOST:-$MASTER_PORT_5432_TCP_ADDR}
POSTGRESQL_MASTER_PORT=${POSTGRESQL_MASTER_PORT:-$MASTER_PORT_5432_TCP_PORT}
POSTGRESQL_MASTER_USER=${POSTGRESQL_MASTER_USER:-$MASTER_ENV_POSTGRESQL_USER}
POSTGRESQL_MASTER_PASSWORD=${POSTGRESQL_MASTER_PASSWORD:-$MASTER_ENV_POSTGRESQL_PASSWORD}
POSTGRESQL_REPLICATION_USER=${POSTGRESQL_REPLICATION_USER:-$MASTER_ENV_POSTGRESQL_REPLICATION_USER}
POSTGRESQL_REPLICATION_PASSWORD=${POSTGRESQL_REPLICATION_PASSWORD:-$MASTER_ENV_POSTGRESQL_REPLICATION_PASSWORD}
if [ ! $POSTGRESQL_MASTER_HOST ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_MASTER_HOST as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_MASTER_PORT ]; then
echo "POSTGRESQL_MASTER_PORT not specified. Defaulting to 5432"
echo ""
POSTGRESQL_MASTER_PORT=${POSTGRESQL_MASTER_PORT:-5432}
fi
if [ ! $POSTGRESQL_MASTER_USER ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_MASTER_USER as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_REPLICATION_USER ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_REPLICATION_USER as well"
echo ""
exit -1
fi
if [ ! $POSTGRESQL_REPLICATION_PASSWORD ]; then
echo "In order to setup a replication slave you need to provide the POSTGRESQL_REPLICATION_PASSWORD as well"
echo ""
exit -1
fi
echo "==> Waiting for replication master to accept connections (60s timeout)..."
timeout=60
while ! $BITNAMI_APP_DIR/bin/pg_isready -h $POSTGRESQL_MASTER_HOST -p $POSTGRESQL_MASTER_PORT -t 1 >/dev/null 2>&1
@@ -64,21 +68,9 @@ initialize_database() {
sudo -Hu $BITNAMI_APP_USER \
PGPASSWORD=$POSTGRESQL_REPLICATION_PASSWORD $BITNAMI_APP_DIR/bin/pg_basebackup -D $BITNAMI_APP_DIR/data \
-h ${POSTGRESQL_MASTER_HOST} -p ${POSTGRESQL_MASTER_PORT} -U ${POSTGRESQL_REPLICATION_USER} -X stream -w -v -P >/dev/null 2>&1
echo "==> Setting up streaming replication slave..."
echo ""
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#hot_standby = .*|hot_standby = on|" $BITNAMI_APP_DIR/conf/postgresql.conf
if [ ! -f $BITNAMI_APP_DIR/data/recovery.conf ]; then
s6-setuidgid $BITNAMI_APP_USER cp $BITNAMI_APP_DIR/share/recovery.conf.sample $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#standby_mode = .*|standby_mode = on|" $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#primary_conninfo = .*|primary_conninfo = 'host=${POSTGRESQL_MASTER_HOST} port=${POSTGRESQL_MASTER_PORT} user=${POSTGRESQL_REPLICATION_USER} password=${POSTGRESQL_REPLICATION_PASSWORD}'|" $BITNAMI_APP_DIR/data/recovery.conf
else
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^standby_mode = .*|standby_mode = on|" $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^primary_conninfo = .*|primary_conninfo = 'host=${POSTGRESQL_MASTER_HOST} port=${POSTGRESQL_MASTER_PORT} user=${POSTGRESQL_REPLICATION_USER} password=${POSTGRESQL_REPLICATION_PASSWORD}'|" $BITNAMI_APP_DIR/data/recovery.conf
fi
;;
master|*)
echo "==> Initializing PostgreSQL database..."
echo "==> Initializing database..."
echo ""
s6-setuidgid $BITNAMI_APP_USER $BITNAMI_APP_DIR/bin/initdb -D $BITNAMI_APP_DIR/data \
-U $BITNAMI_APP_USER -E unicode -A trust >/dev/null
@@ -161,6 +153,22 @@ EOF
fi
}
configure_replication_slave() {
if [ "$POSTGRESQL_REPLICATION_MODE" == "slave" ]; then
echo "==> Setting up streaming replication slave..."
echo ""
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#hot_standby = .*|hot_standby = on|" $BITNAMI_APP_DIR/conf/postgresql.conf
if [ ! -f $BITNAMI_APP_DIR/data/recovery.conf ]; then
s6-setuidgid $BITNAMI_APP_USER cp $BITNAMI_APP_DIR/share/recovery.conf.sample $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#standby_mode = .*|standby_mode = on|" $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^#primary_conninfo = .*|primary_conninfo = 'host=${POSTGRESQL_MASTER_HOST} port=${POSTGRESQL_MASTER_PORT} user=${POSTGRESQL_REPLICATION_USER} password=${POSTGRESQL_REPLICATION_PASSWORD}'|" $BITNAMI_APP_DIR/data/recovery.conf
else
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^standby_mode = .*|standby_mode = on|" $BITNAMI_APP_DIR/data/recovery.conf
s6-setuidgid $BITNAMI_APP_USER sed -i "s|^primary_conninfo = .*|primary_conninfo = 'host=${POSTGRESQL_MASTER_HOST} port=${POSTGRESQL_MASTER_PORT} user=${POSTGRESQL_REPLICATION_USER} password=${POSTGRESQL_REPLICATION_PASSWORD}'|" $BITNAMI_APP_DIR/data/recovery.conf
fi
fi
}
print_postgresql_password() {
case "$POSTGRESQL_REPLICATION_MODE" in
slave)

View File

@@ -8,20 +8,24 @@ if [ ! "$(ls -A $BITNAMI_APP_VOL_PREFIX/conf)" ]; then
generate_conf_files
fi
initialize_replication_parameters
if [ ! -f $BITNAMI_APP_VOL_PREFIX/data/PG_VERSION ]; then
initialize_database
create_replication_user
create_custom_database
create_postgresql_user
create_replication_user
print_app_credentials $BITNAMI_APP_NAME $POSTGRESQL_USER `print_postgresql_password` `print_postgresql_database`
else
print_container_already_initialized $BITNAMI_APP_NAME
fi
configure_replication_slave
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER \
$BITNAMI_APP_DIR/data/ \
$BITNAMI_APP_DIR/logs/ || true