Master-сервер:
192.168.100.122
Hostname: server2.domain.com
Slave-сервер: 192.168.100.175
Hostname: server1.domain.com
Postgresql Version: 9.4.1
Linux version: CentOS 6.5
Шаг 1 (оба сервера). Скачивание и установка репозитория
Hostname: server2.domain.com
Slave-сервер: 192.168.100.175
Hostname: server1.domain.com
Postgresql Version: 9.4.1
Linux version: CentOS 6.5
Шаг 1 (оба сервера). Скачивание и установка репозитория
#yum
install
http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-2.noarch.rpm
После
выполнения должен появиться файл
/etc/yum.repos.d/pgdg-94-centos.repo
с включенным репозиторием. Если он не
появился по каким-то причинам, то
выполнить следующее:
# vi /etc/yum.repos.d/centos.repo
add the following lines
[centos-6-base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
Шаг 2 (оба сервера). Установка необходимых пакетов PostgreSQL.
Для
начала можно попробовать установить пакет
#
yum install postgresql94-server postgresql94-contrib
Если в процессе установки возникли ошибки связанные с публичными ключами, то их нужно исправить:
#
cd
/etc/pki/rpm-gpg#
rpm
--import RPM-GPG-KEY-CentOS-6
Затем
можно приступить к установке минимального
набора пакетов:
#
yum
install postgresql94
postgresql94-libs postgresql94-server
Следующее
действие — инициализация базы банных.
#
service postgresql-9.4 initdb
Включить
при старте системы
# chkconfig postgresql-9.4 on
Шаг 3 (оба сервера). Запуск postgresql.
# service postgresql-9.4 start
Starting postgresql service: [ OK ]
Проверка состояния postgresql:
# service postgresql-9.4 status
postmaster (pid ХХХХ) is running...
Шаг 4 (оба сервера). Подготовительные работы.
При установке PostgreSQL создает в системе пользователя "postgres" для того, чтобы можно было производить начальные операции с базами данных. Необходимо настроить доступ через ssh между серверами, чтобы упростить файловые операции.
# chkconfig postgresql-9.4 on
Шаг 3 (оба сервера). Запуск postgresql.
# service postgresql-9.4 start
Starting postgresql service: [ OK ]
Проверка состояния postgresql:
# service postgresql-9.4 status
postmaster (pid ХХХХ) is running...
Шаг 4 (оба сервера). Подготовительные работы.
При установке PostgreSQL создает в системе пользователя "postgres" для того, чтобы можно было производить начальные операции с базами данных. Необходимо настроить доступ через ssh между серверами, чтобы упростить файловые операции.
Задать пароль пользователю postgres
# passwd postgres
Залогиниться в систему как пользователь postgres
# su - postgres
Сгенерировать ключи ssh для пользователя postgres (сделать на обоих серверах одинаково):
На master-server:
$ ssh-keygen -t rsa
$ ssh-keygen -t dsa
$ cd /var/lib/pgsql/.ssh
$ cat id_rsa.pub >>authorized_keys
$ cat id_dsa.pub >>authorized_keys
На slave-server:
$ ssh-keygen -t rsa
$ ssh-keygen -t dsa
$ cd /var/lib/pgsql/.ssh
$ cat id_rsa.pub >>authorized_keys
$ cat id_dsa.pub >>authorized_keys
Обмен
ключами между серверами.
На
master-server:
$ cd /var/lib/pgsql/.ssh
$ cp authorized_keys server2_authorized_keys
$ scp server2_authorized_keys postgres@server1:/var/lib/pgsql/.ssh/.
$ rm -rf authorized_keys
На slave-server:
$ cd /var/lib/pgsql/.ssh
$ cat server2_authorized_keys >>authorized_keys
$ scp authorized_keys postgres@server2:/var/lib/pgsql/.ssh/.
Теперь можно протестировать соединение между серверами выполнив простую команду с отдалённой стороны.
$ cd /var/lib/pgsql/.ssh
$ cp authorized_keys server2_authorized_keys
$ scp server2_authorized_keys postgres@server1:/var/lib/pgsql/.ssh/.
$ rm -rf authorized_keys
На slave-server:
$ cd /var/lib/pgsql/.ssh
$ cat server2_authorized_keys >>authorized_keys
$ scp authorized_keys postgres@server2:/var/lib/pgsql/.ssh/.
Теперь можно протестировать соединение между серверами выполнив простую команду с отдалённой стороны.
С master-сервера на
slave-сервере
$ ssh server1 date
Со slave-сервера на master-сервере
$ ssh server2 date
$ ssh server1 date
Со slave-сервера на master-сервере
$ ssh server2 date
Шаг 5. Настройка master-сервера
# su - postgres
Создание
специального пользователя rep от имени
которого будет проводиться репликация
данных.
$
psql -c "CREATE USER rep REPLICATION LOGIN CONNECTION LIMIT 1
ENCRYPTED PASSWORD 'redhat';"
Нужно настроить доступ к базе данных с других серверов, а также дать этому специальному пользователю доступ со slave-сервера к СУБД.
Нужно настроить доступ к базе данных с других серверов, а также дать этому специальному пользователю доступ со slave-сервера к СУБД.
$
cd /var/lib/pgsql/9.4/data
$ vi pg_hba.conf
host replication rep 192.168.100.175/32 md5
:wq
Далее нужно отредактировать главный файл конфигурации:
$ vi postgresql.conf
$ vi pg_hba.conf
host replication rep 192.168.100.175/32 md5
:wq
Далее нужно отредактировать главный файл конфигурации:
$ vi postgresql.conf
Найдите указанные параметры, раскомментируйте, если нужно.
listen_addresses = 'localhost,192.168.100.122'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on
Сохранить
и закрыть.
Перезапустите master-сервер, чтобы применить изменения в конфигурации.
# service postgresql-9.4 restart
Шаг 6. Настройка Slave-сервера.
Перед началом необходимо погасить базу данных на slave-сервере.
# service postgresql-9.4 stop
Далее нужно удалить файлы базы данных и импортировать данные с master-сервера. Предпочтительно не удалять каталог с данными, но, если позволяет место на диске, переименовать существующий /var/lib/pgsql/9.4/data.
$ cd /var/lib/pgsql/9.4/data
$ rm -rf *
$ pg_basebackup -D /var/lib/pgsql/9.4/data -h 192.168.100.122 -U rep
Через какое-то время должно быть сообщение об успешном завершении
Перезапустите master-сервер, чтобы применить изменения в конфигурации.
# service postgresql-9.4 restart
Шаг 6. Настройка Slave-сервера.
Перед началом необходимо погасить базу данных на slave-сервере.
# service postgresql-9.4 stop
Далее нужно удалить файлы базы данных и импортировать данные с master-сервера. Предпочтительно не удалять каталог с данными, но, если позволяет место на диске, переименовать существующий /var/lib/pgsql/9.4/data.
$ cd /var/lib/pgsql/9.4/data
$ rm -rf *
$ pg_basebackup -D /var/lib/pgsql/9.4/data -h 192.168.100.122 -U rep
Через какое-то время должно быть сообщение об успешном завершении
NOTICE:
pg_stop_backup complete, all required WAL segments have been
archived
Теперь необходимо внести изменения в файлы конфигурации на slave-сервере:
$ cd /var/lib/pgsql/9.4/data
Нужно настроить доступ к базе данных с других серверов, а также с master-сервера на slave-сервер для репликации, при смене ролей. Для смены ролей в файл pg_hba.conf (но не в конец файла) добавить строки описывающие доступ.
Теперь необходимо внести изменения в файлы конфигурации на slave-сервере:
$ cd /var/lib/pgsql/9.4/data
Нужно настроить доступ к базе данных с других серверов, а также с master-сервера на slave-сервер для репликации, при смене ролей. Для смены ролей в файл pg_hba.conf (но не в конец файла) добавить строки описывающие доступ.
$ vi pg_hba.conf
host replication rep 192.168.100.122/32 md5
:wq
Далее
внести изменения в главный файл
конфигурации на slave-сервере.
$ vi postgresql.conf
Так как на slave-сервер скопирован файл конфигурации с master-сервера, то изменения нужно внести только в IP-адреса, к которым будет привязан сервис.
$ vi postgresql.conf
Так как на slave-сервер скопирован файл конфигурации с master-сервера, то изменения нужно внести только в IP-адреса, к которым будет привязан сервис.
listen_addresses = 'localhost,192.168.100.175'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on
:wq
Создание файла для восстановления recovery.conf на slave-сервере.
$ cd /var/lib/pgsql/9.4/data
$ vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.100.122 port=5432 user=rep password=redhat'
trigger_file = '/tmp/postgresql.trigger.5432'
:wq
Теперь
можно запустить PostgreSQL на slave-сервере.
#
server postgresql-9.4 start
Тестирование репликации
На
master-сервере:
$ su - postgres
$psql
#CREATE TABLE rep_test (test varchar(40));
INSERT INTO rep_test VALUES ('data one');
INSERT INTO rep_test VALUES ('some more words');
INSERT INTO rep_test VALUES ('lalala');
INSERT INTO rep_test VALUES ('hello there');
INSERT INTO rep_test VALUES ('blahblah');
\q
На slave-сервере можно произвести проверку наличия таблицы созданной на master-сервере
$ su - postgres
$psql
#SELECT * FROM rep_test;
test
-----------------
data one
some more words
lalala
hello there
blahblah
(5 rows)
Теперь можно попробовать сделать вставку данных в таблицу на slave-сервере :
$ su - postgres
$psql
#CREATE TABLE rep_test (test varchar(40));
INSERT INTO rep_test VALUES ('data one');
INSERT INTO rep_test VALUES ('some more words');
INSERT INTO rep_test VALUES ('lalala');
INSERT INTO rep_test VALUES ('hello there');
INSERT INTO rep_test VALUES ('blahblah');
\q
На slave-сервере можно произвести проверку наличия таблицы созданной на master-сервере
$ su - postgres
$psql
#SELECT * FROM rep_test;
test
-----------------
data one
some more words
lalala
hello there
blahblah
(5 rows)
Теперь можно попробовать сделать вставку данных в таблицу на slave-сервере :
#INSERT
INTO rep_test VALUES ('oops');
ERROR: cannot execute INSERT in a read-only transaction
ERROR: cannot execute INSERT in a read-only transaction
Ошибка
связана с тем, что slave-сервер работает
только в режиме для чтения. Это позволяет
содержать базу данных в целостном
состоянии.
Комментариев нет:
Отправить комментарий