{"id":2254,"date":"2014-04-08T17:12:02","date_gmt":"2014-04-08T17:12:02","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2254"},"modified":"2014-04-08T17:12:02","modified_gmt":"2014-04-08T17:12:02","slug":"postgres-high-availability-talk-notes-pgconf-2014","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/","title":{"rendered":"Postgres High Availability (Talk Notes, PGConf 2014)"},"content":{"rendered":"<p>I saw a talk by some operations engineers who work for ARIN at PGConf 2014.<\/p>\n<p>They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it).<\/p>\n<p>Their architecture was interesting for a couple reasons, it uses a three node system (master, synchronous slave and asynchronous slave), and it uses the network switch to cut off bad nodes. Nodes are tasked with monitoring other nodes, and when one node can&#8217;t communicate with another, it sends a message to others to request they check as well. A different node would be responsible to agree that some node is down, in which case, it notifies the switch that it needs to &#8220;fence&#8221; the bad node (i.e. cut off all network traffic).<\/p>\n<p>In a failure scenario, the synchronous node can immediately become master, and the async must catch up and become synchronous &#8211; once the bad node is fixed, it re-enters the pool as asynchronous, which allows it to catch up slowly. It&#8217;s worth noting that if there is no synchronous node after a failure, the async node will be forced to catch up before the system can start running again, which will trigger a pause for end users.<\/p>\n<p>Other ways to implement this (without a switch) would include iptables. Interestingly, the ARIN team came up with a list of ~45 failure scenarios, which they apparently tested in about three weeks (clearly this can be a lot of effort). Also interesting, a member of the audience mentioned an alternate design using dark fiber to connect SCSI connections on hard drives in what sounded like a RAID, for replication, but I don&#8217;t think most of my readers are going to be doing that.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Postgres High Availability (Talk Notes, PGConf 2014)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[7],"tags":[157,159],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2014-04-08T17:12:02+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2014-04-08T17:12:02+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#blogposting\",\"name\":\"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling\",\"headline\":\"Postgres High Availability (Talk Notes, PGConf 2014)\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2014-04-08T17:12:02+00:00\",\"dateModified\":\"2014-04-08T17:12:02+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#webpage\"},\"articleSection\":\"Database Performance Tuning, database, database replication\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/database-performance-tuning\\\/#listItem\",\"name\":\"Database Performance Tuning\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/database-performance-tuning\\\/#listItem\",\"position\":2,\"name\":\"Database Performance Tuning\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/database-performance-tuning\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#listItem\",\"name\":\"Postgres High Availability (Talk Notes, PGConf 2014)\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#listItem\",\"position\":3,\"name\":\"Postgres High Availability (Talk Notes, PGConf 2014)\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/database-performance-tuning\\\/#listItem\",\"name\":\"Database Performance Tuning\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/\",\"name\":\"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling\",\"description\":\"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/postgres-high-availability-talk-notes-pgconf-2014\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2014-04-08T17:12:02+00:00\",\"dateModified\":\"2014-04-08T17:12:02+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling","description":"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a","canonical_url":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#blogposting","name":"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling","headline":"Postgres High Availability (Talk Notes, PGConf 2014)","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2014-04-08T17:12:02+00:00","dateModified":"2014-04-08T17:12:02+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#webpage"},"articleSection":"Database Performance Tuning, database, database replication"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/#listItem","name":"Database Performance Tuning"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/#listItem","position":2,"name":"Database Performance Tuning","item":"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#listItem","name":"Postgres High Availability (Talk Notes, PGConf 2014)"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#listItem","position":3,"name":"Postgres High Availability (Talk Notes, PGConf 2014)","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/#listItem","name":"Database Performance Tuning"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/","name":"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling","description":"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2014-04-08T17:12:02+00:00","dateModified":"2014-04-08T17:12:02+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling","og:description":"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a","og:url":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/","article:published_time":"2014-04-08T17:12:02+00:00","article:modified_time":"2014-04-08T17:12:02+00:00","twitter:card":"summary_large_image","twitter:title":"Postgres High Availability (Talk Notes, PGConf 2014) - Gary Sieling","twitter:description":"I saw a talk by some operations engineers who work for ARIN at PGConf 2014. They presented their architecture for high availability, which uses CMAN, Corosync, and Pacemaker, which handle message queueing, a quorum system and Postgres communication, respectively (Corosync is functioning similar to Zookeeper, as I understand it). Their architecture was interesting for a"},"aioseo_meta_data":{"post_id":"2254","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:25:34","updated":"2026-07-06 01:10:40","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/\" title=\"Database Performance Tuning\">Database Performance Tuning<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPostgres High Availability (Talk Notes, PGConf 2014)\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Database Performance Tuning","link":"https:\/\/www.garysieling.com\/blog\/category\/database-performance-tuning\/"},{"label":"Postgres High Availability (Talk Notes, PGConf 2014)","link":"https:\/\/www.garysieling.com\/blog\/postgres-high-availability-talk-notes-pgconf-2014\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2254"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=2254"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2254\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}