81 lines
2.3 KiB
YAML
81 lines
2.3 KiB
YAML
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: {{ include "postgresql.fullname" . }}-config
|
|
labels:
|
|
{{- include "postgresql.labels" . | nindent 4 }}
|
|
data:
|
|
{{- if .Values.replication.enabled }}
|
|
primary-init.sh: |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# レプリケーションユーザーの作成
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
|
CREATE USER {{ .Values.postgres.replicationUser }} WITH REPLICATION ENCRYPTED PASSWORD '${REPLICATION_PASSWORD}';
|
|
EOSQL
|
|
|
|
# pg_hba.confの設定
|
|
echo "host replication {{ .Values.postgres.replicationUser }} 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf
|
|
|
|
# postgresql.confの設定
|
|
cat >> ${PGDATA}/postgresql.conf <<EOF
|
|
wal_level = replica
|
|
max_wal_senders = 10
|
|
max_replication_slots = 10
|
|
hot_standby = on
|
|
synchronous_commit = {{ .Values.replication.synchronousCommit }}
|
|
synchronous_standby_names = 'ANY {{ .Values.replication.numSynchronousReplicas }} (*)'
|
|
EOF
|
|
|
|
# PostgreSQLの再起動
|
|
pg_ctl reload
|
|
|
|
replica-init.sh: |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# データディレクトリが空の場合のみレプリケーションを初期化
|
|
if [ ! -s "${PGDATA}/PG_VERSION" ]; then
|
|
echo "Initializing replica from primary..."
|
|
|
|
rm -rf ${PGDATA}/*
|
|
|
|
PGPASSWORD=${REPLICATION_PASSWORD} pg_basebackup \
|
|
-h {{ include "postgresql.fullname" . }}-primary \
|
|
-D ${PGDATA} \
|
|
-U {{ .Values.postgres.replicationUser }} \
|
|
-v -P -W -R
|
|
|
|
# standby.signalの作成
|
|
touch ${PGDATA}/standby.signal
|
|
|
|
echo "Replica initialization completed"
|
|
fi
|
|
{{- end }}
|
|
|
|
{{- if .Values.backup.enabled }}
|
|
backup.sh: |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
BACKUP_DIR="/backup"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.sql.gz"
|
|
RETENTION_DAYS={{ .Values.backup.retention }}
|
|
|
|
echo "Starting backup at ${TIMESTAMP}"
|
|
|
|
# バックアップの実行
|
|
pg_dumpall -U ${POSTGRES_USER} | gzip > ${BACKUP_FILE}
|
|
|
|
# 古いバックアップの削除
|
|
find ${BACKUP_DIR} -name "backup_*.sql.gz" -mtime +${RETENTION_DAYS} -delete
|
|
|
|
echo "Backup completed: ${BACKUP_FILE}"
|
|
|
|
# バックアップサイズの確認
|
|
ls -lh ${BACKUP_FILE}
|
|
{{- end }}
|
|
|