{"id":54366,"date":"2019-12-24T00:00:00","date_gmt":"2019-12-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster"},"modified":"2020-02-18T14:02:22","modified_gmt":"2020-02-18T11:02:22","slug":"kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hello, Habr readers. Today, the classes for the first group of the course begin. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u2018PostgreSQL\u2019<\/a><\/noindex>In this regard, we want to tell you about how the open webinar for this course went.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">the next open lesson<\/a><\/noindex> we talked about the challenges SQL databases face in the era of clouds and Kubernetes. We also examined how SQL databases adapt and mutate in response to these challenges.<\/p>\n<p>The webinar was conducted by <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valery Bezrukov<\/a><\/noindex>, Google Cloud Practice Delivery Manager at EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Once upon a time when the trees were small...<\/h3>\n<p>\nTo begin with, let's remember how the choice of DBMS started at the end of the last century. In fact, it won't be difficult, as the selection of DBMSs during that time began and ended <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn the late 90s to early 2000s, there wasn't much choice in terms of industrial scalable databases. Yes, there were IBM DB2, Sybase, and a few other databases that appeared and disappeared, but overall they were not very noticeable against the backdrop of Oracle. Consequently, the skills of engineers at that time were largely tied to the single choice that existed.<\/p>\n<p>An Oracle DBA had to be able to:<\/p>\n<ul>\n<li> install Oracle Server from the distribution;<\/li>\n<li> configure Oracle Server:<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora;<\/li>\n<li>listener.ora;<\/li>\n<\/ul>\n<p>\n\u2014 create:<\/p>\n<ul>\n<li>tablespaces;<\/li>\n<li>schemas;<\/li>\n<li>users;<\/li>\n<\/ul>\n<p>\u2014 perform backup and recovery;<br \/>\n\u2014 carry out monitoring;<br \/>\n\u2014 tackle suboptimal queries.<\/p>\n<p>At the same time, Oracle DBAs were not particularly required to:<\/p>\n<ul>\n<li>choose the optimal DBMS or other data storage and processing technology;<\/li>\n<li>ensure high availability and horizontal scalability (this was not always the DBA's concern);<\/li>\n<li>have a deep knowledge of the subject area, infrastructure, application architecture, OS;<\/li>\n<li>perform data loading and unloading, data migration between different DBMSs.<\/li>\n<\/ul>\n<p>In general, speaking about choices at that time, it resembles the selection in a Soviet store in the late 80s:<\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Our Time<\/h3>\n<p>\nSince then, of course, the trees have grown, the world has changed, and it has become somewhat like this:<\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe DBMS market has changed as well, which is clearly visible in the recent report from Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt should be noted that clouds have taken their niche, the popularity of which is growing. If you read the same Gartner report, we see the following conclusions:<\/p>\n<ol>\n<li>Many clients are in the process of migrating their applications to the cloud. <\/li>\n<li>New technologies first appear in the cloud, and it's not certain that they will ever migrate to on-premises infrastructure.<\/li>\n<li>The pay-as-you-go pricing model has become commonplace. Everyone wants to pay only for what they use, which is no longer a trend but a mere reality. <\/li>\n<\/ol>\n<p><\/p>\n<h3>What's next?<\/h3>\n<p>\nToday, we are all in the cloud. The questions we encounter are questions of choice. And that choice is vast, even if we focus only on the selection of database technologies in an on-premises format. Furthermore, we have managed services and SaaS. Thus, the selection process becomes increasingly complex each year.<\/p>\n<p>Along with the questions of choice, there are also <b>restrictive factors<\/b>:<\/p>\n<ul>\n<li><b>price<\/b>. Many technologies still come with a price tag;<\/li>\n<li><b>skills<\/b>. When discussing open-source software, the question of skills arises, as free software requires sufficient competence from those who implement and operate it;<\/li>\n<li><b>functionality<\/b>. Not all services available in the cloud, even those built on the same Postgres base, offer the same features as Postgres On-premises. This is a significant factor that needs to be known and understood. Moreover, this factor becomes more crucial than knowledge of some hidden capabilities of a specific database system. <\/li>\n<\/ul>\n<p>\n<b>What is expected now from DA\/DE:<\/b><\/p>\n<ul>\n<li>a good understanding of the subject area and applied architecture;<\/li>\n<li>the ability to correctly choose the appropriate database technology based on the assigned task;<\/li>\n<li>the ability to select the optimal implementation method for the chosen technology considering the existing constraints;<\/li>\n<li>the ability to carry out data transfer and migration;<\/li>\n<li>the ability to implement and operate the chosen solutions.<\/li>\n<\/ul>\n<p>\nThe following example <b>based on GCP<\/b> demonstrates how the choice of a specific data technology is structured based on their architecture:<\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNote that PostgreSQL is absent from the diagram, simply because it is hidden under the terminology <b>Cloud SQL<\/b>. When we enter Cloud SQL, we need to make a choice again:<\/p>\n<p><img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt should be noted that this choice isn't always clear, so application developers often rely on intuition. <\/p>\n<p><b>Total:<\/b><\/p>\n<ol>\n<li>The further we go, the more relevant the question of choice becomes. Even when looking solely at GCP, managed services, and SaaS, mentions of RDBMS only arise at the fourth step (where Spanner is next to it). Additionally, the option for PostgreSQL appears only at the fifth step, alongside MySQL and SQL Server. <b>There is a lot to choose from, but you have to choose wisely.<\/b>. <\/li>\n<li>We must not forget about the limitations amid temptations. Primarily, everyone wants Spanner, but it is expensive. As a result, a typical request looks something like this: <i>\"Can you please give us Spanner but at the price of Cloud SQL, come on, you're professionals!\"<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>So, what to do?<\/h3>\n<p>\nWithout claiming to be the ultimate authority, let's say the following:<\/p>\n<p><b>We need to change the approach to education:<\/b><\/p>\n<ul>\n<li>Teaching as DBA used to be taught no longer makes sense;<\/li>\n<li>Knowledge of a single product is now insufficient;<\/li>\n<li>and knowing dozens at the level of one is impossible.<\/li>\n<\/ul>\n<p>\nYou need to know not only the product but also:<\/p>\n<ul>\n<li>its use case;<\/li>\n<li>different deployment methods;<\/li>\n<li>the advantages and disadvantages of each method;<\/li>\n<li>similar and alternative products to make an informed and optimal choice, not always in favor of the familiar product.<\/li>\n<\/ul>\n<p>\nAlso, you need to be able to migrate data and understand the basic principles of integration with ETL.<\/p>\n<h3>A real case<\/h3>\n<p>\nRecently, I had to create a backend for a mobile application. By the time we started working on it, the backend had already been developed and was ready for deployment, and the development team spent about two years on this project. The following tasks were set:<\/p>\n<ul>\n<li>build CI\/CD;<\/li>\n<li>conduct an architecture review;<\/li>\n<li>launch everything into production. <\/li>\n<\/ul>\n<p>\nThe application itself was microservices-based, and the code was written in Python\/Django from scratch directly in GCP. As for the target audience, it was assumed that there would be two regions \u2014 US and EU, with traffic distributed via a Global Load Balancer. All workloads and computational loads operated in Google Kubernetes Engine. <\/p>\n<p>Regarding data, there were 3 structures:<\/p>\n<ul>\n<li>Cloud Storage;<\/li>\n<li>Datastore;<\/li>\n<li>Cloud SQL (PostgreSQL).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"How to survive an SQL database in the 21st century: clouds, Kubernetes, and PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOne might wonder why Cloud SQL was chosen? Frankly, in recent years, this question causes an awkward pause \u2014 it feels like people have become shy about relational databases, yet they continue to use them actively ;-). <\/p>\n<p>In our case, Cloud SQL was chosen for the following reasons:<\/p>\n<ol>\n<li>As mentioned, the application was developed using Django, which has a model for mapping persistent data from the SQL database to Python objects (Django ORM).<\/li>\n<li>The framework itself supported a sufficiently limited list of DBMSs:<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>PostgreSQL;<\/li>\n<li>MariaDB;<\/li>\n<li>MySQL;<\/li>\n<li>Oracle;<\/li>\n<li>SQLite.<\/li>\n<\/ul>\n<p>\nAccordingly, PostgreSQL was chosen from this list rather intuitively (after all, who would choose Oracle?).<\/p>\n<p><b>What was lacking:<\/b><\/p>\n<ul>\n<li>the application was deployed in only 2 regions, while plans included a 3rd (Asia);<\/li>\n<li>The database was located in the North American region (Iowa);<\/li>\n<li>the client expressed concerns about potential <b>access delays<\/b> from Europe and Asia and <b>service interruptions <\/b><b>in the event of database downtime.<\/b> Despite the fact that Django itself can work with multiple databases simultaneously and separate them by read and write, the number of records in the application was not that large (over 90% were reads). Overall, if it was possible to create <\/li>\n<\/ul>\n<p>\nread-replicas of the main database in Europe and Asia, <b>this would be a compromise solution. But what\u2019s so complicated about that?<\/b>The complexity lay in the fact that the client did not want to give up using managed services and Cloud SQL. Currently, the capabilities of Cloud SQL are limited. Cloud SQL supports High Availability (HA) and Read Replica (RR), but the RR is only supported in one region. Creating a database in the American region and making a read-replica in the European region with Cloud SQL is not possible, although PostgreSQL itself does not prevent this. Correspondence with Google employees led to nothing, ending with promises like \"we know the problem and are working on it; someday this issue will be resolved.\"<\/p>\n<p>If we list the capabilities of Cloud SQL in bullet points, it would look approximately like this: <\/p>\n<p>1. High availability (HA):<\/p>\n<p><b>within a single region;<\/b><\/p>\n<ul>\n<li>through disk replication;<\/li>\n<li>PostgreSQL mechanisms are not used;<\/li>\n<li>automatic and manual management is possible \u2014 failover\/failback;<\/li>\n<li>the database is unavailable for a few minutes during the switch.<\/li>\n<li>2. Read Replica (RR):<\/li>\n<\/ul>\n<p>\n<b>hot standby;<\/b><\/p>\n<ul>\n<li>through disk replication;<\/li>\n<li>PostgreSQL streaming replication.<\/li>\n<li>Additionally, as is usual, when choosing a technology, you always encounter some<\/li>\n<\/ul>\n<p>\nlimitations. <b>The client did not want to create entities or use IaaS, except through GKE;<\/b>:<\/p>\n<ul>\n<li>the client would not want to deploy self-service PostgreSQL\/MySQL;<\/li>\n<li>and overall, Google Spanner would have been suitable if not for its price; however, Django ORM cannot work with it, but it's quite a good tool.<\/li>\n<li>Given the situation, the client posed a trick question:<\/li>\n<\/ul>\n<p>\n\"Can you create something similar that works like Google Spanner but also works with Django ORM?\" <i>Solution Option No. 0<\/i><\/p>\n<h3>The first thought that came to mind was:<\/h3>\n<p>\nto stay within CloudSQL;<\/p>\n<ul>\n<li>there will be no built-in replication between regions in any form;<\/li>\n<li>There will be no built-in replication between regions in any form;<\/li>\n<li>attempt to attach a replica to an existing Cloud SQL by PostgreSQL;<\/li>\n<li>somewhere and somehow launch a PostgreSQL instance, but at least not touch the master.<\/li>\n<\/ul>\n<p>\nUnfortunately, it turned out that this was not possible, as there was no access to the host (it's in a completely different project) \u2014 pg_hba and so on, and also there was no superuser access.<\/p>\n<h3>Solution option #1<\/h3>\n<p>\nAfter further reflection and considering the previous circumstances, the line of thought has changed somewhat:<\/p>\n<ul>\n<li>we still try to stay within CloudSQL, but switch to MySQL, as Cloud SQL by MySQL has an external master that:<\/li>\n<\/ul>\n<p>\n\u2014 acts as a proxy for the external MySQL;<br \/>\n\u2014 looks like a MySQL instance;<br \/>\n\u2014 is designed for migrating data from other clouds or on-premises.<\/p>\n<p>Since configuring MySQL replication does not require access to the host, everything worked in principle, but it was very unstable and inconvenient. And when we went further, it became downright scary, as we were deploying the entire structure with Terraform, and it turned out that the external master was not supported by Terraform. Yes, Google has a CLI, but for some reason, everything worked sporadically \u2014 sometimes it was created, sometimes it wasn't. Perhaps because the CLI was designed for migrating data from the outside and not for replicas.<\/p>\n<p>Actually, it became clear that Cloud SQL is not suitable at all. As they say, we did everything we could. <\/p>\n<h3>Solution option #2<\/h3>\n<p>\nSince we couldn't stay within Cloud SQL, we tried to formulate the requirements for a compromise solution. The requirements turned out to be as follows:<\/p>\n<ul>\n<li>Working in Kubernetes, maximizing the resources and capabilities of Kubernetes (DCS, ...) and GCP (LB, ...);<\/li>\n<li>absence of ballast in the form of a bunch of unnecessary cloud things like HA proxy;<\/li>\n<li>the ability to run HA PostgreSQL or MySQL in the main region; in other regions \u2014 HA from the primary region's RR plus its copy (for reliability);<\/li>\n<li>multi-master (didn't really want to connect with it, but it wasn't very critical)<\/li>\n<\/ul>\n<p>. <br \/>\nAs a result of these requirements, suitable database and wrapper options finally appeared on the horizon<b>MySQL Galera;<\/b>:<\/p>\n<ul>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL tools<\/li>\n<li>\u2014 pgpool-II;<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 Patroni.<br \/>\nMySQL Galera<\/p>\n<h3>The MySQL Galera technology was developed by Codership and represents a plugin for InnoDB. Features:<\/h3>\n<p>\nmulti-master;<\/p>\n<ul>\n<li>synchronous replication;<\/li>\n<li>reading from any node;<\/li>\n<li>writing to any node;<\/li>\n<li>built-in HA mechanism;<\/li>\n<li>there's a Helm chart from Bitnami.<\/li>\n<li>There is a Helm chart from Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nDescribed as truly impressive, this is an open-source project written in Go. Its main contributor is Cockroach Labs (founded by former Google employees). This relational database management system (RDBMS) was initially created to be distributed (with horizontal scaling 'out of the box') and fault-tolerant. Its authors have aimed to 'combine the richness of SQL functionality with the horizontal availability typical of NoSQL solutions.'<\/p>\n<p>A nice bonus is the support for the PostgreSQL connection protocol. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nThis is a layer on top of PostgreSQL, essentially a new entity that takes on all connections and processes them. It has its own load balancer and parser, licensed under the BSD license. It offers wide capabilities, but may appear somewhat daunting due to the introduction of a new entity which could lead to additional challenges. <\/p>\n<h3>Patroni<\/h3>\n<p>\nThis was the last thing I looked at, and as it turned out, it was worth it. Patroni is an open-source utility that, in essence, is a daemon in Python that allows automatic management of PostgreSQL clusters with various types of replication and automatic role switching. It turned out to be quite interesting, as it integrates well with Kubernetes and does not introduce any new entities. <\/p>\n<h3>So what did we end up choosing?<\/h3>\n<p>\nThe choice was not easy:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 it's great, but a bit risky;<\/li>\n<li><b>The MySQL Galera technology was developed by Codership and represents a plugin for InnoDB. Features:<\/b> \u2014 also not bad, widely used, but MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 lots of unnecessary entities, mediocre integration with the cloud and K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 excellent integration with K8s, no unnecessary entities, integrates well with GCP LB.<\/li>\n<\/ol>\n<p>\nThus, the choice fell on Patroni. <\/p>\n<h3>Conclusions<\/h3>\n<p>\nIt's time to summarize briefly. Yes, the world of IT infrastructure has changed significantly, and this is just the beginning. If before, clouds were merely another type of infrastructure, now everything is different. Moreover, innovations in clouds are constantly emerging, and they may only appear in clouds first and later be adapted by startups for on-premises solutions.<\/p>\n<p>As for SQL, SQL will live on. This means that one must know PostgreSQL and MySQL and be able to work with them, but even more importantly, one must know how to apply them correctly.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/481644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c SQL-\u0431\u0430\u0437\u044b \u0432 \u044d\u0440\u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0438 Kubernetes. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQL \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54366","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47How to Survive SQL Databases in the 21st Century: Clouds, Kubernetes, and PostgreSQL Multimaster | ProHoster","description":"Hello, Habr users. Today marks the start of classes in the first group of the 'PostgreSQL' course.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54366","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":null,"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,"seo_analyzer_scan_date":"2026-01-24 11:06:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:30:12","updated":"2026-01-24 11:06:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}