diff options
Diffstat (limited to 'contrib/replication/configure-replication.sh')
-rw-r--r-- | contrib/replication/configure-replication.sh | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/contrib/replication/configure-replication.sh b/contrib/replication/configure-replication.sh new file mode 100644 index 00000000..9edad3a9 --- /dev/null +++ b/contrib/replication/configure-replication.sh @@ -0,0 +1,186 @@ +#!/bin/bash +# $Id$ + +# Global defaults +CLUSTER=${CLUSTER:-"LedgerSMB"} +NUMNODES=${NUMNODES:-"2"} + +# Defaults - origin node +DB1=${DB1:-${PGDATABASE:-"ledgersmb"}} +HOST1=${HOST1:-`hostname`} +USER1=${USER1:-${PGUSER:-"slony"}} +PORT1=${PORT1:-${PGPORT:-"5432"}} + +# Defaults - node 2 +DB2=${DB2:-${PGDATABASE:-"ledgersmb"}} +HOST2=${HOST2:-"backup.example.info"} +USER2=${USER2:-${PGUSER:-"slony"}} +PORT2=${PORT2:-${PGPORT:-"5432"}} + +# Defaults - node 3 +DB3=${DB3:-${PGDATABASE:-"ledgersmb"}} +HOST3=${HOST3:-"backup3.example.info"} +USER3=${USER3:-${PGUSER:-"slony"}} +PORT3=${PORT3:-${PGPORT:-"5432"}} + +# Defaults - node 4 +DB4=${DB4:-${PGDATABASE:-"ledgersmb"}} +HOST4=${HOST4:-"backup4.example.info"} +USER4=${USER4:-${PGUSER:-"slony"}} +PORT4=${PORT4:-${PGPORT:-"5432"}} + +# Defaults - node 5 +DB5=${DB5:-${PGDATABASE:-"ledgersmb"}} +HOST5=${HOST5:-"backup5.example.info"} +USER5=${USER5:-${PGUSER:-"slony"}} +PORT5=${PORT5:-${PGPORT:-"5432"}} + +store_path() +{ + +echo "include <${PREAMBLE}>;" > $mktmp/store_paths.slonik + i=1 + while : ; do + eval db=\$DB${i} + eval host=\$HOST${i} + eval user=\$USER${i} + eval port=\$PORT${i} + + if [ -n "${db}" -a "${host}" -a "${user}" -a "${port}" ]; then + j=1 + while : ; do + if [ ${i} -ne ${j} ]; then + eval bdb=\$DB${j} + eval bhost=\$HOST${j} + eval buser=\$USER${j} + eval bport=\$PORT${j} + if [ -n "${bdb}" -a "${bhost}" -a "${buser}" -a "${bport}" ]; then + echo "STORE PATH (SERVER=${i}, CLIENT=${j}, CONNINFO='dbname=${db} host=${host} user=${user} port=${port}');" >> $mktmp/store_paths.slonik + else + err 3 "No conninfo" + fi + fi + if [ ${j} -ge ${NUMNODES} ]; then + break; + else + j=$((${j} + 1)) + fi + done + if [ ${i} -ge ${NUMNODES} ]; then + break; + else + i=$((${i} +1)) + fi + else + err 3 "no DB" + fi + done +} + +mktmp=`mktemp -d -t ledgersmb-temp.XXXXXX` +if [ $MY_MKTEMP_IS_DECREPIT ] ; then + mktmp=`mktemp -d /tmp/ledgersmb-temp.XXXXXX` +fi + +PREAMBLE=${mktmp}/preamble.slonik + +echo "cluster name=${CLUSTER};" > $PREAMBLE + +alias=1 + +while : ; do + eval db=\$DB${alias} + eval host=\$HOST${alias} + eval user=\$USER${alias} + eval port=\$PORT${alias} + + if [ -n "${db}" -a "${host}" -a "${user}" -a "${port}" ]; then + conninfo="dbname=${db} host=${host} user=${user} port=${port}" + echo "NODE ${alias} ADMIN CONNINFO = '${conninfo}';" >> $PREAMBLE + if [ ${alias} -ge ${NUMNODES} ]; then + break; + else + alias=`expr ${alias} + 1` + fi + else + break; + fi +done + + +SEQUENCES=" acc_trans_entry_id_seq audittrail_entry_id_seq + custom_field_catalog_field_id_seq custom_table_catalog_table_id_seq + id inventory_entry_id_seq invoiceid jcitemsid orderitemsid + partscustomer_entry_id_seq partsvendor_entry_id_seq + session_session_id_seq shipto_entry_id_seq " + +TABLES=" acc_trans ap ar assembly audittrail business chart + custom_field_catalog custom_table_catalog customer customertax + defaults department dpt_trans employee exchangerate gifi gl inventory + invoice jcitems language makemodel oe orderitems parts partscustomer + partsgroup partstax partsvendor pricegroup project recurring + recurringemail recurringprint session shipto sic status tax + transactions translation vendor vendortax warehouse yearend" + +SETUPSET=${mktmp}/create_set.slonik + +echo "include <${PREAMBLE}>;" > $SETUPSET +echo "create set (id=1, origin=1, comment='${CLUSTER} Tables and Sequences');" >> $SETUPSET + +tnum=1 + +for table in `echo $TABLES`; do + echo "set add table (id=${tnum}, set id=1, origin=1, fully qualified name='public.${table}', comment='${CLUSTER} table ${table}');" >> $SETUPSET + tnum=`expr ${tnum} + 1` +done + +snum=1 +for seq in `echo $SEQUENCES`; do + echo "set add sequence (id=${snum}, set id=1, origin=1, fully qualified name='public.${seq}', comment='${CLUSTER} sequence ${seq}');" >> $SETUPSET + snum=`expr ${snum} + 1` +done + +NODEINIT=$mktmp/create_nodes.slonik +echo "include <${PREAMBLE}>;" > $NODEINIT +echo "init cluster (id=1, comment='${CLUSTER} node 1');" >> $NODEINIT + +node=2 +while : ; do + SUBFILE=$mktmp/subscribe_set_${node}.slonik + echo "include <${PREAMBLE}>;" > $SUBFILE + echo "store node (id=${node}, comment='${CLUSTER} subscriber node ${node}');" >> $NODEINIT + echo "subscribe set (id=1, provider=1, receiver=${node}, forward=yes);" >> $SUBFILE + if [ ${node} -ge ${NUMNODES} ]; then + break; + else + node=`expr ${node} + 1` + fi +done + +store_path + +echo " +$0 has generated Slony-I slonik scripts to initialize replication for LedgerSMB. + +Cluster name: ${CLUSTER} +Number of nodes: ${NUMNODES} +Scripts are in ${mktmp} +===================== +" +ls -l $mktmp + +echo " +===================== +Be sure to verify that the contents of $PREAMBLE very carefully, as +the configuration there is used widely in the other scripts. +===================== +=====================" + + + + + + + + + |