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      }