-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpgstandby.sh
executable file
·134 lines (109 loc) · 2.45 KB
/
pgstandby.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
. pgcommon.sh
ACTARCH=$CURDIR/data.arch
ACTBKP=$CURDIR/data.bkp
SBYID=0
SBYNUM=1
STARTED=0
SNDDATA=
SNDPORT=5432
ARCHIVE_MODE="FALSE"
RESTORE_MODE="FALSE"
usage ()
{
cat <<EOF
$PROGNAME sets up the standby(s).
Usage:
$PROGNAME [OPTIONS]
Options:
-a enables WAL archiving
-c SENDER sets up the cascade standby
-n NUM number of standbys (default: 1)
-r enables WAL restoring from shared archive
EOF
}
while [ $# -gt 0 ]; do
case "$1" in
"-?"|--help)
usage
exit 0;;
-a)
ARCHIVE_MODE="TRUE";;
-c)
SNDDATA=$2
shift;;
-n)
SBYNUM=$2
if [ $SBYNUM -lt $SBYMIN ]; then
elog "number of standbys must be >=$SBYMIN"
fi
shift;;
-r)
RESTORE_MODE="TRUE";;
*)
elog "invalid option: $1";;
esac
shift
done
here_is_installation
validate_replication
if [ $PGMAJOR -le 94 ]; then
elog "WAL archiving on standby cannot be enabled in 9.4 or before"
fi
if [ -z "$SNDDATA" ]; then
pgbackup.sh $ACTDATA
else
validate_cascade_replication
SNDPORT=$(show_guc port $SNDDATA/postgresql.conf)
if [ -z "$SNDPORT" ]; then
SNDPORT=5432
fi
rm -rf $ACTBKP
$PGBIN/pg_basebackup -D $ACTBKP -p $SNDPORT -c fast
fi
for ((SBYID=$SBYMIN; SBYID<=$SBYMAX; SBYID++)); do
update_pgdata $SBYDATA$SBYID
$PGBIN/pg_ctl -D $PGDATA status > /dev/null
if [ $? -eq 0 ]; then
continue
fi
SBYPORT=$(expr 5432 + $SBYID)
TRIGGER="trigger$SBYID"
rm -f $TRIGGER
pgrsync.sh -b $ACTBKP $PGDATA
set_guc port $SBYPORT $PGCONF
set_guc log_line_prefix "'$LOGLINEPREFIX $PGDATA '" $PGCONF
set_guc hot_standby on $PGCONF
if [ $PGMAJOR -ge 93 ]; then
set_guc wal_receiver_timeout 0 $PGCONF
fi
if [ $PGMAJOR -ge 120 ]; then
set_guc primary_conninfo "'port=$SNDPORT application_name=$PGDATA'" $PGCONF
set_guc promote_trigger_file "'$TRIGGER'" $PGCONF
set_guc recovery_target_timeline "'latest'" $PGCONF
touch $STANDBYSIGNAL
else
cat << EOF > $RECOVERYCONF
standby_mode = 'on'
primary_conninfo = 'port=$SNDPORT application_name=$PGDATA'
trigger_file = '$TRIGGER'
recovery_target_timeline = 'latest'
EOF
fi
if [ "$ARCHIVE_MODE" = "TRUE" ]; then
pgarch.sh $PGDATA
set_guc archive_mode always $PGCONF
fi
if [ "$RESTORE_MODE" = "TRUE" ]; then
if [ $PGMAJOR -ge 120 ]; then
set_guc restore_command "'cp $ACTARCH/%f %p'" $PGCONF
else
echo "restore_command = 'cp $ACTARCH/%f %p'" >> $RECOVERYCONF
fi
fi
pgstart.sh -w $PGDATA
STARTED=$(expr $STARTED + 1)
if [ $STARTED -ge $SBYNUM ]; then
break
fi
done