github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/apecloud-postgresql/templates/scripts.yaml (about) 1 apiVersion: v1 2 kind: ConfigMap 3 metadata: 4 name: apecloud-postgresql-scripts 5 labels: 6 {{- include "apecloud-postgresql.labels" . | nindent 4 }} 7 data: 8 setup.sh: | 9 #!/bin/bash 10 set -o errexit 11 set -o nounset 12 13 . /kb-scripts/libsetup.sh 14 15 export POSTGRESQL_BIN_DIR="/usr/local/bin" 16 export KB_0_POD_NAME_PREFIX="${KB_0_HOSTNAME%%\.*}" 17 export POSTGRESQL_INIT_MAX_TIMEOUT=60 18 export POSTGRESQL_REPLICATION_PASSWORD=$POSTGRES_PASSWORD 19 20 # default secondary when pgdata is not empty 21 if [ -d ${PGDATA} ]; then 22 echo "have been initialized" 23 else 24 if [ "$KB_0_POD_NAME_PREFIX" == "$KB_POD_NAME" ]; then 25 postgresql_master_init 26 else 27 postgresql_slave_init 28 fi 29 fi 30 31 postgres -D $PGDATA --hba_file=/var/lib/postgresql/conf/pg_hba.conf 32 libsetup.sh: | 33 postgresql_master_init() { 34 initdb --username="$POSTGRES_USER" --pwfile=<(printf "%s\n" "$POSTGRES_PASSWORD") --pgdata="$PGDATA" 35 36 echo "use_consensus = true" >> $PGDATA/consensus.conf 37 postgres -D $PGDATA -p 5432 \ 38 -c consensus_init_meta=ON \ 39 -c consensus_members_info="$KB_POD_FQDN:$POSTGRESQL_PORT_NUMBER@1" 40 } 41 ############### 42 postgresql_slave_init() { 43 local -r check_args=("-U" "$POSTGRES_USER" "-h" "$KB_0_HOSTNAME" "-p" "$POSTGRESQL_PORT_NUMBER" "-d" "postgres") 44 local check_cmd=("$POSTGRESQL_BIN_DIR"/pg_isready) 45 local ready_counter=$POSTGRESQL_INIT_MAX_TIMEOUT 46 47 while ! POSTGRES_PASSWORD=$POSTGRESQL_REPLICATION_PASSWORD "${check_cmd[@]}" "${check_args[@]}"; do 48 sleep 1 49 ready_counter=$((ready_counter - 1)) 50 if ((ready_counter <= 0)); then 51 echo "PostgreSQL master is not ready after $POSTGRESQL_INIT_MAX_TIMEOUT seconds" 52 exit 1 53 fi 54 done 55 56 system_identifier=`psql -U postgres -h $KB_0_HOSTNAME -p 5432 -t -A -c "select system_identifier from pg_control_system();"` 57 initdb --username="$POSTGRES_USER" --pwfile=<(printf "%s\n" "$POSTGRES_PASSWORD") --pgdata="$PGDATA" -i $system_identifier 58 59 echo "use_consensus = true" >> $PGDATA/consensus.conf 60 postgres -D $PGDATA -p 5432 \ 61 -c consensus_init_meta=ON \ 62 -c consensus_members_info="$KB_POD_FQDN:$POSTGRESQL_PORT_NUMBER" 63 }