SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Londiste
Replication system for PostgreSQL
About Londiste
   Londiste is easy to use asynchronous master/slave replication tool written in python
    and is part of Skytools package.
   Skytools is a package containing PgQ module for Postgres, Python framework and
    several tools built on top of it
   Londiste uses PgQ as transport layer therefore
    it needs PgQ maintenance daemon called ticker.              shopdb              infodb
                                                               (failover 8.4)          (internal)
   In Skype we use Londiste:
       to transfer online data into internal databases
                                                                 shopdb              analysisdb
       to create failover databases for online databases      (online 8.3)           (internal)
       to upgrade PostgreSQL versions
       to distribute internally produced data
        into online servers                                   shopdb_ro            shopdb
       to create read only replicas for load balancing       (read only)       (failover 8.3)
Londiste
Skytools 2
 Currently in use
Skytools 2: Londiste
   One Londiste process manages both provider and subscriber side
      For example Londiste process L3 manages tables replication from shopdb to
        analysisdb
   Tables can be added/removed without affecting replication of other tables
   One process is not communicating with other processes
   pgqadm.py is used for ticking (T1)

   There is no support for SQL script execution
                                                   T1     shopdb                     analysisdb
   There is no support for parallel copy                 (online)
                                                                           L3
                                                                                      (internal)
   There is no support for cascading
                                                        L2            L1




                                                        shopdb_ro            shopdb
                                                        (read only)         (failover)
Skytools 2: Building from source tarball
 get latest tarball from:
  http://pgfoundry.org/projects/skytools
 Dependencies:
    C compiler and GNU make
    PostgreSQL development headers and libraries
    Python development package
    Psycopg2
 install skytools
  $ ./configure --prefix=/usr/local
  $ make
  $ make install
Skytools 2: Pgq setup
Since Londiste uses PgQ as transport layer you need to set it up first.
Basic PgQ setup would be illustrated by the following steps:
1. create the database
2. edit a PgQ daemon configuration file, say ticker.ini
3. install PgQ internal tables
   $ pgqadm.py ticker.ini install
4. launch the PgQ ticker on database machine as daemon
   $ pgqadm.py -d ticker.ini ticker

                                   T1
        shopdb                   ticker                     analysisdb

          source table
            trigger      ticks
                                            L3             target table
                                          londiste
            queue
Skytools 2: Ticker configuration
[pgqadm]
job_name = T1
db = dbname= shopdb

logfile = ~/log/%(job_name)s.log
pidfile = ~/pid/%(job_name)s.pid


                                T1
      shopdb                  ticker               analysisdb

       source table
         trigger      ticks
                                         L3       target table
                                       londiste
         queue
Skytools 2: Londiste setup
1. edit a londiste configuration file, lets say conf.ini
2. install londiste on the provider and subscriber databases. This step
   requires admin privileges on both provider and subscriber sides,
   and both install commands can be run remotely:
   $ londiste.py conf.ini provider install
   $ londiste.py conf.ini subscriber install
3. check that you have ticker running:
   $ ps -ef | grep ticker
4. launch the londiste replay process:
   $ londiste.py -d conf.ini replay
5. add table to replicate from the provider database:
   $ londiste.py conf.ini provider add table1
6. add table to replicate to the subscriber database:
   $ londiste.py conf.ini subscriber add table1
Skytools 2: Londiste Configuration
[londiste]
job_name = L3
pgq_queue_name = shopdb_replica
provider_db = dbname=shopdb
subscriber_db = dbname=analysisdb

logfile = ~/log/%(job_name)s.log
pidfile = ~/pid/%(job_name)s.pid
                                                             T1
                                    shopdb                 ticker              analysisdb

                                    source table
                                      trigger      ticks
                                                                      L3         target table
                                                                    londiste
                                     queue
Londiste
Skytools 3
Are We there yet?
Skytools 3: Keep good features from SkyTools 2
   Londiste process connects to only 2 databases
   Londiste only pulls data from queue
      Administrative work happens in separate process (ticker)
      Downtime of one Londiste process doesn't affect other replication or queue
        processes
   Relaxed attitude about tables
      Adding/removing a table doesn't affect replication of other tables
      no attempt is made to keep consistent picture between tables during initial copy
Skytools 3: New in Londiste
   Parallel copy - during initial sync several tables can be copied at the same time.
   EXECUTE command, to run SQL script on all nodes.
   Automatic table or sequence creation by importing the structure from provider node.
   Cascading support
      Its goal is to keep identical copy of queue contents in several nodes.
      Advanced admin operations: switchover, change-provider, pause/resume
      Londiste process manages target node only
Skytools 3: Cascading
   set – group of nodes that distribute a single queue
   node – database that participates in cascade set
   node types:
      root – mast er node of a cascade set
      branch – node that carries full contents of the queue (can be provider)
      leaf – data-only node (events are replicated, but can't be provider to other
        nodes)

                                                  L1                      L4

                                  T1       shopdb                analysisdb
                                        (online, root)         (internal, leaf)
                                        L2
                                                                    L3

                                        shopdb_ro             shopdb
                                         (ro, leaf)        (fo, branch)        T3
Skytools 3: Building from source tarball
It is not a polished release, but a snapshot of current development tree.
Although it may happen to have couple of working use-cases.

   get latest tarball:
    http://skytools.projects.postgresql.org/testing/skytools-3.0a1.tgz
   Dependencies:
      C compiler and GNU make
      PostgreSQL development headers and libraries
      Python development package
      Psycopg2
   $ ./configure --prefix=/usr/local
   $ make
   $ make install
Skytools 3: setup replica
1. edit a londiste configuration file, lets say L1.ini        [londiste]
2. Install Londiste and initialize nodes:                     job_name = L1
                                                              db = dbname=shopdb
    $ londiste L1.ini create-root shopdb dbname=shopdb
                                                              queue_name = shopdb_replica
    $ londiste L2.ini create-leaf shopdb_ro                   logfile = log/%(job_name)s.log
      dbname=shopdb_ro --provider=dbname=shopdb
                                                              pidfile = pid/%(job_name)s.pid
    $ londiste L3.ini create-branch shopdb_T3
      dbname=shopdb –provider=dbname=shopdb
                                                                       L1                    L4
    $ londiste L4.ini create-leaf analysisdb                       shopdb
                                                         T1                           analysisdb
      dbname=analysisdb --provider=dbname=shopdb                (online, root)      (internal, leaf)
                                                                 L2
                                                                                             L3

                                                                shopdb_ro           shopdb
                                                                 (ro, leaf)      (fo, branch) T3
Skytools 3: setup replica
3. edit a ticker configuration file, lets say T1.ini   [pgqadm]
4. run ticker:                                         job_name = T1
                                                       db = dbname=shopdb
    $ pgqadm T1.ini ticker -d
                                                       logfile = log/%(job_name)s.log
    $ pgqadm T3.ini ticker -d                          pidfile = pid/%(job_name)s.pid

5. run Londiste:

    $ londiste L1.ini replay -d                                     L1                    L4
    $ londiste L2.ini replay -d                                 shopdb
    $ londiste L3.ini replay -d                         T1                         analysisdb
                                                             (online, root)      (internal, leaf)
    $ londiste L4.ini replay -d
                                                              L2
                                                                                          L3

                                                             shopdb_ro           shopdb
                                                              (ro, leaf)      (fo, branch) T3
Skytools 3: Advanced admin operation examples
In example Ticker process T1 for shopdb (online) and T3 for shopdb (fo).
Londiste process L1 is root, L3 is branch, L2 and L4 are leaf.                     A
                                                                         L1                      L4

                                                          T1        shopdb               analysisdb
                                                                 (online, root)        (internal, leaf)
1. Shopdb failover can be done with one command
   $ londiste L1.ini switchover --target=shopdb_T3                L2
                                                                                                 L3

                                                                  shopdb_ro           shopdb
2. Analysisdb can change provider with command
                                                                   (ro, leaf)      (fo, branch) T3
   $ londiste L4.ini change-provider --target=shopdb_T3
                               C                                                   B
                     L1                     L4                          L1                      L4

          T1      shopdb             analysisdb         T1          shopdb               analysisdb
               (fo, branch)        (internal, leaf)              (fo, branch)          (internal, leaf)
               L2                           L3                    L2                            L3
               shopdb_ro         shopdb                           shopdb_ro           shopdb
                (ro, leaf)    (online, root) T3                (read only, leaf)   (online, root) T3
Extras
Ticker
 Ticker reads event id sequence for each queue.
 If new events have appeared, then inserts tick if:
     Configurable amount of events have appeared
      ticker_max_count (500)
     Configurable amount of time has passed from last tick
      ticker_max_lag (3 sec)
 If no events in the queue, creates tick if some time has passed.
     ticker_idle_period (60 sec)
 extra parameters in configuration file:
     how often to run maintenance [seconds]
      maint_delay = 600
     how often to check for activity [seconds]
      loop_delay = 0.5
Skytools 3: Building from GIT
It is for people who don't fear work-in-progress code and are prepared to
give feedback on issues. Especially welcome would be people who could
submit code/doc patches, to help us bring the final 3.0 release faster.

 fetch git tree:
  $ git clone git://github.com/markokr/skytools-dev.git
 fetch libusual submodule:
  $ git submodule init
  $ git submodule update
 generate ./configure script
  $ make boot
 now build as usual (--with-asciidoc is required when building from GIT)
  $ ./configure --prefix=... --with-asciidoc
  $ make
  $ make install
References
   http://skytools.projects.postgresql.org/doc/londiste.ref.html
   http://wiki.postgresql.org/wiki/Londiste_Tutorial
   http://skytools.projects.postgresql.org/skytools-3.0/doc/skytools3.html
   http://pgfoundry.org/projects/skytools

Contenu connexe

En vedette

2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
Scaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsScaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsGavin Roy
 
Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Lennin Caro
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadSantiago Zarate
 
Replication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorReplication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorCommand Prompt., Inc
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy wayCommand Prompt., Inc
 
Implementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenImplementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenCommand Prompt., Inc
 
Python utilities for data presentation
Python utilities for data presentationPython utilities for data presentation
Python utilities for data presentationCommand Prompt., Inc
 
Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresqljockbrera
 
Elephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksElephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksCommand Prompt., Inc
 
Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableHowdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableCommand Prompt., Inc
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2EQ SOFT EIRL
 
Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014EDB
 
Presentación Live CDs - 2005
Presentación Live CDs - 2005Presentación Live CDs - 2005
Presentación Live CDs - 2005Lenin Hernandez
 
Alta disponibilidad-postgres
Alta disponibilidad-postgresAlta disponibilidad-postgres
Alta disponibilidad-postgresLenin Hernandez
 

En vedette (20)

2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
Scaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsScaling PostgreSQL with Skytools
Scaling PostgreSQL with Skytools
 
Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Replication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorReplication using PostgreSQL Replicator
Replication using PostgreSQL Replicator
 
Pg migrator
Pg migratorPg migrator
Pg migrator
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy way
 
Go replicator
Go replicatorGo replicator
Go replicator
 
Backup and-recovery2
Backup and-recovery2Backup and-recovery2
Backup and-recovery2
 
Implementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenImplementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with Tungsten
 
Python utilities for data presentation
Python utilities for data presentationPython utilities for data presentation
Python utilities for data presentation
 
A Practical Multi-Tenant Cluster
A Practical Multi-Tenant ClusterA Practical Multi-Tenant Cluster
A Practical Multi-Tenant Cluster
 
Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresql
 
Elephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksElephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forks
 
PostgreSQL replication
PostgreSQL replicationPostgreSQL replication
PostgreSQL replication
 
Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableHowdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014
 
Presentación Live CDs - 2005
Presentación Live CDs - 2005Presentación Live CDs - 2005
Presentación Live CDs - 2005
 
Alta disponibilidad-postgres
Alta disponibilidad-postgresAlta disponibilidad-postgres
Alta disponibilidad-postgres
 

Similaire à Londiste Replication system for PostgreSQL

Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkDatabricks
 
Git, from the beginning
Git, from the beginningGit, from the beginning
Git, from the beginningJames Aylett
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkPatrick Wendell
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)JiandSon
 
Processing massive amount of data with Map Reduce using Apache Hadoop - Indi...
Processing massive amount of data with Map Reduce using Apache Hadoop  - Indi...Processing massive amount of data with Map Reduce using Apache Hadoop  - Indi...
Processing massive amount of data with Map Reduce using Apache Hadoop - Indi...IndicThreads
 
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...Insight Technology, Inc.
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamCodemotion
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRoberto Franchini
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsDatabricks
 
HKG15-211: Advanced Toolchain Usage Part 4
HKG15-211: Advanced Toolchain Usage Part 4HKG15-211: Advanced Toolchain Usage Part 4
HKG15-211: Advanced Toolchain Usage Part 4Linaro
 
HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3Linaro
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain艾鍗科技
 
SEMLA_logging_infra
SEMLA_logging_infraSEMLA_logging_infra
SEMLA_logging_infraswy351
 
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkRde:code 2017
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobikrmboya
 
Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Itzik Kotler
 
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRMADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRPivotalOpenSourceHub
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)Paul Chao
 
Apache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapApache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapKostas Tzoumas
 

Similaire à Londiste Replication system for PostgreSQL (20)

Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
 
Git, from the beginning
Git, from the beginningGit, from the beginning
Git, from the beginning
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
 
Processing massive amount of data with Map Reduce using Apache Hadoop - Indi...
Processing massive amount of data with Map Reduce using Apache Hadoop  - Indi...Processing massive amount of data with Map Reduce using Apache Hadoop  - Indi...
Processing massive amount of data with Map Reduce using Apache Hadoop - Indi...
 
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time stream
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time stream
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDs
 
HKG15-211: Advanced Toolchain Usage Part 4
HKG15-211: Advanced Toolchain Usage Part 4HKG15-211: Advanced Toolchain Usage Part 4
HKG15-211: Advanced Toolchain Usage Part 4
 
HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
SEMLA_logging_infra
SEMLA_logging_infraSEMLA_logging_infra
SEMLA_logging_infra
 
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR
[AI04] Scaling Machine Learning to Big Data Using SparkML and SparkR
 
Flink internals web
Flink internals web Flink internals web
Flink internals web
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
 
Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)
 
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRMADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
 
Apache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapApache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmap
 

Plus de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Plus de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Dernier

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Dernier (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Londiste Replication system for PostgreSQL

  • 2. About Londiste  Londiste is easy to use asynchronous master/slave replication tool written in python and is part of Skytools package.  Skytools is a package containing PgQ module for Postgres, Python framework and several tools built on top of it  Londiste uses PgQ as transport layer therefore it needs PgQ maintenance daemon called ticker. shopdb infodb (failover 8.4) (internal)  In Skype we use Londiste:  to transfer online data into internal databases shopdb analysisdb  to create failover databases for online databases (online 8.3) (internal)  to upgrade PostgreSQL versions  to distribute internally produced data into online servers shopdb_ro shopdb  to create read only replicas for load balancing (read only) (failover 8.3)
  • 4. Skytools 2: Londiste  One Londiste process manages both provider and subscriber side  For example Londiste process L3 manages tables replication from shopdb to analysisdb  Tables can be added/removed without affecting replication of other tables  One process is not communicating with other processes  pgqadm.py is used for ticking (T1)  There is no support for SQL script execution T1 shopdb analysisdb  There is no support for parallel copy (online) L3 (internal)  There is no support for cascading L2 L1 shopdb_ro shopdb (read only) (failover)
  • 5. Skytools 2: Building from source tarball  get latest tarball from: http://pgfoundry.org/projects/skytools  Dependencies:  C compiler and GNU make  PostgreSQL development headers and libraries  Python development package  Psycopg2  install skytools $ ./configure --prefix=/usr/local $ make $ make install
  • 6. Skytools 2: Pgq setup Since Londiste uses PgQ as transport layer you need to set it up first. Basic PgQ setup would be illustrated by the following steps: 1. create the database 2. edit a PgQ daemon configuration file, say ticker.ini 3. install PgQ internal tables $ pgqadm.py ticker.ini install 4. launch the PgQ ticker on database machine as daemon $ pgqadm.py -d ticker.ini ticker T1 shopdb ticker analysisdb source table trigger ticks L3 target table londiste queue
  • 7. Skytools 2: Ticker configuration [pgqadm] job_name = T1 db = dbname= shopdb logfile = ~/log/%(job_name)s.log pidfile = ~/pid/%(job_name)s.pid T1 shopdb ticker analysisdb source table trigger ticks L3 target table londiste queue
  • 8. Skytools 2: Londiste setup 1. edit a londiste configuration file, lets say conf.ini 2. install londiste on the provider and subscriber databases. This step requires admin privileges on both provider and subscriber sides, and both install commands can be run remotely: $ londiste.py conf.ini provider install $ londiste.py conf.ini subscriber install 3. check that you have ticker running: $ ps -ef | grep ticker 4. launch the londiste replay process: $ londiste.py -d conf.ini replay 5. add table to replicate from the provider database: $ londiste.py conf.ini provider add table1 6. add table to replicate to the subscriber database: $ londiste.py conf.ini subscriber add table1
  • 9. Skytools 2: Londiste Configuration [londiste] job_name = L3 pgq_queue_name = shopdb_replica provider_db = dbname=shopdb subscriber_db = dbname=analysisdb logfile = ~/log/%(job_name)s.log pidfile = ~/pid/%(job_name)s.pid T1 shopdb ticker analysisdb source table trigger ticks L3 target table londiste queue
  • 11. Skytools 3: Keep good features from SkyTools 2  Londiste process connects to only 2 databases  Londiste only pulls data from queue  Administrative work happens in separate process (ticker)  Downtime of one Londiste process doesn't affect other replication or queue processes  Relaxed attitude about tables  Adding/removing a table doesn't affect replication of other tables  no attempt is made to keep consistent picture between tables during initial copy
  • 12. Skytools 3: New in Londiste  Parallel copy - during initial sync several tables can be copied at the same time.  EXECUTE command, to run SQL script on all nodes.  Automatic table or sequence creation by importing the structure from provider node.  Cascading support  Its goal is to keep identical copy of queue contents in several nodes.  Advanced admin operations: switchover, change-provider, pause/resume  Londiste process manages target node only
  • 13. Skytools 3: Cascading  set – group of nodes that distribute a single queue  node – database that participates in cascade set  node types:  root – mast er node of a cascade set  branch – node that carries full contents of the queue (can be provider)  leaf – data-only node (events are replicated, but can't be provider to other nodes) L1 L4 T1 shopdb analysisdb (online, root) (internal, leaf) L2 L3 shopdb_ro shopdb (ro, leaf) (fo, branch) T3
  • 14. Skytools 3: Building from source tarball It is not a polished release, but a snapshot of current development tree. Although it may happen to have couple of working use-cases.  get latest tarball: http://skytools.projects.postgresql.org/testing/skytools-3.0a1.tgz  Dependencies:  C compiler and GNU make  PostgreSQL development headers and libraries  Python development package  Psycopg2  $ ./configure --prefix=/usr/local  $ make  $ make install
  • 15. Skytools 3: setup replica 1. edit a londiste configuration file, lets say L1.ini [londiste] 2. Install Londiste and initialize nodes: job_name = L1 db = dbname=shopdb $ londiste L1.ini create-root shopdb dbname=shopdb queue_name = shopdb_replica $ londiste L2.ini create-leaf shopdb_ro logfile = log/%(job_name)s.log dbname=shopdb_ro --provider=dbname=shopdb pidfile = pid/%(job_name)s.pid $ londiste L3.ini create-branch shopdb_T3 dbname=shopdb –provider=dbname=shopdb L1 L4 $ londiste L4.ini create-leaf analysisdb shopdb T1 analysisdb dbname=analysisdb --provider=dbname=shopdb (online, root) (internal, leaf) L2 L3 shopdb_ro shopdb (ro, leaf) (fo, branch) T3
  • 16. Skytools 3: setup replica 3. edit a ticker configuration file, lets say T1.ini [pgqadm] 4. run ticker: job_name = T1 db = dbname=shopdb $ pgqadm T1.ini ticker -d logfile = log/%(job_name)s.log $ pgqadm T3.ini ticker -d pidfile = pid/%(job_name)s.pid 5. run Londiste: $ londiste L1.ini replay -d L1 L4 $ londiste L2.ini replay -d shopdb $ londiste L3.ini replay -d T1 analysisdb (online, root) (internal, leaf) $ londiste L4.ini replay -d L2 L3 shopdb_ro shopdb (ro, leaf) (fo, branch) T3
  • 17. Skytools 3: Advanced admin operation examples In example Ticker process T1 for shopdb (online) and T3 for shopdb (fo). Londiste process L1 is root, L3 is branch, L2 and L4 are leaf. A L1 L4 T1 shopdb analysisdb (online, root) (internal, leaf) 1. Shopdb failover can be done with one command $ londiste L1.ini switchover --target=shopdb_T3 L2 L3 shopdb_ro shopdb 2. Analysisdb can change provider with command (ro, leaf) (fo, branch) T3 $ londiste L4.ini change-provider --target=shopdb_T3 C B L1 L4 L1 L4 T1 shopdb analysisdb T1 shopdb analysisdb (fo, branch) (internal, leaf) (fo, branch) (internal, leaf) L2 L3 L2 L3 shopdb_ro shopdb shopdb_ro shopdb (ro, leaf) (online, root) T3 (read only, leaf) (online, root) T3
  • 19. Ticker  Ticker reads event id sequence for each queue.  If new events have appeared, then inserts tick if:  Configurable amount of events have appeared ticker_max_count (500)  Configurable amount of time has passed from last tick ticker_max_lag (3 sec)  If no events in the queue, creates tick if some time has passed.  ticker_idle_period (60 sec)  extra parameters in configuration file:  how often to run maintenance [seconds] maint_delay = 600  how often to check for activity [seconds] loop_delay = 0.5
  • 20. Skytools 3: Building from GIT It is for people who don't fear work-in-progress code and are prepared to give feedback on issues. Especially welcome would be people who could submit code/doc patches, to help us bring the final 3.0 release faster.  fetch git tree: $ git clone git://github.com/markokr/skytools-dev.git  fetch libusual submodule: $ git submodule init $ git submodule update  generate ./configure script $ make boot  now build as usual (--with-asciidoc is required when building from GIT) $ ./configure --prefix=... --with-asciidoc $ make $ make install
  • 21. References  http://skytools.projects.postgresql.org/doc/londiste.ref.html  http://wiki.postgresql.org/wiki/Londiste_Tutorial  http://skytools.projects.postgresql.org/skytools-3.0/doc/skytools3.html  http://pgfoundry.org/projects/skytools