mirror of
https://github.com/bitnami/containers.git
synced 2026-03-14 06:48:11 +08:00
configure slave connection info at every startup
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user