Install Slony

% tar -zxvf slony1.tar.gz
% cd slony1
% ./configure
% make install

Create and Sync Slave database

createdb -O contactuser drupal-4.7.0-beta2_slave
createlang -U postgres -h localhost plpgsql drupal-4.7.0-beta2_slave
pg_dump -s -U postgres -h localhost drupal-4.7.0-beta2 | psql -U postgres -h localhost drupal-4.7.0-beta2_slave

Create a script called "cluster_setup.sh"

#!/bin/sh
CLUSTER=drupal_cluster
DB1=drupal-4.7.0-beta2
DB2=drupal-4.7.0-beta2_slave
H1=localhost
H2=localhost
U=postgres


slonik <<_EOF_
cluster name = $CLUSTER;
node 1 admin conninfo = 'dbname=$DB1 host=$H1 user=$U';
node 2 admin conninfo = 'dbname=$DB2 host=$H2 user=$U';
init cluster (id = 1, comment = 'Node 1');


create set (id = 1, origin = 1,
       comment = 'All Drupal Tables');

set add table (set id = 1, origin = 1, id = 1,
        full qualified name = 'public.node_revisions',
        comment = 'Node_Revision');

set add table (set id = 1, origin = 1, id = 2,full qualified name = 'public.access',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 3,full qualified name = 'public.accesslog',comment = 'Access Log Table');
set add table (set id = 1, origin = 1, id = 4,full qualified name = 'public.aggregator_category',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 5,full qualified name = 'public.aggregator_category_feed',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 6,full qualified name = 'public.aggregator_category_item',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 7,full qualified name = 'public.aggregator_feed',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 8,full qualified name = 'public.aggregator_item',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 9,full qualified name = 'public.authmap',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.blocks');
set add table (set id = 1, origin = 1, id = 10,full qualified name = 'public.blocks',comment = 'Access Table',key=SERIAL);

set add table (set id = 1, origin = 1, id = 11,full qualified name = 'public.book',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 13,full qualified name = 'public.boxes',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 14,full qualified name = 'public.cache',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 15,full qualified name = 'public.comments',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 16,full qualified name = 'public.contact',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 17,full qualified name = 'public.directory',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.files');
set add table (set id = 1, origin = 1, id = 18,full qualified name = 'public.files',comment = 'Access Table',key=SERIAL);
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.filters');
set add table (set id = 1, origin = 1, id = 19,full qualified name = 'public.filters',comment = 'Access Table',key=SERIAL);

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.flood');
set add table (set id = 1, origin = 1, id = 20,full qualified name = 'public.flood',comment = 'Access Table',key=SERIAL);


set add table (set id = 1, origin = 1, id = 21,full qualified name = 'public.forum',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 22,full qualified name = 'public.history',comment = 'Access Table');

set add table (set id = 1, origin = 1, id = 23,full qualified name = 'public.locales_meta',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 24,full qualified name = 'public.locales_source',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.locales_target');
set add table (set id = 1, origin = 1, id = 25,full qualified name = 'public.locales_target',comment = 'Access Table',key=SERIAL);


set add table (set id = 1, origin = 1, id = 26,full qualified name = 'public.menu',comment = 'Access Table');

set add table (set id = 1, origin = 1, id = 27,full qualified name = 'public.moderation_filters',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.moderation_roles');
set add table (set id = 1, origin = 1, id = 28,full qualified name = 'public.moderation_roles',comment = 'Access Table',key=SERIAL);

set add table (set id = 1, origin = 1, id = 29,full qualified name = 'public.moderation_votes',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 30,full qualified name = 'public.node',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 31,full qualified name = 'public.node_access',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 32,full qualified name = 'public.node_counter',comment = 'Access Table');
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.permission');
set add table (set id = 1, origin = 1, id = 33,full qualified name = 'public.permission',comment = 'Access Table',key=SERIAL);
set add table (set id = 1, origin = 1, id = 34,full qualified name = 'public.pg_ts_cfg',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 35,full qualified name = 'public.pg_ts_cfgmap',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 36,full qualified name = 'public.pg_ts_dict',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 37,full qualified name = 'public.pg_ts_parser',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 38,full qualified name = 'public.poll',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 39,full qualified name = 'public.poll_choices',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 40,full qualified name = 'public.profile_fields',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.profile_values');
set add table (set id = 1, origin = 1, id = 41,full qualified name = 'public.profile_values',comment = 'Access Table',key=SERIAL);
set add table (set id = 1, origin = 1, id = 42,full qualified name = 'public.role',comment = 'Access Table');

TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.search_dataset');
set add table (set id = 1, origin = 1, id = 43,full qualified name = 'public.search_dataset',comment = 'Access Table',key=SERIAL);
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.search_index');
set add table (set id = 1, origin = 1, id = 44,full qualified name = 'public.search_index',comment = 'Access Table',key=SERIAL);
set add table (set id = 1, origin = 1, id = 45,full qualified name = 'public.node_comment_statistics',comment = 'Access Table');

set add table (set id = 1, origin = 1, id = 46,full qualified name = 'public.search_total',comment = 'Access Table');

# TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.sessions');
# set add table (set id = 1, origin = 1, id = 50,full qualified name = 'public.sessions',comment = 'Access Table',key=SERIAL);
set add table (set id = 1, origin = 1, id = 47,full qualified name = 'public.system',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 48,full qualified name = 'public.term_data',comment = 'Access Table');
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.term_hierarchy');
set add table (set id = 1, origin = 1, id = 49,full qualified name = 'public.term_hierarchy',comment = 'Access Table',key=SERIAL);

set add table (set id = 1, origin = 1, id = 51,full qualified name = 'public.term_node',comment = 'Access Table');
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.term_relation');
set add table (set id = 1, origin = 1, id = 52,full qualified name = 'public.term_relation',comment = 'Access Table',key=SERIAL);
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.term_synonym');
set add table (set id = 1, origin = 1, id = 53,full qualified name = 'public.term_synonym',comment = 'Access Table',key=SERIAL);
TABLE ADD KEY(NODE ID=1,FULLY QUALIFIED NAME='public.tsearch_index');
set add table (set id = 1, origin = 1, id = 54,full qualified name = 'public.tsearch_index',comment = 'Access Table',key=SERIAL);

set add table (set id = 1, origin = 1, id = 55,full qualified name = 'public.url_alias',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 56,full qualified name = 'public.users',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 57,full qualified name = 'public.users_roles',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 58,full qualified name = 'public.variable',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 59,full qualified name = 'public.vocabulary',comment = 'Access Table');
set add table (set id = 1, origin = 1, id = 60,full qualified name = 'public.vocabulary_node_types',comment = 'Access Table');
# set add table (set id = 1, origin = 1, id = 61,full qualified name = 'public.watchdog',comment = 'Access Table');

#----ADD SEQUENCES HERE
set add sequence (set id = 1, origin = 1, id = 62,full qualified name = 'public.access_aid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 63,full qualified name = 'public.accesslog_aid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 64,full qualified name = 'public.aggregator_category_cid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 65,full qualified name = 'public.aggregator_feed_fid_seq',comment = 'Access Table');

set add sequence (set id = 1, origin = 1, id = 66,full qualified name = 'public.aggregator_item_iid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 67,full qualified name = 'public.authmap_aid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 68,full qualified name = 'public.boxes_bid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 69,full qualified name = 'public.comments_cid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 70,full qualified name = 'public.contact_cid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 71,full qualified name = 'public.files_fid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 72,full qualified name = 'public.filter_formats_format_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 73,full qualified name = 'public.locales_source_lid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 74,full qualified name = 'public.menu_mid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 75,full qualified name = 'public.moderation_filters_fid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 76,full qualified name = 'public.moderation_votes_mid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 77,full qualified name = 'public.node_access_nid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 78,full qualified name = 'public.node_nid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 79,full qualified name = 'public.node_revisions_vid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 85,full qualified name = 'public.poll_choices_chid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 86,full qualified name = 'public.profile_fields_fid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 87,full qualified name = 'public.role_rid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 88,full qualified name = 'public.term_data_tid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 89,full qualified name = 'public.url_alias_pid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 90,full qualified name = 'public.users_uid_seq',comment = 'Access Table');
set add sequence (set id = 1, origin = 1, id = 91,full qualified name = 'public.vocabulary_vid_seq',comment = 'Access Table');
# set add sequence (set id = 1, origin = 1, id = 92,full qualified name = 'public.watchdog_wid_seq',comment = 'Access Table');

store node (id = 2, comment = 'Node 2');
store path (server = 1, client = 2,
      conninfo = 'dbname=$DB1 host=$H1 user=$U');
store path (server = 2, client = 1,
           conninfo = 'dbname=$DB2 host=$H2 user=$U');
store listen (origin = 1, provider = 1, receiver = 2);
store listen (origin = 2, provider = 2, receiver = 1);

Create a script called "sync.sh"

#!/bin/sh
CLUSTER=drupal_cluster
DB1=drupal-4.7.0-beta2
DB2=drupal-4.7.0-beta2_slave
H1=localhost
H2=localhost
U=postgres

echo "Starting Slony Replication Processes"
slon $CLUSTER dbname=$DB1 user=$U > /tmp/$CLUSTER.slony.log &
slon $CLUSTER  dbname=$DB2 user=$U >> /tmp/$CLUSTER.slony.log &
echo "Completed Slony Replication Processes"



slonik <<_EOF_
cluster name = $CLUSTER;
node 1 admin conninfo = 'dbname=$DB1 host=$H1 user=$U';
node 2 admin conninfo = 'dbname=$DB2 host=$H2 user=$U';
subscribe set (id = 1, provider = 1, receiver = 2, forward = yes);

For uninstallation procedure, create a script called "uninstall.sh"

#!/bin/ksh
CLUSTER=drupal_cluster
MASTER_DB=drupal-4.7.0-beta2
SLAVE_DB=drupal-4.7.0-beta2_slave
USER=postgres
MASTER_HOST=localhost
SLAVE_HOST=localhost



slonik << _EOF_
cluster name = $CLUSTER;
node 1 admin conninfo = 'dbname=$MASTER_DB host=$MASTER_HOST user=$USER';
node 2 admin conninfo = 'dbname=$SLAVE_DB host=$SLAVE_HOST user=$USER';
UNINSTALL NODE(ID=1);
UNINSTALL NODE(ID=2);
  • Run cluster_setup.sh
  • Run sync.sh
  • This will sync up the both databases, and start up the replication processes for the tables and sequences. There are still some problems with this, but I am hoping someone will answer this post to give me suggestions and errors they encountered.

    Thanks!

    Comments

    maggam’s picture

    This is for master-slave replication, therefore this completly works...