{"id":82113,"date":"2020-05-19T13:42:51","date_gmt":"2020-05-19T11:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql"},"modified":"2020-05-19T13:42:51","modified_gmt":"2020-05-19T11:42:51","slug":"orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql","title":{"rendered":"Orchestrator and VIP as HA solution for MySQL cluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>At Citymobil, we use a MySQL database as the primary storage for persistent data. We have several database clusters for various services and purposes.<\/p>\n<p>The constant availability of the master is a critical indicator of the overall system and its individual components' performance. Automatic recovery of the cluster in case of master failure significantly reduces incident response time and system downtime. In this article, I will discuss the high availability (HA) scheme for a MySQL cluster based on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/orchestrator\">MySQL Orchestrator<\/a><\/noindex> and virtual IP addresses (VIP).<\/p>\n<p><img decoding=\"async\" alt=\"Orchestrator and VIP as HA solution for MySQL cluster\" src=\"\/wp-content\/uploads\/2020\/05\/a76ef93caee0fc13d2afb12c25a25531.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>HA solution based on VIP<\/h1>\n<p>\nFirst, I will briefly explain what our data storage system looks like.<\/p>\n<p>We use a classic replication scheme with one writeable master and multiple replicas that are used only for reading. The cluster can contain an intermediate master\u2014 a node that is both a replica and a master for others. Clients interact with the replicas through HAProxy, which allows for even load distribution and easy scaling. The use of HAProxy is due to historical reasons, and we are currently in the process of migrating to ProxySQL.<\/p>\n<p>Replication is performed in semi-synchronous mode based on <code>GTID<\/code>. This means that at least one replica must write the transaction to the log before it is considered successful. This mode of replication provides an optimal balance between performance and data integrity in case of the primary node's failure. Mainly, all changes are transferred from the master to the replicas using <code>Row Based Replication (RBR)<\/code>, but some nodes may have <code>mixed binlog format<\/code>.<\/p>\n<p>The orchestrator periodically updates the cluster topology state, analyzes the received information, and can initiate the automatic recovery procedure in case of problems. The procedure itself is the responsibility of the developer, as it can be implemented in various ways: based on VIP, DNS, using service discovery services, or bespoke mechanisms. <\/p>\n<p>One simple way to restore the master in case of its failure is to use floating VIP addresses.<\/p>\n<p>What you need to know about this solution before moving forward:<\/p>\n<ul>\n<li>A VIP is an IP address that is not bound to a specific physical network interface. In the event of a node failure or during scheduled maintenance, we can switch the VIP to another resource with minimal downtime.\n<\/li>\n<li>Releasing and issuing a virtual IP address are cheap and quick operations.\n<\/li>\n<li>To work with VIP, SSH access to the server is required, or special utilities must be used, for example, <code>keepalived<\/code>.\n<\/li>\n<\/ul>\n<p>\nLet's consider potential issues with our master and illustrate how the automatic recovery mechanism should operate.<\/p>\n<h4>There is no network connectivity to the master, or there is a hardware-level problem, and the server is inaccessible.<\/h4>\n<p><\/p>\n<ol>\n<li>The orchestrator updates the cluster topology, each replica reports the master is unavailable. The orchestrator initiates the process of electing a replica suitable for the role of a new master and begins the recovery.\n<\/li>\n<li>We attempt to release the VIP from the old master\u2014without success.\n<\/li>\n<li>The replica switches to the role of master. The topology is reconfigured.\n<\/li>\n<li>We add a new network interface with the VIP. Since we couldn't release the VIP, we start periodically sending requests in the background. <b>gratuitous ARP<\/b>. This type of request\/response allows us to update the IP-MAC address mapping table on connected switches, thereby notifying them of our VIP\u2019s relocation. This minimizes the likelihood of a <code>split brain<\/code> when reverting to the old master. \n<\/li>\n<li>All new connections are immediately redirected to the new master. Old connections fail, leading to re-attempts to the database at the application level.\n<\/li>\n<\/ol>\n<p><\/p>\n<h4>The server operates normally, with a failure at the DBMS level.<\/h4>\n<p>\nThe algorithm is similar to the previous case: the topology is updated and the recovery process is initiated. As the server is accessible, we successfully release the VIP on the old master, transfer it to the new one, and send several ARP requests. A possible return of the old master should not affect the rebuilt cluster or the operation of the application.<\/p>\n<h4>Other issues<\/h4>\n<p>\nFailures of replicas or intermediate masters <em>do not lead<\/em> to automatic actions and require manual intervention.<\/p>\n<p>The virtual network interface is always added temporarily, meaning that after a server reboot, the VIP is not automatically assigned. Each database instance starts in read-only mode by default, and the orchestrator automatically switches the new master to write and attempts to establish <code>read only<\/code> on the old master. These actions are aimed at reducing the likelihood of <code>split brain<\/code>.<\/p>\n<p>During the recovery process, issues may arise that should also be reported through the orchestrator's UI in addition to standard monitoring tools. We have expanded the REST API to include this capability (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openark\/orchestrator\/pull\/1088\">PR<\/a><\/noindex> is currently under review).<\/p>\n<p>The overall scheme of the HA solution is presented below.<\/p>\n<p><img decoding=\"async\" alt=\"Orchestrator and VIP as HA solution for MySQL cluster\" src=\"\/wp-content\/uploads\/2020\/05\/485dbbc8f2b1a7595f5fa4f36ad92f7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h1>Choosing a new master<\/h1>\n<p>\nThe orchestrator is smart enough and tries to choose <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openark\/orchestrator\/blob\/5126b849ae4f655e1cbe0fbddfa0d7299674f712\/go\/inst\/instance_utils.go#L112\">the most suitable replica<\/a><\/noindex> as the new master based on the following criteria:<\/p>\n<ul>\n<li>the replica's lag behind the master;\n<\/li>\n<li>the MySQL version of the master and the replica;\n<\/li>\n<li>the type of replication (RBR, SBR, or mixed);\n<\/li>\n<li>the location in the same or different data centers;\n<\/li>\n<li>the presence of <code>errant GTID<\/code> \u2014 transactions that have been executed on the replica but are missing on the master;\n<\/li>\n<li>custom selection rules are also considered.\n<\/li>\n<\/ul>\n<p>\nNot every replica is an ideal candidate for the master role. For example, a replica may be used for data backup, or the server may have a weaker hardware configuration. The orchestrator <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openark\/orchestrator\/blob\/master\/docs\/topology-recovery.md#adding-promotion-rules\">the properties<\/a><\/noindex> manual rules can be used to customize your preferences for selecting candidates from the most preferred to ignored.<\/p>\n<h1>Response and recovery time<\/h1>\n<p>\nIn the event of an incident, it is important to minimize system downtime, so let's consider MySQL parameters that affect the orchestration of cluster topology building and updating:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/replication-options-slave.html#sysvar_slave_net_timeout\"><code>slave_net_timeout<\/code><\/a><\/noindex> \u2014 the number of seconds the replica waits for new data or a heartbeat signal from the master before the connection is considered lost and reconnection is performed. The smaller the value, the faster the replica can determine that the connection with the master has been disrupted. We set this value to 5 seconds.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/change-master-to.html\"><code>MASTER_CONNECT_RETRY<\/code><\/a><\/noindex> \u2014 the number of seconds between reconnection attempts. In case of network issues, a low value for this parameter will allow for quick reconnections and prevent the cluster recovery process from starting. The recommended value is 1 second.\n<\/li>\n<li><code>MASTER_RETRY_COUNT<\/code> \u2014 the maximum number of reconnection attempts. \n<\/li>\n<li><code>MASTER_HEARTBEAT_PERIOD<\/code> \u2014 the interval in seconds after which the master sends a heartbeat signal. By default, this is equal to half the value of <code>slave_net_timeout<\/code>.\n<\/li>\n<\/ul>\n<p>\nOrchestrator parameters:<\/p>\n<ul>\n<li><code>DelayMasterPromotionIfSQLThreadNotUpToDate<\/code> \u2014 if set to <code>true<\/code>, the master role will not be applied to the candidate replica until the SQL thread of the replica has executed all pending transactions from the Relay Log. We use this option to avoid losing transactions in situations where all candidate replicas are lagging behind.\n<\/li>\n<li><code>InstancePollSeconds<\/code> \u2014 the frequency of building and updating the topology.\n<\/li>\n<li><code>RecoveryPollSeconds<\/code> \u2014 the frequency of topology analysis. If an issue is detected, topology recovery is triggered. This<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/orchestrator\/blob\/548265494b3107ca2581d6ccee059e062a759b77\/go\/config\/config.go#L45\"> is a constant<\/a><\/noindex>, equal to 1 second.\n<\/li>\n<\/ul>\n<p>\nEach cluster node is polled by the orchestrator once every <code>InstancePollSeconds<\/code> seconds. When a problem is detected, the cluster state is forcibly<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/orchestrator\/blob\/548265494b3107ca2581d6ccee059e062a759b77\/go\/logic\/topology_recovery.go#L1409\"> updated<\/a><\/noindex>, and then a final decision is made about performing recovery. By experimenting with various database and orchestrator parameters, we managed to reduce the response and recovery time to 30 seconds.<\/p>\n<h1>Test Stand<\/h1>\n<p>\nWe began testing the HA scheme by developing a local <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ParshinPavel\/mysql-ha-sandbox\">test environment<\/a><\/noindex> and further implementing it into test and production environments. The local setup is fully automated based on Docker and allows for experimentation with the orchestrator and network configuration, scaling the cluster from 2-3 servers to several dozen, and conducting drills in a safe environment. <\/p>\n<p>During the drills, we choose one of the problem emulation methods: instantly kill the master using <code>kill -9<\/code>, gracefully terminate the process and stop the server (<code>docker-compose stop<\/code>), simulate network problems using <code>iptables -j REJECT<\/code> or <code>iptables -j DROP.<\/code>We expect the following results:<\/p>\n<ul>\n<li>the orchestrator will detect problems with the master and update the topology in no more than 10 seconds;\n<\/li>\n<li>the recovery procedure will initiate automatically: the network configuration will change, the master role will switch to the replica, and the topology will be rebuilt;\n<\/li>\n<li>The new master will be available for writing, and live replicas will not be lost during the rebuild process;\n<\/li>\n<li>data will start being written to the new master and replicated;\n<\/li>\n<li>the total recovery time will not exceed 30 seconds.\n<\/li>\n<\/ul>\n<p>\nAs you know, the system can behave differently in test and production environments due to variations in hardware and network configuration, differences in synthetic and real load, etc. Therefore, we periodically conduct exercises in real conditions to check how the system behaves during network connectivity loss or degradation of individual parts. In the future, we want to build a fully identical infrastructure for both environments and automate its testing.<\/p>\n<h1>Conclusions<\/h1>\n<p>\nThe operability of the main node of the storage system is one of the primary tasks of the SRE and operations team. Implementing an orchestrator and HA solution based on a VIP has yielded the following results:<\/p>\n<ul>\n<li>reliable detection of issues with the database cluster topology;\n<\/li>\n<li>automated and rapid response to incidents related to the master, which reduces system downtime.\n<\/li>\n<\/ul>\n<p>\nHowever, the solution has its limitations and drawbacks:<\/p>\n<ul>\n<li>scaling the HA scheme across multiple data centers will require a unified L2 network between them;\n<\/li>\n<li>before assigning the VIP on the new master, we need to free it on the old one. The process is sequential, which increases recovery time;\n<\/li>\n<li>releasing the VIP requires SSH access to the server, or some other method of invoking remote procedures. Since the server or database is experiencing issues that initiated the recovery process, we cannot be sure that releasing the VIP will be successful. This could lead to two servers having the same virtual IP address and resulting problems. <code>split brain<\/code>.\n<\/li>\n<\/ul>\n<p>\nTo avoid <code>split brain<\/code>, one can use the method <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/STONITH\">STONITH<\/a><\/noindex> ('Shoot The Other Node In The Head'), which completely isolates or disconnects the problematic node. There are other ways to implement high availability for a cluster: a combination of VIP and DNS, service discovery and proxy services, synchronous replication, and other methods that have their own drawbacks and advantages.<\/p>\n<p>I spoke about our approach to creating a fault-tolerant MySQL cluster. It is easy to implement and provides an acceptable level of reliability under current conditions. As the entire system and infrastructure develop, this approach will undoubtedly evolve.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/491044\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 MySQL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u0446\u0435\u043b\u0438. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0435\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u0430\u0437\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u0438 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82114,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82113","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0412 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 MySQL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\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\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql\" \/>\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\udd47Orchestrator \u0438 VIP \u043a\u0430\u043a HA-\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 MySQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 MySQL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql\" \/>\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=\"2020-05-19T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-19T11:42:51+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\udd47Orchestrator and VIP as an HA solution for MySQL cluster | ProHoster","description":"At Citymobil, we use MySQL database as the primary storage for persistent data.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql","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\udd47Orchestrator \u0438 VIP \u043a\u0430\u043a HA-\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 MySQL | ProHoster","og:description":"\u0412 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 MySQL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/orchestrator-i-vip-kak-ha-reshenie-dlya-klastera-mysql","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":"2020-05-19T11:42:51+00:00","article:modified_time":"2020-05-19T11:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82113","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:44:23","updated":"2022-09-28 00:08:45","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\/82113","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=82113"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/82113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/82114"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=82113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=82113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=82113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}