Postgres on FreeBSD with Slony

Итак, установка Postgresql 9.3 на Freebsd  и настройка Slony-репликации. Нативная репликация это конечно же хорошо и у меня работает в проде репликация Master-Slave, но Slony умеет каскадную репликацию.

У нас будут два сервака, один Master – 192.168.1.1 и Slave  – 192.168.1.2

И на мастере и на слейве устанавливаем Postgres

cd /usr/ports/databases/postgresql93-server && make install clean && rehash

Сразу же ставим слоника

cd /usr/ports/databases/slony1v2 && make install clean

Я ставлю слоника из портов. Так уже проверено и работает. Не вижу смысла отдельно его собираться, если на фряхе есть он в портах. Ну разве что, если нужна более свежая версия.

Добавляем все в rc.conf

echo ‘postgresql_enable=”YES”‘ >> /etc/rc.conf
echo ‘slon_enable=”YES”‘ >> /etc/rc.conf

 

Далее инициализируем базу и добавляем пользователя в postgres

/usr/local/etc/rc.d/postgresql initdb

psql -U pgsql template1

CREATE USER pguser WITH PASSWORD ‘password’;

ALTER USER pguser WITH PASSWORD ‘password’;

ALTER USER pguser superuser createrole createdb;

CREATE DATABASE test owner=pguser;

 

Создали пользователя и права, создали базу test.

Подключаемся к базе и создаем таблицу для репликации.

psql -U pguser test

CREATE TABLE users (id INTEGER PRIMARY KEY, login CHAR(64), password CHAR(64));

Чтобы подключаться без пароля к базе, необходимо в home пользователя создать файлик .pgpass с содержимым

*:5432:test:pguser:password

Права на файл 600 иначе работать не будет.

Добавим доступы для репликации в /usr/local/pgsql/data/pg_hba.conf

На мастере

host    replication            pguser            192.168.1.2/32         md5

На слейве

host    replication            pguser            192.168.1.1/32         md5

Все готово, можно приступать к репликации.

Сразу можно создать файл конфиг для демона слоника /usr/local/etc/slon.conf

Туда пишем имя нашего кластера и данные для подключения. Это делаем на обоих серваках.

cluster_name=’replic’
conn_info=’dbname=test port=5432 user=pguser’

Далее действия на мастере. Создаем скрипт инициализации.

#!/bin/sh

CLUSTER=replic

DBNAME1=test
DBNAME2=еуіе
HOST1=192.168.1.1
HOST2=192.168.1.2
SLONY_USER=pguser

slonik <<EOF

cluster name = $CLUSTER;

node 1 admin conninfo = ‘dbname=$DBNAME1 host=$HOST1 port=5432 user=pguser password=password’;
node 2 admin conninfo = ‘dbname=$DBNAME2 host=$HOST2 port=5432 user=pguser password=password;

init cluster (id = 1,comment = ‘Node 1 – Master’);
create set (id = 1, origin = 1);

set add table (set id = 1,origin = 1,id = 1 , full qualified name = ‘public.users’);
store node(id = 2,event node = 1,comment = ‘slave’);

store path(server = 1,client = 2,conninfo = ‘dbname=$DBNAME1 host=$HOST1 port=5432 user=pguser password=password’);
store path(server = 2,client = 1,conninfo = ‘dbname=$DBNAME2 host=$HOST2 port=5432 user=pguser password=password’);

EOF

То есть добавили две ноды и указали одну таблицу users. Если все нормально с доступами и правами, то скрипт отработает без ошибок. После этого демонов slon можно запустить

/usr/local/etc/rc.d/slon start

И подпишем наш слейв на репликацию таким скриптом.

#!/bin/sh

CLUSTER=replic

DBNAME1=test
DBNAME2=test

HOST1=192.168.1.1
HOST2=192.168.1.2

SLONY_USER=pguser

slonik <<EOF
cluster name = $CLUSTER;
node 1 admin conninfo = ‘dbname=$DBNAME1 host=$HOST1 port=5432 user=pguser password=password’;
node 2 admin conninfo = ‘dbname=$DBNAME2 host=$HOST2 port=5432 user=pguser password=password’;

echo’subscribing’;
subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);

EOF

Все. Теперь можно добавить в таблицу на мастере какие-то данные, типа

INSERT INTO users (id, login, password) VALUES (2, ‘test2’, ‘test’);

И увидим изменения на слейве.

select * from users;

id | login | password
—————-
2 | test2 | test

Репликация таблицы users работает.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *