Slony-I
HEAD_20051102 Documentation

The PostgreSQL Global Development Group

Christopher Browne

Legal Notice

Table of Contents

Slony-I Introduction
1. Introduction to Slony-I
1.1. What Slony-I is
1.2. Why yet another replication system?
1.3. What Slony-I is not
1.4. Why doesn't Slony-I do automatic fail-over/promotion?
1.5. Current Limitations
1.6. Replication Models
2. Slony-I Communications Costs
3. System Requirements
3.1. Slony-I Software Dependancies
3.2. Getting Slony-I Source
3.3. Time Synchronization
3.4. Network Connectivity
4. Slony-I Installation
4.1. Short Version
4.2. Configuration
4.3. Example
4.4. Build
4.5. Installing Slony-I
4.6. Installing Slony-I from RPMs
4.7. Installing the Slony-I service on Windows
5. Slony-I Concepts
5.1. Cluster
5.2. Node
5.3. Replication Set
5.4. Origin, Providers and Subscribers
5.5. slon Daemon
5.6. slonik Configuration Processor
6. Defining Slony-I Clusters
7. Defining Slony-I Replication Sets
7.1. Primary Keys
7.2. Grouping tables into sets
7.3. The Pathology of Sequences
Slony-I Administration
1. Replicating Your First Database
1.1. Creating the pgbenchuser
1.2. Preparing the databases
1.3. Configuring the Database for Replication.
2. Slon daemons
3. Subscribing Nodes
4. Monitoring
4.1. CONFIG notices
4.2. DEBUG Notices
4.3. How to read Slony-I logs
4.4. Nagios Replication Checks
4.5. test_slony_state
5. Slony-I Maintenance
5.1. Watchdogs: Keeping Slons Running
5.2. Parallel to Watchdog: generate_syncs.sh
5.3. Replication Test Scripts
5.4. Log Files
6. Reshaping a Cluster
7. Doing switchover and failover with Slony-I
7.1. Foreword
7.2. Controlled Switchover
7.3. Failover
7.4. Automating FAIL OVER
7.5. After Failover, Reconfiguring node1
8. Slony-I listen paths
8.1. How listening can break
8.2. How the listen configuration should look
8.3. Automated Listen Path Generation
9. Slony-I Path Communications
10. Locking Issues
11. Adding Things to Replication
12. Dropping things from Slony-I Replication
12.1. Dropping A Whole Node
12.2. Dropping An Entire Set
12.3. Unsubscribing One Node From One Set
12.4. Dropping A Table From A Set
12.5. Dropping A Sequence From A Set
13. Log Shipping - Slony-I with Files
13.1. Usage Hints
14. Database Schema Changes (DDL)
14.1. Changes that you might not want to process using EXECUTE SCRIPT
14.2. Testing DDL Changes
15. Using Slonik
16. Embedding Slonik in Shell Scripts
17. Not Using Slonik - Bare Metal Slony-I Functions
18. Slony-I Administration Scripts
18.1. Node/Cluster Configuration - cluster.nodes
18.2. Set configuration - cluster.set1, cluster.set2
18.3. slonik_build_env
18.4. slonik_create_set
18.5. slonik_drop_node
18.6. slonik_drop_set
18.7. slonik_execute_script
18.8. slonik_failover
18.9. slonik_init_cluster
18.10. slonik_merge_sets
18.11. slonik_move_set
18.12. replication_test
18.13. slonik_restart_node
18.14. slonik_restart_nodes
18.15. slony_show_configuration
18.16. slon_kill
18.17. slon_start
18.18. slon_watchdog
18.19. slon_watchdog2
18.20. slonik_store_node
18.21. slonik_subscribe_set
18.22. slonik_uninstall_nodes
18.23. slonik_unsubscribe_set
18.24. slonik_update_nodes
18.25. regenerate-listens
19. Using Slony-I for PostgreSQL Upgrades
20. Slony-IBest Practices
21. More Slony-I Help
21.1. Other Information Sources
Slony-I FAQ
I. Core Slony-I Programs
slon - Slony-I daemon
Run-time Configuration
1. Logging
2. Connection settings
3. Event Tuning
slonik - Slony-I command processor
Slonik Command Summary
1. Introduction
1.1. General outline
I. Slonik Meta Commands
INCLUDE - pulling in slonik code from another file
DEFINE - Defining a named symbol
II. Slonik Preamble Commands
CLUSTER NAME - preamble - identifying Slony-I cluster
ADMIN CONNINFO - preamble - identifying PostgreSQL database
III. Configuration and Action commmands
ECHO - Generic output tool
EXIT - Terminate Slonik script with signal
INIT CLUSTER - Initialize Slony-I cluster
STORE NODE - Initialize Slony-I node
DROP NODE - Decommission Slony-I node
UNINSTALL NODE - Decommission Slony-I node
RESTART NODE - Restart Slony-I node
STORE PATH - Configure Slony-I node connection
DROP PATH - Delete Slony-I connection information
STORE LISTEN - Configure Slony-I node to indicate where to listen for events
DROP LISTEN - Eliminate configuration indicating how Slony-I node listens for events
TABLE ADD KEY - Add primary key for use by Slony-I for a table with no suitable key
CREATE SET - Create Slony-I replication set
DROP SET - Discard Slony-I replication set
MERGE SET - Merge Slony-I replication sets together
SET ADD TABLE - Add a table to a Slony-I replication set
SET ADD SEQUENCE - Add a sequence to a Slony-I replication set
SET DROP TABLE - Remove a table from a Slony-I replication set
SET DROP SEQUENCE - Remove a sequence from a Slony-I replication set
SET MOVE TABLE - Move a table from one Slony-I replication set to another
SET MOVE SEQUENCE - Move a sequence from one Slony-I replication set to another
STORE TRIGGER - Indicate that a trigger should not be disabled by Slony-I on a subscriber node
DROP TRIGGER - Return a trigger to default behavior, where it will not fire on subscriber nodes
SUBSCRIBE SET - Start replication of Slony-I set
UNSUBSCRIBE SET - End replication of Slony-I set
LOCK SET - Guard Slony-I replication set to prepare for MOVE SET
UNLOCK SET - Unlock a Slony-I set that was locked
MOVE SET - Change origin of a Slony-I replication set
FAILOVER - Fail a broken replication set over to a backup node
EXECUTE SCRIPT - Execute SQL/DDL script
UPDATE FUNCTIONS - Reload stored functions
WAIT FOR EVENT - Have Slonik script wait for previous event to complete
Slony-I Supported Platforms
1. Schema schemadoc
1.1. Table: sl_config_lock
1.2. Table: sl_confirm
1.3. Table: sl_event
1.4. Table: sl_listen
1.5. Table: sl_log_1
1.6. Table: sl_log_2
1.7. Table: sl_node
1.8. Table: sl_path
1.9. View: sl_seqlastvalue
1.10. Table: sl_seqlog
1.11. Table: sl_sequence
1.12. Table: sl_set
1.13. Table: sl_setsync
1.14. Table: sl_subscribe
1.15. Table: sl_table
1.16. Table: sl_trigger
1.17. add_missing_table_field( text, text, text, text )
1.18. altertableforreplication( integer )
1.19. altertablerestore( integer )
1.20. cleanupevent( )
1.21. cleanuplistener( )
1.22. createevent( name, text )
1.23. createevent( name, text, text )
1.24. createevent( name, text, text, text )
1.25. createevent( name, text, text, text, text )
1.26. createevent( name, text, text, text, text, text )
1.27. createevent( name, text, text, text, text, text, text )
1.28. createevent( name, text, text, text, text, text, text, text )
1.29. createevent( name, text, text, text, text, text, text, text, text )
1.30. createevent( name, text, text, text, text, text, text, text, text, text )
1.31. ddlscript( integer, text, integer )
1.32. ddlscript_int( integer, text, integer )
1.33. denyaccess( )
1.34. determineattkindserial( text )
1.35. determineattkindunique( text, name )
1.36. determineidxnameserial( text )
1.37. determineidxnameunique( text, name )
1.38. disablenode( integer )
1.39. disablenode_int( integer )
1.40. droplisten( integer, integer, integer )
1.41. droplisten_int( integer, integer, integer )
1.42. dropnode( integer )
1.43. dropnode_int( integer )
1.44. droppath( integer, integer )
1.45. droppath_int( integer, integer )
1.46. dropset( integer )
1.47. dropset_int( integer )
1.48. droptrigger( integer, name )
1.49. droptrigger_int( integer, name )
1.50. enablenode( integer )
1.51. enablenode_int( integer )
1.52. enablesubscription( integer, integer, integer )
1.53. enablesubscription_int( integer, integer, integer )
1.54. failednode( integer, integer )
1.55. failednode2( integer, integer, integer, bigint, bigint )
1.56. failoverset_int( integer, integer, integer )
1.57. forwardconfirm( integer, integer, bigint, timestamp without time zone )
1.58. generate_sync_event( interval )
1.59. getlocalnodeid( name )
1.60. getmoduleversion( )
1.61. getsessionrole( name )
1.62. initializelocalnode( integer, text )
1.63. lockedset( )
1.64. lockset( integer )
1.65. logtrigger( )
1.66. mergeset( integer, integer )
1.67. mergeset_int( integer, integer )
1.68. moveset( integer, integer )
1.69. moveset_int( integer, integer, integer )
1.70. rebuildlistenentries( )
1.71. rebuildlistenentriesone( integer, integer )
1.72. sequencelastvalue( text )
1.73. sequencesetvalue( integer, integer, bigint, bigint )
1.74. setaddsequence( integer, integer, text, text )
1.75. setaddsequence_int( integer, integer, text, text )
1.76. setaddtable( integer, integer, text, name, text )
1.77. setaddtable_int( integer, integer, text, name, text )
1.78. setdropsequence( integer )
1.79. setdropsequence_int( integer )
1.80. setdroptable( integer )
1.81. setdroptable_int( integer )
1.82. setmovesequence( integer, integer )
1.83. setmovesequence_int( integer, integer )
1.84. setmovetable( integer, integer )
1.85. setmovetable_int( integer, integer )
1.86. setsessionrole( name, text )
1.87. slon_quote_brute( text )
1.88. slon_quote_input( text )
1.89. slonyversion( )
1.90. slonyversionmajor( )
1.91. slonyversionminor( )
1.92. slonyversionpatchlevel( )
1.93. storelisten( integer, integer, integer )
1.94. storelisten_int( integer, integer, integer )
1.95. storenode( integer, text, boolean )
1.96. storenode_int( integer, text, boolean )
1.97. storepath( integer, integer, text, integer )
1.98. storepath_int( integer, integer, text, integer )
1.99. storeset( integer, text )
1.100. storeset_int( integer, integer, text )
1.101. storetrigger( integer, name )
1.102. storetrigger_int( integer, name )
1.103. subscribeset( integer, integer, integer, boolean )
1.104. subscribeset_int( integer, integer, integer, boolean )
1.105. tableaddkey( text )
1.106. tabledropkey( integer )
1.107. tablehasserialkey( text )
1.108. terminatenodeconnections( name )
1.109. uninstallnode( )
1.110. unlockset( integer )
1.111. unsubscribeset( integer, integer )
1.112. unsubscribeset_int( integer, integer )
1.113. updaterelname( integer, integer )
1.114. updatereloid( integer, integer )
1.115. upgradeschema( text )
Index

List of Figures

1.1. Definition of view sl_seqlastvalue

List of Tables

1. Supported Platforms