рд╢реБрдн рджрд┐рдиред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬреЗрдХреНрдпреВ 9 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХреА рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ - рджреЗрд╢реА рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдирдпрд╛ рддрдВрддреНрд░ рдорд╛рд╕реНрдЯрд░ рд╕реЗ рджрд╛рд╕ рдХреЗ рд▓рд┐рдП XLOG рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╡рд╕рд╛ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ ALTERs рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, 9 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рд╕реНрд▓реЛрдиреА рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ (рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ
рдпрд╣рд╛рдВ рдбреЗрдмрд┐рдпрди / рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ), testdb рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ /var/lib/postgresql/9.0/ рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ, рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рддреЛ, рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:
1. рд╕реБрдиреЗрдВ && pg_hba.conf рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЧреБрд░реБ рдХрд╛ рдЖрдИрдкреА 192.168.0.1 рд╣реИ, рдФрд░ рджрд╛рд╕ рдХрд╛ 192.168.0.2 рд╣реИред рддрдм postgresql.conf рдореЗрдВ рд╕реБрдирдиреЗ рдХреА рд░реЗрдЦрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
listen_addresses = '192.168.0.1'
рдФрд░, рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ pg_hba.conf рдкрд░ рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА:
host replication postgres 192.168.0.2/32 trust
2. рд╣рдо рдорд╛рд╕реНрдЯрд░ рдкрд░ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ# , . hot_standby archive ().
wal_level = hot_standby
#
max_wal_senders = 2
# ? - , .
wal_keep_segments = 32
# ( , , ). , . , .
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.0/main/archive/%f'
рдЕрдм рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
3. рд╣рдо рдорд╛рд╕реНрдЯрд░ рд╕реЗ рджрд╛рд╕ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рднреЗрдЬрддреЗ рд╣реИрдВредрд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХреЗред рдореИрдВрдиреЗ rsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЧреБрд▓рд╛рдо рдкрд░ postgresql рдХреЛ рдмреБрдЭрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
$ psql -c "SELECT pg_start_backup('label', true)"
$ rsync -a /var/lib/postgresql/9.0/main/ slave:/var/lib/postgresql/9.0/main/ --exclude postmaster.pid
$ psql -c "SELECT pg_stop_backup()"
4. рджрд╛рд╕ рдкрд░ hot_standby рдЪрд╛рд▓реВ рдХрд░реЗрдВPostgresql.conf рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
hot_standby = on
5. рджрд╛рд╕ рдкрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдореЗрдВ .conf (рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдЬреЛ рдХрд┐ /var/lib/postgresql/9.0/main рдореЗрдВ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:
standby_mode = 'on'
primary_conninfo = 'host=192.168.0.1 port=5432 user=postgres'
trigger_file = '/var/lib/postgresql/9.0/main/trigger'
restore_command = 'cp /var/lib/postgresql/9.0/main/archive/%f "%p"'
рдЕрд▓рдЧ рд╕реЗ, рдореИрдВ рдЯреНрд░рд┐рдЧрд░_рдлрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдлрдХреИрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк (рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдХрд░) рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рд╕рдХреЗрдВ рдФрд░ рд╕реНрд▓реЗрдЯреА рдХреЛ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХреЗрдВред
6. рд╣реЛ рдЧрдпрд╛!рдЧреБрд▓рд╛рдо рдЪрд▓рд╛рдУред рдЕрдЧрд░ рдЯреАрдо рдЧреБрд▓рд╛рдо рд╣реИ
ps aux | grep receiver
рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛
postgres 1953 0.0 0.0 101980 4156 ? Ss 19:19 0:00 postgres: wal receiver process streaming 2/B40001D0
(рдкрдврд╝реЗрдВ - рд╡реЙрд▓ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ) - рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
7. рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛рдЕрдм рджреБрдЦрдж рдмрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ - рд╣рд╛рдереА рдХреЗ рд╡рд┐рдкрд░реАрдд, рджреЗрд╢реА рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд╛рдирд╡-рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рд╕реНрдЯрд░ / рджрд╛рд╕ рдкрд░ рдЬрд░реНрдирд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдВрддрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ:
psql -c "SELECT pg_current_xlog_location()" -h192.168.0.1
--------------------------
0/2000000
(1 row)
psql -c "select pg_last_xlog_replay_location()" -h192.168.0.2
pg_last_xlog_replay_location
------------------------------
0/2000000
(1 row)
рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ, рдЖрдкрдХреЛ рд╕реНрд▓реИрд╢ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдЪрдИрдПрдХреНрд╕ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ - рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЕрдореВрд░реНрдд рдореВрд▓реНрдп рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реЛрдЧреАред
рдЕрдзрд┐рдХ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ, рдореИрдВ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдПрдХ рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб рд░рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдПрди-рд╕реЗрдХрдВрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 30) рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдлрд┐рд░, рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдЧреБрд▓рд╛рдо рдкрд░ рдПрдХ рд╣реА рдкреНрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдШрдЯрд╛рддреЗ рд╣реБрдП, рд╣рдо рдЕрдВрддрд░рд╛рд▓ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
8. рдЕрдЧрд░ рдХреЛрдИ рднрдпрд╛рдирдХ рдмрд╛рдд рд╣реБрдИрдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд▓реЛрдб рд╕рдВрддреБрд▓рди рдФрд░ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕реНрд╡рд╛рдореА рдиреЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рддреЛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдВрдЧреЗ:
a) рдЧреБрд▓рд╛рдо (рдкреИрд░рд╛рдЧреНрд░рд╛рдл 5 рдореЗрдВ рд╡рд░реНрдгрд┐рдд) рдкрд░ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рджрд╛рд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ - рдЖрдк рдЗрд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреА) рдЕрдЧрд▓рд╛, рдЬрдм рдорд╛рд╕реНрдЯрд░ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рдСрдкрд░реЗрд╢рди рдкрд░ рд▓реМрдЯрддреА рд╣реИ - рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВ -
рдореВрд▓ рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ -
рдорд╛рд╕реНрдЯрд░ рдкрд░ рдкрд╛рдВрдЪрд╡реЗрдВ рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рдП - рдЧреБрд▓рд╛рдо рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ - рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
PS рдпрд╣ рдкрд╛рда
рдЗрд╕ рд╡рд┐рдХрд┐ рдкреГрд╖реНрда рдХрд╛ рдПрдХ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рд╣реИ
ред