
áááąáˇááąááşáá˝ááş ááźáŽá¸ááŹá¸ááąáŹ á
áťáąá¸ááźáŽá¸ááąáŹ áááąáŹááťááşááťáŹá¸áá˝ááşááŹáá ááąááŹáááŻááşá¸áá˝ááşá፠áááşááąáŹááşáážáŻááťáŹá¸ ááźááˇáşááŹá¸á
á˝áŹááážááááş áááŻáĄááşááŤáááşá âááąáŹááŽá¸á ááźáŻááźááşááááşá¸ááááşá¸áážáŻ áááşáááşááŻááşááąáŹááşááąáááşâ áá°ááąáŹ áááşááąáˇááťáşá፠ááŹááŽáááááŻááşáááˇáş áááşáááŻááşááťáŹá¸ááᯠáá˝áąáˇáážáááąááá˛ááźá
áşááąáŹáşáááşá¸ áĄááťáŹá¸áĄáŹá¸ááźááˇáş áááŹá¸á
ááŹááąáŹááşá¸ááąáŹ áĄááźáŻáśá¸ááᯠááźá
áşá
áąáááşá ááąáŹááşáááşááŹááŹáá
áşááŻáá˝ááˇáşáááˇáşáĄááŤáá˝ááş áááşáááş API áááŻáˇááąáŤáşáááŻáážáŻáá
áşááŻááŹáááŻáĄááşááźáŽá¸ "ááŹáˇááşáá˛" áááşáááşáážáŻáĄááźáąáŹááşá¸ááᯠáááşá
ááşá¸á
áŹá¸áááşááááŻáĄááşáᲠááááşááťáŹá¸áá˛áá˝ááş á¤áááá˛áááŻáˇ áááˇáşáááŻááşááźááŤá
ááŻáˇá áááŻáˇáĄááźááş áĄááąá¸ááźáŽá¸ááąáŹá
áá
áşáá
áşááŻáááş áĄá
áŻáááŻááşáááşá¸áááŹááťáŹá¸áážááˇáş áááşááąááąáŹáĄááťáááşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻá ááŻáśááźááşá
áááşááťá
á˝áŹ ááááşááąáŹááşáááźááşá¸áĄáá˝ááş áĄááźáąáŹááşá¸ááźááťááşááťáŹá¸ááážáááąáŹáˇááŤá
ááťá˝ááşáŻááşáááŻáˇááááşááąáŹááşáážáŻááťáŹá¸áá˝ááş ááąááŹááąáˇá
áşááťáŹá¸á ááŻáśááźááşá
áááşááťááážáŻáážááˇáş ááťá˝ááşáŻááşáááŻáˇááážáááŹááąáŹáĄááŹááťáŹá¸ááᯠááąááťáŹá
áąáááş ááťá˝ááşáŻááşáááŻáˇá
ááşá¸á
áŹá¸ááŹá¸ááąáŹ ááźáąáážááşá¸áááşá¸ááťáŹá¸ááᯠáááˇáşáĄáŹá¸ ááźáąáŹááźááŤáááşá áááŻáˇáĄááźááş ááťááşááźááˇáşááąáŹ ááááŻáśá¸ááťáŻááşááťááşááťáŹá¸áážááˇáşáĄáá° ááŽáááŻá
ááźááˇáşááŹá¸ááąáŹááážááááŻááşáážáŻááááŻááŹáá˝ááş áĄáá˝áąáĄáážá áş
áĄááťááŻá¸ááťááŻá¸ááąáŹ opensource á áá áşááťáŹá¸ áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáĄááźáąáĄááąáá˝ááş áááşá¸ááᯠáááŻááááşáá˝áąáˇááźááşáááŻááşáááşá áááşáááŻáĄáŹá¸ááťáŹá¸ááŹáááşáážááˇáşáĄááťáž áĄáá˝áąáĄáážá áşááźáąáážááşá¸áááşá¸ááťáŹá¸áááş ááźááˇáşááŹá¸ááąáŹááážááááŻááşáážáŻáááşá¸áááŹááťáŹá¸ááᯠáááˇáşáá˝ááşá¸áááş áá˝ááşá¸áĄáŹá¸ááąá¸áá˛áˇáááşá ááźáŽá¸ááąáŹáˇ áá°áááŻáˇáá˛áˇ áĄáááşáĄáá˝áąá¸áááşá¸ ááá°áá°á¸á ááťááŻá¸áááşáá áşááźáąáážááşá¸ááťááşááťáŹá¸áááş áááşá¸áááŻáˇáááááŻááŹáááşááŹá áĄááááĄááťááşáá˝ááş ááážááááŻááşáážáŻááźááˇáşááŹá¸áááşá áĽáááŹáĄáŹá¸ááźááˇáşá MongoDB áááş áááşá¸ááĄááááĄááŻáśá¸ááźáŻáážáŻááá ášá áááşáĄááźá áş áĄá áŻáááŻááşáĄááźáŻáśáááŻááşááąááŹáá°ááŹá¸áááşá ᤠDBMS á ááźááşá¸áááşááąáŹ ááźááŻááşáááŻááşáážáŻ áĄáŹá¸ááŹááťááşááźá áşáááˇáş áĄá áŻáĄááąá¸áááş áĄááťáŹá¸áááŻááş áĄáááŻááşá¸áĄááŹááźá áşáááşá
PostgreSQL áááŻáˇ ááźááşáá˝áŹá¸ááźááŤá ááŻáˇá áááşá¸áááş áážáąá¸áĄááťááŻáśá¸ áá°ááźááŻááşááťáŹá¸ááąáŹ opensource áááąáŹááťááşááťáŹá¸áá˛ááž áá áşááŻááźá áşááźáŽá¸á áááşá¸áááş ááźáŽá¸áá˛áˇáááˇáş ááŹá áŻáážá áş 95th áážá áşáá˝ááş áááááŻáśá¸áá˝ááşáážááá˛áˇáááşá áĄááťáááşáĄááąáŹáşááźáŹáĄáąáŹááşá áááąáŹááťááşáĄáá˝á˛áˇáááş á áá áşááźááˇáşááźáąáážááşá¸áááş áááŻáĄááşááąáŹ ááźááˇáşááŹá¸ááąáŹááážááááŻááşáážáŻááźáżááŹáĄááźá áş áá ááşá¸á áŹá¸áá˛áˇááąá áááŻáˇááźáąáŹááˇáşá ááąááŹáááášáá°áááşááŽá¸ááźááşá¸áĄáá˝ááş áá°á¸áá°ááźááşá¸áááşá¸áááŹáááş 8.2 ááŻáážá áşáá˝ááş ááŹá¸áážááşá¸ 2006 áá˝ááşáᏠbuilt-in ááźá áşááŹáá˛áˇááąáŹáşáááşá¸ áááşá¸áááş áááŻááşáĄááźáąááś (áážááşáááşá¸áááŻáˇááąáŹááşááźááşá¸) ááźá áşáááşá 2010 áá˝ááşá ááŹá¸áážááşá¸ 9.0 áááş streaming replication áááŻááááşáááşááąá¸áá˛áˇááźáŽá¸á áááşá¸áááş ááťááşááźááˇáşááąáŹáĄá áŻáĄááąá¸ááťáŹá¸áááŻáááşááŽá¸áááşáĄáá˝ááşáĄááźáąááśááźá áşáááşá á¤áááşáážáŹ áĄáážááşáĄáŹá¸ááźááˇáş Enterprise SQL áááŻáˇáááŻááş ááąááşáá áş NoSQL ááźáŽá¸ááąáŹááş PostgreSQL áážááˇáş áááşá¸áážáŽá¸ááąáŹáá°ááťáŹá¸áĄáá˝ááş áĄáá˝ááşáĄáśáˇááźá ááŹááźá áşááŤáááş - áĄáááŻááşá¸áĄáááŻááşá¸ááž á áśááźáąáážááşá¸ááťááşáááş áááŻá¸áážááşá¸á á˝áŹ synchronous áááŻáˇáááŻááş asynchronous replication ááŤáážáááąáŹ master-replica pair áá áşááŻááźá áşáááşá áá áşááťáááşáááşá¸áážáŹáááşá á ááąáŹáˇáá˝ááşá ááŹá ááŹááźáąáŹááşá¸ááźááşá¸ááᯠáááŻááşáááŻááşááŻááşááąáŹááşááźáŽá¸ ááŻáśá¸á á˝á˛áá°ááťáŹá¸ááᯠáá°á¸ááźáąáŹááşá¸áááˇáşááźáżááŹáááŻáááşá¸ áá˝ááşáááşá á˝áŹááźáąáážááşá¸áááş áĄáááŻááźáŻááŹá¸áááşá
ááŻáśááźááşá áááşááťáááąáŹ PostgreSQL ááᯠáááşáááŻáˇááźáŻááŻááşáááş ááťá˝ááşáŻááşáááŻáˇ ááŻáśá¸ááźááşáá˛áˇááŻáśáážááˇáş áááşá¸áĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáá˝áąá¸ááťááşáá˛áˇáááˇáşáĄááŹ
áááŻáˇááąáŹáşá áĄáááşáááźááşáĄáŹááŻáśá ááŻááşáááşááááŻáĄááşááąáŹáĄáážáŹá¸ááśáááŻááşáááşáážáááąáŹááźáąáážááşá¸ááťááşáááŻáááşááąáŹááşáááşáá°ááŽááąáŹáááąáŹááťááşááťáŹá¸áážááˇáşááááááŹááťáŹá¸á á˝áŹááážáááŤá PostgreSQL áááşáá°ááźááŻááşááťáŹá¸ááááˇáşáááşáááŻááşááŤá ááááşáááŻááşáá˛áážáŹ (MCS) áá áşááŻáááşá¸ááąáŹ PostgreSQL ááŹááŹááťáŹá¸áážááˇáş áĄááŽáĄááťáž áá°á¸áá°ááąáŹáşááźáááˇáş ááŹá ááŹ-ááŻáśáá°áĄáá˝á˛ááťáŹá¸ááᯠDBaaS á áááşáááŻááşááááşá¸á ááážááááŻááşááŤáááşá
ááŻáśáážááşáĄáŹá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş áá°áááŻááşá¸áĄáá˝ááş áááŻáááŻáá˝ááşáá°á áąáááşáážááˇáş áááŻááşááᯠááááşáá˝ááş áĄáááşáááźááşá áąáŹááˇáşááźááˇáşááźáŽá¸ áááŻá¸áááąá ááŹááááŻáᲠáĄáá˝ááşááážááááŻááşááąáŹ áááşááąáŹááşáážáŻááťáŹá¸áĄáá˝ááş áĄááźáąááśáĄááźá áş ááŻááşááąáŹááşáááŻááşáááˇáş PostgreSQL áááşáááşáážáŻááᯠááážáá áąáááŻááŤáááşá á¤áĄáááŻááşá¸áá˝ááş áááşááąááźááŹá¸ááąáŹ ááźáąáážááşá¸ááťááşááąáŹááşá¸ááťáŹá¸áážááˇáş ááąáŹááşááŻáśá¸ááąáŤáş áááŻá¸áááşáážáŻááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáááˇáş utilities ááťááŻá¸áááşáá áş áážá áşááťááŻá¸ááŻáśá¸áážááááşá
áááąáˇáá˝ááşá ááźááˇáşááŹá¸ááąáŹááážááááŻááşáážáŻááźáżááŹáááş áááşááąáŹááşá¸ááźá áşááźááşá¸áá˝ááşááááşáᲠ(áááŻáááŻáˇááźáąáŹááźááşá¸ááážááá˛) ááááąáŹááášááĄáâááąáŤááşá¸ááąáŹááşáá˝áąá¸ááąáŹááşáá˝á˛ áĄááşááááŻááŽáááşá áĄááťáŹá¸á áŻáážáŹá áĄááá áááąáŹáşáááážáŻááťáŹá¸áááş ááŹááŹááťáŹá¸ááážáááźááşá¸ááźáąáŹááˇáşáááŻááşáᲠáĄááťáŹá¸áááąáŹáá°áážáŻáááŻááşáᏠááźáżááŹááťáŹá¸ááźáąáŹááˇáşááźá áşáááş- ááąáŤááşá¸ááąáŹááşáĄáá áşááᯠááá˝áąá¸ááťááşáááąá¸á ááąáŤááşá¸ááąáŹááşáážá áşáŚá¸áááş ááá°ááŽááąáŹááąááŹá ááşááŹááťáŹá¸áá˝ááş ááąáŤáşááŹááźáááşá á áááşáááŻáˇááźá áşáááşá áĽááᏠ- Github MySQL áĄá áŻáĄááąá¸áá˝ááş áááąáŹáşáááážáŻáá áşáᯠ- áá°áááŻáˇááąá¸ááŹá¸áá˛áˇáááşá .
á¤áĄááźáąáŹááşá¸áĄááŹáá˝ááş áááşášááťáŹáĄááźáąááśáááş áĄáá˝ááşááąá¸áááşáááşá ááááşáážáŹáááşá¸áážááááşá áĄááźáŹá¸áá áşáááşáá˝ááş HA solutions ááťáŹá¸áááşááąáŹááşááźááşá¸áááŻááşáᏠááźá áşáááŻááşááźáąááťáŹá¸áĄááąáŤáş ááŽáĄááŻááŽáĄá áááˇáşáááşááťááşááťáŹá¸ááťáážááşááŹá¸áááˇáş áá áşáááşáá˝ááşá áĄááťáŹá¸ááášáááᯠááŻáśá¸ááźááşáááşáĄáá˝ááş áááşášááťáŹáááşá¸ááźááˇáş áááşááąááźááŹá¸ááąáŹ áĄááşááááŻááŽáááşááťáŹá¸á и . á¤áĄááźáąááśáĄááąáŤáşáá˝ááşá áĄááąáŹáşááąá¸ááąáááşá¸á áŹá¸ááąáŹ DCS (ááááŻááťáŻááşáááŻááşáážáŻááťážáąáŹáˇááťááŹá¸ááąáŹ áĄááťáŹá¸ááášáááąá¸á áá áşááťáŹá¸) - Zookeeper, etcd, Consul. áááŻáˇááźáąáŹááˇáşá ááŻáśá¸ááźááşááťááşááťáááˇáşá áá áşáááş áĄáážáŽáĄáááŻáááşá¸á á˝áŹ ááąá¸ááŹá¸ááŹá¸ááąáŹ áĄááşááááŻááŽáááşáá áşááťááŻá¸ááťááŻá¸ááąáŤáşáá˝ááş ááŻááşááąáŹááşááąááŤáá áááşá¸ááᯠáĄáá˝ááşáááááŹá¸áááˇáşáááşá á áá áşáĄááťáŹá¸áĄááźáŹá¸ááᯠáá˝á˛ááźááşá¸á áááşááźáŹááźáŽá¸ááąáŹááş Zalando ááž áĄááááĄáŹá¸ááźááˇáş áááşááŽá¸ááŹá¸ááąáŹ opensource á áá áşááźá áşáááˇáş Patroni áá˝ááş áĄááźáąááťáá˛áˇáááşá
ááŽááťááşá¸á áŹááŹá¸ áá˝á˛áá˝á˛áážáŻáá áşááŻáĄááąááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş áĄááśáááşá¸áááşáĄáá˝ááş áĄááťáŹá¸áááŻááşá ááąá¸ááťáááŻááşááąáŹ áĄá áŻáĄááąá¸ááťáŹá¸ááᯠáááşá áŻáśááŹá ááŹááźáąáážááşá¸áááşá¸ááťáŹá¸áááŻáááşá¸ áááˇáşáá˝ááşá¸á ááşá¸á áŹá¸áá˛áˇáááşáᯠááťá˝ááşááąáŹáşááźáąáŹááŤáááşá áááŻáˇááąáŹáş áĄááááĄááźáąáŹááşá¸áááşá¸áážá áşáááşááźáąáŹááˇáş áááŻáĄá áŻáĄáá˝á˛áˇááᯠááááşááŽá¸áááş ááŻáśá¸ááźááşáá˛áˇááźáááşá ááááŚá¸á á˝áŹá áááŻáááŻáˇááąáŹ ááźáąáážááşá¸ááťááşááťáŹá¸áááş ááźááˇáşááŹá¸áážáŻááşáá˝áąá¸ááźáŽá¸ áĄáŹá¸áááşá¸ááťááşááťáŹá¸ áááŻááťáŹá¸áááşá ááá ášá áĄáŹá¸ááŻáśá¸áĄáá˝ááş áááşááźáááşááąáŹáĄááźáąáá áşááŻááźáŻááŻááşáááş áááşáá˛ááŤááááˇáşáááşá ááŻááááĄááąáážááˇáşá á¤ááá ášá áá˝ááş PostgreSQL áááş áááˇáşáážááşá¸ááąáŹ (ááŹáá) ááážáááąáŹáˇáá˛á áĄááťááŻáˇááąáŹááŻááşááąáŹááşááťááşááťáŹá¸áááş áááááŻááşááąáŹáˇáá˛á áĄááťááŻáˇááąáŹáĄáááŽááąá¸áážááşá¸ááťáŹá¸áááş áááşáááşááąá ááşáĄáá˝ááşá¸ áážááşááŹá¸ááąáŹ ááťááŻáˇáá˝ááşá¸ááťááşááťáŹá¸áážááááŻááşáááşá
Patroni
ááŤááᯠPatroni áááşáááŻáĄááŻááşááŻááşáá˛á developer ááťáŹá¸áááş ááŽá¸ááᯠááźááşáááşáá˝ááşá¸ááśááźáŽá¸ áĄááźáąááśáĄááźá áş áááşááąááźááŹá¸ááąáŹ DCS ááźáąáážááşá¸áááşá¸ááťáŹá¸áá˛ááž áá áşááŻááᯠáĄááŻáśá¸ááźáŻáááş áĄáááŻááźáŻáá˛áˇáááşá áá˝á˛áˇá ááşá¸áážáŻááŻáśá áśááťáŹá¸ááᯠáááşáá°ááźáŻááźááşá¸á ááąáŤááşá¸ááąáŹááşáá áşáŚá¸ááᯠáá˝áąá¸ááťááşááźááşá¸áážááˇáş áĄáááźáąáŹááşááźááşá¸áááŻááşáᏠááźáżááŹáĄáŹá¸ááŻáśá¸ááᯠáá°áˇáĄáá˝ááş ááťááşááŹá¸áá˛áˇáááşá á¤áĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş etcd ááᯠáá˝áąá¸ááťááşáá˛áˇáááşá
áááŻáˇááąáŹááşá Patroni áááş PostgreSQL áážááˇáş áááşáá°ááźáŻááźááşá¸áááşáááşááťáŹá¸áá˝ááş áááşáááşááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠáážááşáááşááąáŹáĄááŻáśá¸ááťáááŽááąá¸áážááşá¸ááźááˇáş áááŻááşáá˝ááşááźáąáážááşá¸ááąá¸áááˇáşáĄááźááş switchover áážááˇáş failover (ááŹá ááŹá ááŻáśáážááşáážááˇáş áĄááąá¸ááąáŤáşááźáąáŹááşá¸ááźááşá¸) áááŻááşáᏠcommand ááťáŹá¸ááᯠááŻááşááąáŹááşááąá¸ááŤáááşá áĄáá°á¸áááźááˇáş MCS cloud áá˝ááşá áááşáááş ááŹá ááŹáá áşááŻá áĄá áŻáĄááąá¸áá áşááŻá áá áşááźááŻááşáááşáááşá¸ ááŻáśá áśáá°áážááˇáş áá áşáᯠáááŻáˇáááŻááş áá áşááŻáááşáááŻááąáŹ áĄááŽáĄááťáž ááŻáśá áśáá°ááťáŹá¸ááᯠáááşááŽá¸áááŻááşáááşá synchronous ááŻáśáá°áá áşááŻáážáááąááźááşá¸áááş áĄáááşá¸ááŻáśá¸ ááŹáᏠ2 ááŻáážá ááąááŹááŻáśááźáŻáśáážáŻááᯠááąááťáŹá áąááźáŽá¸ áááşá¸áááş áĄááá âááŹá ááŹáááŻááşá áŹá¸áážááşááąáŹááşá¸â ááźá áşááŹáááˇáş á¤ááŻáśáá°ááźá áşáááşá
etcd ááᯠáá°ááŽááąáŹááŹááŹááťáŹá¸áá˝ááş áĄááŻáśá¸ááźáŻááŹá¸ááąáŹááźáąáŹááˇáşá áĄááźáśááźáŻááŹá¸ááąáŹ ááŹááŹáĄááąáĄáá˝ááşáááş áĄááąáŹááşá¸ááŻáśá¸áĄáááźáąáŹááşáááşáĄáá˝ááş 3 áááŻáˇáááŻááş 5 ááźá áşáááşá áááŻáááŻáˇááąáŹ áĄá áŻáááŻááşáĄááźáŻáśáááŻááş á ááąá¸áááş á áŹáááşáááşáĄáá˝ááş áĄááťáŹá¸áááŻááş áĄáááŻááşá¸áĄááŹááźá áşáááş (áĄáááşáá˝ááşááąá¸áááşáĄáá˝ááş ááťáááşáážáááźááşá¸áĄááźáąáŹááşá¸ ááťá˝ááşááąáŹáşááąá¸ááŹá¸áááş)á áááŻáˇááąáŹáşá áĄáá°á¸áááźááˇáş ááźááˇáşááŹá¸ááąáŹ áááşááťáŹá¸áĄáąáŹááşáá˝ááş áĄááźááŻááşáĄáááŻááş áá°ááŽááąáŹ ááŻáśáá°ááťáŹá¸áááş áážáąá¸áá˝áąá¸áááşááźáąáŹááşá¸ áááááźáŻááŤá
áááŻáááŻáˇááąáŹ áááşáážáŻááŻáśáá°ááťáŹá¸ (hot standby) ááᯠáĄááŻáśá¸ááźáŻááźááşá¸áááş áĄá áŽáááşááśááźááşá¸ áááŻáˇáááŻááş áá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸ááŻááşáááşá¸ááťáŹá¸áĄáá˝ááş áááŹá¸ááťážáááźáŽá¸ ááŹá ááŹááŹááŹáá˝ááş áááşááᯠáááşááŹá áąáááşá
áááŻáááŻáˇááąáŹáĄá áŻáĄááąá¸áá áşááŻááᯠáááşáááŻááşáááŻááşááźáŻááŻááşáááŻááŤáá áááşáááŻáĄááşááááˇáşáááş-
- ááŹáᏠá áᯠáááŻáˇáááŻááş áááŻáˇáááşáááŻá ááźááşáááşááŤá áááşá¸áááŻáˇááźáŹá¸áážá IP ááááşá áŹáážááˇáş firewall á ááşá¸ááťááşá¸ááťáŹá¸ááᯠááźááşáááşááŤá
- etcdá Patroniá PostgreSQL áááşááąáŹááşáážáŻááťáŹá¸áĄáá˝ááş áááşááąáˇááşáťááťáŹá¸ áááˇáşáá˝ááşá¸ááŤá
- etcd áĄá áŻáĄááąá¸ááᯠconfigure;
- PostgreSQL áážááˇáşáĄááŻááşááŻááşáááş patroni áááşááąáŹááşáážáŻááᯠconfigure ááŻááşááŤá
áááŻáááŻáááşáážáŹá á áŻá áŻááąáŤááşá¸á áááşáááş áá áşááŤáááş configuration áááŻááşááťáŹá¸ááᯠáážááşáážááşáááşáááşááąá¸áááş áááŻáĄááşááźáŽá¸ áááşáááˇáşááąááŹáá˝ááşáááᯠáĄáážáŹá¸áááźáŻááŻááşááá áąáááş áááŻáĄááşááŤáááşá á¤áĄááŹáĄáá˝ááş áááşáááş Ansible áá˛áˇáááŻáˇááąáŹ configuration management tool ááᯠááąááťáŹááąáŤááş áĄááŻáśá¸ááźáŻáááˇáşáááşá áááŻáˇááąáŹáşá áĄáá˝ááşááážááááŻááşááąáŹ TCP ááťáááşáá˝ááşááťážáŹááááąá¸ááŤá ááŻááşááŹá ááŽá¸ááźáŹá¸áĄááŻááşááŤá
áĄáááşáááˇáşááŻááşááŹá¸ááąáŹ áĄá áŻáĄááąá¸ááᯠáááŻáĄááşááąáŹáşáááşá¸á á¤áĄááŹáĄáŹá¸ááŻáśá¸ááᯠááááŻááŹá¸áá°ááťáŹá¸áĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş ááááᯠáááŻá¸áážááşá¸áĄáąáŹááşááźáŻááŻááşááźáŽá¸ ááťá˝ááşáŻááşáááŻáˇá cloud áážá Patroni áá˝ááş áĄáááşáááˇáşááŻááşááŹá¸ááąáŹ áĄá áŻáĄááąá¸áá áşááŻááᯠáááşááŽá¸á áĄááá˛áˇ á ááşá¸áááşáááŻááşááŤáááşá áĄá áŻáĄááąá¸áááŻááşáááŻááşáĄááźááşá
- TCP ááťáááşáá˝ááşááťážáŹ ááá°ááŽááąáŹ ááááşáááşá¸ááťáŹá¸áá˝ááş áááşá¸áááş áááşáážáááŹá ááŹá synchronous áááŻáˇáááŻááş asynchronous ááŻáśá áśáá°ááᯠáĄááźá˛áá˝ážááşááźáááş;
- áááşáážá Patroni ááŹá ááŹáááŻááźáąáŹááşá¸áááşáĄáá˝ááş APIá
áááşá¸áááŻáˇááᯠMCS cloud API áážááˇáş áááşáá˝ááşáááŻá¸ááşáážááááˇáş áááşááąáŹááşááźááˇáşáážáŻáááŻááşááŤáááşá
Demo
MCS cloud áážá PostgreSQL áĄá áŻáĄááąá¸áá áşááŻá á á˝ááşá¸áááşááťáŹá¸ááᯠá ááşá¸áááşáááşá DBMS áážááˇáş ááźáżááŹááťáŹá¸áážááááˇáşáĄá፠áááŻááşáááŻááşáĄáááŽááąá¸áážááşá¸áá áşáᯠáááşáááŻáˇááźáŻáá°áááşááᯠááźááˇáşááźááŤá ááŻáˇá
áĄáąáŹááşáá˝ááş áĄááŻáĄááąáŹááşááźá áşáááşááťáŹá¸ááᯠáážááşáááşá¸áááşááźáŽá¸ ááťááşáážáŹááźááşáááŻáˇ ááááşá¸áááŻáˇáááˇáş áĄáááŽááąá¸áážááşá¸áĄáá˝ááş ááŻááşááźá áşáááşá áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸áážáááŤá áááşá¸ááᯠCtrl + C ááąáŤááşá¸á ááşáážáŻááźááˇáş áááşáááˇáşáááşáĄáá áááşá¸ááᯠáĄá áŽáááşááśááźáŽá¸ áááşá¸ááᯠáá˝ááşá¸áááşáá áşááŻáá˝ááş áááşáááşááŻááşááąáŹááşááŤáááşá
from __future__ import print_function
from datetime import datetime
from random import randint
from time import sleep
import psycopg2
def main():
try:
connection = psycopg2.connect(user = "admin",
password = "P@ssw0rd",
host = "89.208.87.38",
port = "5432",
database = "myproddb")
cursor = connection.cursor()
cursor.execute("SELECT version();")
record = cursor.fetchone()
print("Connection opened to", record[0])
cursor.execute(
"INSERT INTO log VALUES ({});".format(randint(1, 10000)))
connection.commit()
cursor.execute("SELECT COUNT(event_id) from log;")
record = cursor.fetchone()
print("Logged a value, overall count: {}".format(record[0]))
except Exception as error:
print ("Error while connecting to PostgreSQL", error)
finally:
if connection:
cursor.close()
connection.close()
print("Connection closed")
if __name__ == '__main__':
try:
while True:
try:
print(datetime.now())
main()
sleep(3)
except Exception as e:
print("Caught error:n", e)
sleep(1)
except KeyboardInterrupt:
print("exit")
áĄáááŽááąá¸áážááşá¸áááş áĄááŻááşááŻááşáááş PostgreSQL áááŻáĄááşáááşá API ááᯠáĄááŻáśá¸ááźáŻá MCS cloud áá˝ááş áĄá áŻáĄááąá¸áá áşáᯠáááşááŽá¸ááźááŤá ááŻáˇá OS_TOKEN variable áá˝ááş API áááŻáááşááąáŹááşáĄááŻáśá¸ááźáŻáááşáĄáá˝ááş áááŻáááşáá áşááŻááŤáážááááş (openstack áááŻáááşááźáżáᏠcommand ááźááˇáşááááŻááşáááş) áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄáąáŹááşá፠command ááťáŹá¸ááᯠáááŻááşáááˇáşáááŻááşááŤáááşá
áĄá áŻáĄáá˝á˛áˇáá áşáᯠáááşááŽá¸ááŤ-
cat <<EĐF > pgc10.json
{"cluster":{"name":"postgres10","allow_remote_access":true,"datastore":{"type":"postgresql","version":"10"},"databases":[{"name":"myproddb"}],"users":[{"databases":[{"name":"myproddb"}],"name":"admin","password":"P@ssw0rd"}],"instances":[{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}}]}}
EOF
curl -s -H "X-Auth-Token: $OS_TOKEN"
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-d @pgc10.json https://infra.mail.ru:8779/v1.0/ce2a41bbd1434013b85bdf0ba07c770f/clusters

áĄá
áŻáĄááąá¸áááş áááşááźá˝ááąáŹáĄááźáąáĄááąáááŻáˇ ááźáąáŹááşá¸ááąáŹáĄááŤá áĄáá˝ááşáĄáŹá¸ááŻáśá¸áááş áááşáážááááşáááŻá¸ááťáŹá¸ááᯠáááşááśááážáááááˇáşáááş - áĄá
áŻáĄááąá¸áááş áĄáááşáááˇáşááźá
áşááąááŤááźáŽá
GUI áá˝ááş-

ááťáááşáááşááźáŽá¸ áááŹá¸áá
áşááŻááᯠáááşááŽá¸ááźááˇáşááĄáąáŹááşá
psql -h 89.208.87.38 -U admin -d myproddb
Password for user admin:
psql (11.1, server 10.7)
Type "help" for help.
myproddb=> CREATE TABLE log (event_id integer NOT NULL);
CREATE TABLE
myproddb=> INSERT INTO log VALUES (1),(2),(3);
INSERT 0 3
myproddb=> SELECT * FROM log;
event_id
----------
1
2
3
(3 rows)
myproddb=>

áĄáááŽááąá¸áážááşá¸áá˝ááş PostgreSQL áááŻáˇááťáááşáááşáááşáĄáá˝ááş áááşáážááááşáááşááťáŹá¸ááᯠááťá˝ááşáŻááşáááŻáˇáá˝ážááşááźááŤáááşá ááťá˝ááşáŻááşáááŻáˇáááş TCP balancer áááááşá
áŹááᯠáááşáážááşááąá¸áááşááźá
áşááźáŽá¸á áááŻáˇááźááˇáş ááŹá
ááŹááááşá
áŹáááŻáˇ áááŻááşáááŻááşááźáąáŹááşá¸áááş áááŻáĄááşáážáŻááᯠáááşáážáŹá¸ááŤáááşá á
áááşáááŻááşááĄáąáŹááşá áááşáá˝áąáˇááźááşááááˇáşáĄáááŻááşá¸á áĄááźá
áşáĄááťááşááťáŹá¸áááş ááąááŹááąáˇá
áşáá˛áááŻáˇ áĄáąáŹááşááźááşá
á˝áŹ áááşááąáŹááşáá˝áŹá¸ááŤááźáŽá

á áŽá ááşááŹá¸ááąáŹ ááŹá ááŹáá°á¸ááźáąáŹááşá¸áážáŻ
ááᯠá áŽá ááşááŹá¸áááˇáş ááŹá ááŹáááŻááşáá áşááŻáĄáá˝ááşá¸ ááťá˝ááşáŻááşáááŻáˇá áĄáááŽááąá¸áážááşá¸á ááŻááşááąáŹááşááťááşááᯠá ááşá¸áááşááźááˇáşááźááŤá ááŻáˇá

ááťá˝ááşáŻááşáááŻáˇáááş ááťážáąáŹááşáá˝ážáŹááᯠá
áąáŹááˇáşááźááˇáşááąááŤáááşá áĄááşáááŽááąá¸áážááşá¸áááş áĄáážááşááááş áĄáážáąáŹááˇáşáĄáážááşááźá
áşááąááźáąáŹááşá¸ ááťá˝ááşáŻááşáááŻáˇáá˝áąáˇááźááşáááąáŹáşáááşá¸á á¤áĄááźáąáĄááąááťááŻá¸áá˝ááş áĄááťáŹá¸ááŻáśá¸ 9 á
áášáááˇáşáᏠááźáŹááŤáááşá

ááŹá¸áážáąáŹááşáážáŻ
áĄáᯠáááşáážá ááŹá ááŹááźá áşáá˛áˇ virtual machine áá˛áˇ ááťááşááťáážáŻááᯠááŻáśááąáŹáşááźááˇáşááĄáąáŹááşá Horizon interface áážááááˇáş virtual machine áááŻáááşáááŻá¸áážááşá¸á á˝áŹááááşáááŻááşááąáŹáşáááşá¸áááşá¸áááşááŻáśáážááşááááşááźááşá¸ááźá áşááááˇáşáááşá Patroni áĄááŤáĄáááş áááşááąáŹááşáážáŻáĄáŹá¸ááŻáśá¸ááž áááŻáááŻáˇááąáŹáááŻááşááᯠááŻááşááąáŹááşááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáááş ááźááŻáááşááážááşá¸áááŻááşááąáŹ ááááşáá áşáááş áááŻáĄááşááŤáááşá áááŻáˇááźáąáŹááˇáşá á ááşá¸áááşáááşáááşáá˝ááşááťááşáĄáá˝ááş á áśáááŻááşááąáŹáááşá¸áááşá¸ááźááˇáş virtual machine ááźá áşááąáŹ áááşáážáááŹá ááŹááᯠááááşáááş ááťá˝ááşáŻááşáááŻáˇáá áŽááśáááˇáşáá˝á˛áá°ááťáŹá¸ááᯠááąáŹááşá¸áááŻáá˛áˇáááşá

áá
áşááťáááşáááşá¸áážáŹáááşá ááťá˝ááşáŻááşáááŻáˇáááťážáąáŹááşáá˝ážáŹáááş áááşáááşááŻááşááąáŹááşáá˛áˇáááşá ááŻáśáážááşáĄáŹá¸ááźááˇáşá ááŹá
ááŹá áĄááąá¸ááąáŤáş áá°á¸ááźáąáŹááşá¸áážáŻáááş ááááááźáŻáááááŻááşááąá
2019-03-29 10:45:56.071234
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 453
Connection closed
2019-03-29 10:45:59.205463
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 454
Connection closed
2019-03-29 10:46:02.661440
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
âŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚâŚ.. - СдоŃŃ ĐşĐ°ĐşĐžĐľ-ŃĐž кОНиŃĐľŃŃвО ĐžŃийОк
2019-03-29 10:46:30.930445
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
2019-03-29 10:46:31.954399
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 455
Connection closed
2019-03-29 10:46:35.409800
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 456
Connection closed
^Cexit
áááşááźááşáááˇáşáĄáááŻááşá¸á áĄáááŽááąá¸áážááşá¸áááş á áášáááˇáş 30 áááşáááşá¸ááąáŹáĄááŻááşáááşááŻááşáááŻááşáááşá ááŻááşáá˛áˇá áááşááąáŹááşáážáŻáĄááŻáśá¸ááźáŻáá°áĄááťááŻáˇáááş ááźáżááŹááťáŹá¸ááᯠáááááźáŻáááááş áĄááťáááşáááŤááááˇáşáááşá áááŻáˇááąáŹáşá áááşá¸áááş ááźááşá¸áááşááąáŹ ááŹááŹááťááŻáˇáá˝ááşá¸áážáŻááźá áşááźáŽá¸á áááşá¸áááş áááźáŹáá ááźá áşáá˝áŹá¸ááąáˇááážáááŤá á¤ááá ášá áá˝ááşá áá°áá áşáŚá¸ (á áŽááśáááˇáşáá˝á˛áá°) áááş áááŻááşááźáąáŹááşá¸áááˇáş ááŹááşáá˝ážááşá¸ááźááˇáş áĄáááşáááˇáşáážá áá˝ááşáááŻá¸ááşáá˝ááş áááŻááşáááąááŤá áĄááźááşááŻáśáˇááźááşáááş áĄááťáááşááážáááąá
ááąáŹááşááťááş
áááŻáááŻáˇááąáŹáĄá
áŻáĄáá˝á˛áˇáááş á
áŽááśáááˇáşáá˝á˛áá°ááťáŹá¸áĄáá˝ááş ááźáŽá¸ááŹá¸ááąáŹ áĄááťááŻá¸ááťáąá¸áá°á¸ááᯠááąá¸á
á˝ááşá¸áááşáᯠááťá˝ááşáŻááşáááşáááşá ááááşááąáŹáˇá ááąááŹááąáˇá
áşááŹááŹááťáŹá¸á ááźááşá¸áááşááąáŹ ááźááŻáá˝á˛áážáŻááťáŹá¸áážááˇáş ááťááşáá˝ááşáážáŻááťáŹá¸áááş áĄáááŽááąá¸áážááşá¸áĄáá˝ááş ááááŹáááşáážáŹá¸ááááˇáşáááşáááŻááşááááŻá áĄááŻáśá¸ááźáŻáá°áĄáá˝ááşáááşá¸ ááááŹáááşáááŻááşááąá áááşáááş áááşáááˇáşáĄááŹáááŻááťáž áĄááťááşá
áááŻááźááşáááş ááááŻáĄááşáᲠááŹááŽáá˝á˛áˇá
ááşá¸ááŻáśááťáŹá¸á ááŹááŹááťáŹá¸ á
áááşáááŻáˇáááŻáˇ ááźáąáŹááşá¸áááş ááááŻáĄááşááŤá áĄáááşá áááŻááźáąáážááşá¸ááťááşááᯠcloud áá˝ááş áĄáááşáááˇáşááŻááşááŹá¸ááąáŹ áááşááąáŹááşáážáŻáĄááźá
áş áĄááŻáśá¸ááźáŻááŤáá áááşá¸ááᯠááźááşáááşááŹáá˝ááş áĄááťáááşááźáŻááşá¸ááąá
áᏠááááŻááŤá áááŻá
áááşáááşá
áŹá¸á
ááŹááąáŹááşá¸áá˛áˇ áĄááŹáá
áşááŻááᯠááŻááşááŹáááŻááşááŤááááˇáşáááşá
source: www.habr.com
