Требуется обеспечить реплицирование базы данных астронета (discovery) в режиме онлайн ( eol → zeon ).
tar xzf astronet.tar.gz cd astronet
listen_addresses = '*' ssl=on
hostssl discovery postgres 212.192.243.85/32 trust hostssl discovery postgres 195.208.220.205/32 trust
hostssl discovery-backup postgres 195.208.220.205/32 trust
Эти строчки должны быть ниже настроек для localhost!
createdb -U postgres discovery-backup
DBNAME="discovery-backup" PGHOME=/usr/local/pgsql PGUSER='postgres' PGPORT='5432'
./init.sh
SLONY_USER='postgres' SLONIK=/usr/local/pgsql/bin/slonik CLUSTER='astronet' CONNINFO1="dbname=discovery host=www.astronet.ru port=5433 user=$SLONY_USER sslmode=require" CONNINFO2="dbname=discovery-backup host=zeon.sai.msu.ru port=5432 user=$SLONY_USER sslmode=require" PREAMBLE="cluster name = $CLUSTER; node 1 admin conninfo = '$CONNINFO1'; node 2 admin conninfo = '$CONNINFO2'; "
./cluster.sh init_cluster
ВНИМАНИЕ! Все соединения с базой discovery после этого действия должны быть установлены заново - иначе могут быть проблемы с записью в базу
./cluster.sh add_node 2
где 2 - уникальный номер узла в кластере
./cluster.sh connect_node 2 1
./cluster.sh subscribe_node 2 1
su postgres -c '/usr/local/pgsql/bin/slon astronet "dbname=discovery-backup port=5432 user=postgres sslmode=require" >> /var/log/pgsql/slony.log &'
Такую же строку добавляем в /etc/rc.d/rc.local
su postgres -c '/usr/local/pgsql/bin/slon astronet "dbname=discovery port=5433 user=postgres sslmode=require" >> /var/log/pgsql/slony.log &'
Такую же строку добавляем в /etc/rc.d/rc.local
./cluster.sh unsubscribe_node 2
./cluster.sh disconnect_node 2
./cluster.sh drop_node 2
./cluster.sh drop_node 1
alter table author_interface_map add test text;
./cluster.sh execute example_ddl.sql
Предположим, что теперь мы хотим добавить в кластер узел 3 таким образом, чтобы все изменения узел 3 получал через узел 2. Пускай узел 3 называется elizabet, имеет ip-адрес 212.192.243.99 и название базы discovery-backup
listen_addresses = '*' ssl=on
hostssl discovery-backup postgres 212.192.243.85/32 trust hostssl discovery-backup postgres 195.208.220.205/32 trust
hostssl discovery postgres 212.192.243.99/32 trust
hostssl discovery-backup postgres 212.192.243.99/32 trust
createdb -U postgres discovery-backup
DBNAME="discovery-backup" PGHOME=/usr/local/pgsql PGUSER='postgres' PGPORT='5432'
./init.sh
CLUSTER='astronet' CONNINFO1="dbname=discovery host=www.astronet.ru port=5433 user=$SLONY_USER sslmode=require" CONNINFO2="dbname=discovery-backup host=zeon.sai.msu.ru port=5432 user=$SLONY_USER sslmode=require" CONNINFO3="dbname=discovery-backup host=elizabet.sai.msu.ru port=5432 user=$SLONY_USER sslmode=require" PREAMBLE="cluster name = $CLUSTER; node 1 admin conninfo = '$CONNINFO1'; node 2 admin conninfo = '$CONNINFO2'; node 3 admin conninfo = '$CONNINFO3'; "
./cluster.sh add_node 3
su postgres -c '/usr/local/pgsql/bin/slon astronet "dbname=discovery-backup port=5432 user=postgres sslmode=require" >> /var/log/pgsql/slony.log &'
Такую же строку добавляем в /etc/rc.d/rc.local
./cluster.sh connect_node 3 1 ./cluster.sh connect_node 3 2
./cluster.sh unsubscribe_node 2 ./cluster.sh subscribe_node 2 1 yes
ВНИМАНИЕ! При переподписке передается объем тот же объем данных, что и при первичной подписке
./cluster.sh subscribe_node 3 2