Все
изменения в master будут немедленно отражены на standby.
----------------
-------------------------
| Master
| | Standby (Только
чтение) |
|
192.168.56.101 |----------->|
192.168.56.102 |
---------------- данные -------------------------
- Измените /var/lib/pgsql/9.3/data/postgresql.conf
2. wal_level = hot_standby
3. max_wal_senders = 2 //
Maximum number of standby DB can support
wal_keep_segments = 5000 // Write
ahead log segment size; maximum disk space for pg_xlog/ is 16MB x 5000 = 80GB
- Измените /var/lib/pgsql/9.3/data/pg_hba.conf
Дайте права relication user на соединение с master (IP = 192.168.56.102) to connect to the master.
host
replication replication 192.168.56.102/32 md5
- Создайте пользователя replication
6. $ su postgres
7. $ psql -d postgres -c "create user replication superuser
password'12345';"
8. $ exit
9. $ /etc/init.d/postgresql-9.3 restart
- Сделайте бэкап
11.$ su postgres
12.$ psql -d
postgres -c "SELECT pg_start_backup('/var/lib/pgsql/9.3/data');"
13.$ rsync -av
--exclude pg_xlog --exclude data/*.conf /var/lib/pgsql/9.3/
root@192.168.56.102:/var/lib/pgsql/9.3/
14.$ psql -d
postgres -c "SELECT pg_stop_backup();"
- Откройте порт 5432 в найтройках
фаерволла. Добавьте следующее правило в /etc/sysconfig/iptables (перед
строкой с COMMIT).
16.-A INPUT -m
state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
- Перезапустите iptables.
$ /etc/init.d/iptables restart
Настройки Standby
- Измените /var/lib/pgsql/9.3/data/postgresql.conf
2. port = 5432
3. hot_standby = on
- Создайте файл с настройками
восстановления /var/lib/pgsql/9.3/data/recovery.conf
5. standby_mode = 'on'
6. primary_conninfo = 'host=192.168.56.101 port=5432 user=replication
password=12345'
7. trigger_file = '/var/lib/pgsql/9.3/data/trigger_activestand'
- Перезапустите postgresql
9. $ service postresql-9.3 restart
- Откройте порт 5432. В
/etc/sysconfig/iptables добавьте.
11.-A INPUT -m
state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
- Перезапустите iptables.
$ /etc/init.d/iptables restart
Различные действия
На master
- Подключение к бд
2. $ su postgres
3. $ psql
- Создайте sample с
данными
5. postgres=# CREATE DATABASE sample;
6. postgres=# \c sample
7. sample=# CREATE table samples (
8. id integer
PRIMARY KEY,
9. name varchar(25),
10.
stuff text);
11.sample=# INSERT
into samples values (1, 'foo', 'тест');
12.sample=# INSERT
into samples values (2, 'bar', 'тест' );
13.sample=# INSERT
into samples values (4, 'bin', 'тест' );
14.sample=# INSERT
into samples values (3, 'baz', 'тест' );
На standby
- Подключитесь к базе данных
2. $ su postgres
3. $ psql
- Проверьте, существуют ли данные
5. postgres=# \c sample
6. sample=# select * from samples;
7. id | name |
stuff
8. ----+------+-------------
9. 1 | foo
| тест
10.
2 | bar | тест
11.
3 | baz | тест
4 | bin | тест
- Убедитесь, что база данных на
standby в режиме только для чтения
13.postgres=# \c sample
14.sample=# INSERT
into samples values (6, 'тест', 'тест');
ERROR: cannot execute INSERT in a
read-only transaction
Если Master падает, его место занимает standby
Остановите сервер на master
$ service postgresql-9.3 stop
На standby переключите базу данных в режим master
- Edit /var/lib/pgsql/9.3/data/postgresql.conf
2. #hot_standby = off
- Переименуйте /var/lib/pgsql/9.3/data/recovery.conf в
/var/lib/pgsql/9.3/data/_recovery.conf
4. $ mv /var/lib/pgsql/9.3/data/recovery.conf
/var/lib/pgsql/9.3/data/_recovery.conf
- Перезапустите сервер
$ service postgresql-9.3 restart
Взято отсюда.