This information is Copyright 2007 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: Slony-1 - Provide Slony as a replication tool for PostgreSQL on Solaris and OpenSolaris distributions 1.2. Name of Document Author/Supplier: Satyanarayana Bodapati 1.3. Date of This Document: 2008-06-17 1.4. Name of Major Document Customer(s)/Consumer(s): 1.4.1. The Community you expect to review your project: Databases 1.4.2. The ARC(s) you expect to review your project: LSARC 1.5. Email Aliases: 1.5.1. Responsible Manager: Masood Mortazavi 1.5.2. Responsible Engineer: Satya Narayana 1.5.3. Marketing Manager: Rebecca Hansen 1.5.4. Interest List: databases-discuss@sun.com postgresql-techteam@sun.com sun-postgres-pteam@sun.com 2. Project Summary 2.1. Project Description: Slony-I is a "master to multiple slaves" replication system supporting cascading and failover.It is used as replication service for PostgreSQL Database. This project aims to provide Slony-I as a part of the Solaris and OpenSolaris distribution(s). This project qualifies for micro/patch release binding 2.2. Risks and Assumptions: It is assumed that porting the Slony1 to Solaris may cause modifications of the Slony1 code so that it will run properly on the Solaris platform. The modifications (if any) are expected to be minor. 3. Business Summary 3.2. Market/Requester: Slony-I is requirement from the Databases P-Team. Also requested by BBC and TJAT. 4. Technical Description: 4.1. Details: Slony-I is a "master to multiple slaves" replication system supporting cascading and failover.This can be used as replication service for PostgreSQL database.It can be started and stopped on an existing database without the need for a dump/reload cycle. It can be used for 24X7 uptime and workload distribution. 4.5. Interfaces: Slony is a replication software that strongly depends on a specific version of the PostgreSQL RDBMS. As such, the slony libraries will be placed in the same directory tree as the corresponding PostgreSQL version. It is an OSS project, not controlled by Sun, so interface stability can't be guaranteed. Exported interfaces: Interface Stability Comments ------------------------------------------------------------------------ SUNWslony1 Committed Package name SUNWpostgr-82-slony Committed Package name SUNWpostgr-83-slony Committed Package name SUNWslony1-SMF Committed Package name /usr/postgres/slony Committed Installation dir /usr/postgres/slony/* Uncommitted Slony product files /usr/postgres/8.x/lib/slony1_funcs.so Uncommitted PostgreSQL version dependent library /usr/postgres/8.x/lib/xxid.so Uncommitted PostgreSQL version dependent library /usr/postgres/8.x/share/slony1*.sql Uncommitted PostgreSQL version /usr/postgres/8.x/share/xxid*.sql dependent share files /usr/postgres/8.x/share/slon-tools.pm /var/slony/ Committed Default data dir for slony smf /var/slony/slon.conf Committed Default config file for slony smf /etc/slony/ Committed Default config dir for slonik scripts /etc/slony/slon_tools.conf-sample Uncommited sample config file for slonik scripts Imported interfaces: Interface Stability Comments ----------------------------------------------------------------------- /usr/postgres/8.2/lib Committed LSARC/2006/655 /usr/postgres/8.3/lib Committed LSARC/2008/004 4.9. I18N/L10N Impact: The messages produced by Slony are not localized.The locale used is always en_US. 4.10 Packaging & Delivery Slony built with particular PostgreSQL Version, works with only that PostgreSQL version ,i.e. slony built on PostgreSQL 8.2 works only against PostgreSQL 8.2 as it needs PostgreSQL 8.2 libraries. So we need to have different slony packages for each PostgreSQL version. The packaging structure is as below. We have a single package SUNWslony1 which has common files to all Slony versions and version dependent packages like SUNWpostgr-83-slony,SUNWpostgr-82-slony which contains the version dependent libraries. SUNWslony1 (common files) /usr/postgres/slony/bin/slon /usr/postgres/slony/bin/slonik /usr/postgres/slony/bin/slony_logshipper /usr/postgres/slony/bin/slon_kill* /usr/postgres/slony/bin/slon_start* /usr/postgres/slony/bin/slon_watchdog* /usr/postgres/slony/bin/slon_watchdog2* /usr/postgres/slony/bin/slonik_build_env* /usr/postgres/slony/bin/slonik_create_set* /usr/postgres/slony/bin/slonik_drop_node* /usr/postgres/slony/bin/slonik_drop_set* /usr/postgres/slony/bin/slonik_drop_table* /usr/postgres/slony/bin/slonik_execute_script* /usr/postgres/slony/bin/slonik_failover* /usr/postgres/slony/bin/slonik_init_cluster* /usr/postgres/slony/bin/slonik_merge_sets* /usr/postgres/slony/bin/slonik_move_set* /usr/postgres/slony/bin/slonik_print_preamble* /usr/postgres/slony/bin/slonik_restart_node* /usr/postgres/slony/bin/slonik_store_node* /usr/postgres/slony/bin/slonik_subscribe_set* /usr/postgres/slony/bin/slonik_uninstall_nodes* /usr/postgres/slony/bin/slonik_unsubscribe_set* /usr/postgres/slony/bin/slonik_update_nodes* /usr/postgres/slony/bin/slony_show_configuration* /etc/slony/slon_tools.conf-sample /usr/share/man/man1/slon.1 /usr/share/man/man1/slonik.1 /usr/share/man/man7/admin_conninfo.7 /usr/share/man/man7/cluster_name.7 /usr/share/man/man7/create_set.7 /usr/share/man/man7/define.7 /usr/share/man/man7/drop_listen.7 /usr/share/man/man7/drop_node.7 /usr/share/man/man7/drop_path.7 /usr/share/man/man7/drop_set.7 /usr/share/man/man7/drop_trigger.7 /usr/share/man/man7/echo.7 /usr/share/man/man7/execute_script.7 /usr/share/man/man7/exit.7 /usr/share/man/man7/failover.7 /usr/share/man/man7/include.7 /usr/share/man/man7/init_cluster.7 /usr/share/man/man7/lock_set.7 /usr/share/man/man7/merge_____set.7 /usr/share/man/man7/move_set.7 /usr/share/man/man7/repair_config.7 /usr/share/man/man7/restart_node.7 /usr/share/man/man7/set_add_sequence.7 /usr/share/man/man7/set_add_table.7 /usr/share/man/man7/set_drop_sequence.7 /usr/share/man/man7/set_drop_table.7 /usr/share/man/man7/set_move_____table.7 /usr/share/man/man7/set_move_sequence.7 /usr/share/man/man7/sleep.7 /usr/share/man/man7/store_____path.7 /usr/share/man/man7/store_listen.7 /usr/share/man/man7/store_node.7 /usr/share/man/man7/store_trigger.7 /usr/share/man/man7/subscribe_set.7 /usr/share/man/man7/sync.7 /usr/share/man/man7/table_add_key.7 /usr/share/man/man7/uninstall_node.7 /usr/share/man/man7/unlock_set.7 /usr/share/man/man7/unsubscribe_set.7 /usr/share/man/man7/update_functions.7 /usr/share/man/man7/wait_for_event.7 SUNWpostgr-83-slony(slony libraries and share files for PostGres 8.3) /usr/postgres/8.3/lib/xxid.so /usr/postgres/8.3/lib/slony1_funcs.so /usr/postgres/8.3/share/slony1_base.sql /usr/postgres/8.3/share/slony1_base.v74.sql /usr/postgres/8.3/share/slony1_base.v80.sql /usr/postgres/8.3/share/slony1_base.v81.sql /usr/postgres/8.3/share/slony1_funcs.sql /usr/postgres/8.3/share/slony1_funcs.v74.sql /usr/postgres/8.3/share/slony1_funcs.v80.sql /usr/postgres/8.3/share/slony1_funcs.v81.sql /usr/postgres/8.3/share/xxid.v74.sql /usr/postgres/8.3/share/xxid.v80.sql /usr/postgres/8.3/share/xxid.v81.sql /usr/postgres/8.3/share/slon-tools.pm SUNWpostgr-82-slony (slony libraries and share files for PostGres 8.2) /usr/postgres/8.2/lib/xxid.so /usr/postgres/8.2/lib/slony1_funcs.so /usr/postgres/8.2/share/slony1_base.sql /usr/postgres/8.2/share/slony1_base.v74.sql /usr/postgres/8.2/share/slony1_base.v80.sql /usr/postgres/8.2/share/slony1_base.v81.sql /usr/postgres/8.2/share/slony1_funcs.sql /usr/postgres/8.2/share/slony1_funcs.v74.sql /usr/postgres/8.2/share/slony1_funcs.v80.sql /usr/postgres/8.2/share/slony1_funcs.v81.sql /usr/postgres/8.2/share/xxid.v74.sql /usr/postgres/8.2/share/xxid.v80.sql /usr/postgres/8.2/share/xxid.v81.sql /usr/postgres/8.2/share/slon-tools.pm SUNWslony-SMF (SMF package for slony) /var/svc/manifest/application/database/slony/slony.xml /lib/svc/method/slony /var/slony/ - default data directory for slony /var/slony/slon.conf - default location for slony configuration file The SMF Package for slony starts,stop,refresh a SLON daemon. Runs slony as postgres user. Properties to be defined by svcprop command: config_file - configuration file for slon daemon data_dir - data directory for storing pid file, log files cluster_name - name of the cluster (default slony_cluster) conn_info - connection info for slon daemon (default is 'host=localhost dbname=postgres user=postgres port=5432') After providing the above parameters the user can do svcadm slony start This starts the slon daemon which is responsible for managing replication activity for that node by sending/receiving the configuration events across the cluster. svcadm slony stop This stops the slon deamon which inturn stops the replication of the node. svcadm slony refresh This stops and starts slon daemon which allows the slon daemon to start with new parameters if changed in the configuration file. Slony package updates are released only for the latest PostgreSQL version. 4.11. Security Impact Slony communicates to other nodes by using PostgreSQL libpq library and can be used with or without SSL.By default postgres clients(slony nodes) can only establish local Unix Domain Socket connections, and they have to change the configuration file to open up access further. 4.12. Dependencies: Package SUNWslony1: SUNWperl584core Perl 5.8.4 programming language (core) Package SUNWpostgr-82-slony: SUNWslony1 Slony-I PostgreSQL replication system SUNWpostgr-82-server PostgreSQL 8.3 database server SUNWpostgr-82-libs PostgreSQL 8.3 client libraries Package SUNWpostgr-83-slony: SUNWslony1 Slony-I PostgreSQL replication system SUNWpostgr-83-server PostgreSQL 8.3 database server SUNWpostgr-83-libs PostgreSQL 8.3 client libraries Package SUNWslony1-SMF: SUNWslony1 Slony-I PostgreSQL replication system 5. Reference Documents: Project Site: http://www.slony.info/ LSARC/2008/004 "Integrate PostgreSQL version 8.3 into Solaris" 6. Resources and Schedule: 6.1. Projected Availability: Q4FY08 6.4. Product Approval Committee requested information: 6.4.1. Consolidation or Component Name: SFW 6.5. ARC review type: FastTrack