{"id":30623,"date":"2019-10-31T21:36:34","date_gmt":"2019-10-31T18:36:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2\/"},"modified":"2019-10-31T21:36:34","modified_gmt":"2019-10-31T18:36:34","slug":"klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2","title":{"rendered":"Cluster storage for small web clusters based on drbd+ocfs2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b>What we will cover:<\/b><br \/>\nHow to quickly set up shared storage for two servers using drbd+ocfs2 solutions. <\/p>\n<p><b>Who will benefit from this:<\/b><br \/>\nThis tutorial will be useful for system administrators and anyone looking for storage implementation methods or wanting to try out the solution.<\/p>\n<h3>Which solutions we rejected and why<\/h3>\n<p>\nWe often face the situation where we need to implement shared storage with good read-write performance for a small web cluster. We tried various options for implementing shared storage for our projects, but few were able to meet multiple criteria right away. Now, we will explain why.<\/p>\n<ul>\n<li>Glusterfs did not meet our requirements for read and write performance, and there were issues with concurrent reading of a large number of files, resulting in high CPU load. The reading problem could be mitigated by directly accessing files in the bricks, but this is not always applicable and is generally incorrect. <\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>Ceph was not appealing due to its excessive complexity, which can be detrimental for projects with 2-4 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/dts-dusseldorf\/\"   title=\"servers\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3413\">servers<\/a>, especially if the project is later maintained. Again, there are serious performance limitations, forcing the construction of separate storage clusters, just like with glusterfs. <\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>Using a single NFS server for shared storage raises concerns regarding fault tolerance. <\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li> S3 is an excellent popular solution for specific tasks, but it is not a file system, which limits its applicability.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ul>\n<li>Lsyncd. Since we have started discussing 'non-file systems,' it's worth mentioning this popular solution. Not only is it unsuitable for bidirectional exchange (though it can be adapted if necessary), but it also does not work stably with a large number of files. A downside is that it is single-threaded. The reason lies in the program's architecture: it uses inotify to monitor operational objects, which are set up at launch and during rescanning. Rsync is used as the transfer medium. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Tutorial: how to set up shared storage based on drbd+ocfs2<\/h3>\n<p>\nOne of the most convenient solutions for us became the combination <b>ocfs2+drbd<\/b>Now we will explain how to quickly set up a shared storage for two <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/\"   title=\"servers\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1291\">servers<\/a> based on solution databases. But first, let's talk a bit about the components:<\/p>\n<p><b>DRBD<\/b> is a standard storage system provided by Linux that allows for data replication between servers block-wise. Its main application is in building fault-tolerant storage.<\/p>\n<p><b>OCFS2<\/b> is a file system that enables multiple systems to share the same storage. It comes included with Linux and consists of a kernel module and userspace tools for working with the file system. OCFS2 can be used not only on top of DRBD but also over iSCSI with multiple connections. In our example, we use DRBD.<\/p>\n<p>All actions are performed on Ubuntu Server 18.04 in a minimal configuration.<\/p>\n<p><b>Step 1. Configure DRBD:<br \/>\n<\/b><br \/>\nIn the file \/etc\/drbd.d\/drbd0.res, we describe our virtual block device \/dev\/drbd0:<\/p>\n<pre><code class=\"plaintext\">resource drbd0 {\n    syncer { rate 1000M; }\n    net {\n        allow-two-primaries;\n        after-sb-0pri discard-zero-changes;\n        after-sb-1pri discard-secondary;\n        after-sb-2pri disconnect;\n    }\n    startup { become-primary-on both; }\n    on drbd1 {\n        meta-disk internal;\n        device \/dev\/drbd0;\n        disk \/dev\/vdb1;\n        address 10.10.10.192:7789;\n}\n    on drbd2 {\n        meta-disk internal;\n        device \/dev\/drbd0;\n        disk \/dev\/vdb1;\n        address 10.10.10.193:7789;\n}\n}<\/code><\/pre>\n<p>\n<i>meta-disk internal<\/i> \u2014 use the same block devices to store metadata<br \/>\n<i>device \/dev\/drbd0<\/i> \u2014 use \/dev\/drbd0 as the path to DRBD.<br \/>\n<i>disk \/dev\/vdb1<\/i> \u2014 use \/dev\/vdb1 <br \/>\n<i>syncer { rate 1000M; }<\/i> \u2014 use gigabit bandwidth of the channel<br \/>\n<i>allow-two-primaries<\/i> \u2014 an important option that allows changes to be accepted on two primary servers<br \/>\n<i>after-sb-0pri, after-sb-1pri, after-sb-2pri<\/i> \u2014 options that determine the actions of a node upon detection of split brain. More details can be found in the documentation.<br \/>\n<i>become-primary-on both<\/i> \u2014 sets both nodes to primary.<\/p>\n<p>In our case, we have two absolutely identical VMs, with a dedicated virtual network bandwidth of 10 gigabits.<\/p>\n<p>In our example, the network names of the two nodes in the cluster are drbd1 and drbd2. For proper operation, it is necessary to map the names and IP addresses of the nodes in \/etc\/hosts.<\/p>\n<pre><code class=\"bash\">10.10.10.192 drbd1\n10.10.10.193 drbd2<\/code><\/pre>\n<p>\n<b>Step 2. Configure the nodes:<\/b><\/p>\n<p>On both servers, execute:<\/p>\n<pre><code class=\"bash\">drbdadm create-md drbd0<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/38b0a4a4fc60ac617abfad6e8f755ae7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<pre><code class=\"bash\">modprobe drbd\ndrbdadm up drbd0\ncat \/proc\/drbd<\/code><\/pre>\n<p>\nWe get the following:<\/p>\n<p><img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/91c48ed32cd1471e4076934d041966d8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe can start the synchronization. On the first node, you need to execute:<\/p>\n<pre><code class=\"bash\">drbdadm primary --force drbd0<\/code><\/pre>\n<p>\nCheck the status:<\/p>\n<pre><code class=\"bash\">cat \/proc\/drbd<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/b94b54b1050595bec774adf6c5190968.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGreat, synchronization has started. Wait for it to finish and see the result:<\/p>\n<p><img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/7f9e2d3664d3a578c74e72b8bc4c1a7f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Step 3. We start the synchronization on the second node:<\/b><\/p>\n<pre><code class=\"bash\">drbdadm primary --force drbd0\n<\/code><\/pre>\n<p>\nWe get the following:<\/p>\n<p><img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/ad3d616ca84fa26a18574f433bb7d9fe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNow we can write to drbd from both servers.<\/p>\n<p><b>Step 4. Installation and configuration of ocfs2.<\/b><\/p>\n<p>We will use a rather trivial configuration:<\/p>\n<pre><code class=\"plaintext\">cluster:\n     node_count = 2\n     name = ocfs2cluster\n\nnode:\n     number = 1\n     cluster = ocfs2cluster\n     ip_port = 7777\n     ip_address = 10.10.10.192\n     name = drbd1\n\nnode:\n     number = 2\n     cluster = ocfs2cluster\n     ip_port = 7777\n     ip_address = 10.10.10.193\n     name = drbd2\n<\/code><\/pre>\n<p>\nIt needs to be recorded in <i>\/etc\/ocfs2\/cluster.conf<\/i> both nodes.<\/p>\n<p>Creating a filesystem on drbd0 on any node:<\/p>\n<pre><code class=\"bash\">mkfs.ocfs2 -L \"testVol\" \/dev\/drbd0\n<\/code><\/pre>\n<p>\nHere we created a filesystem with the label testVol on drbd0, using the default parameters.<\/p>\n<p><img decoding=\"async\" alt=\"Cluster storage for small web clusters based on drbd+ocfs2\" src=\"\/wp-content\/uploads\/2019\/03\/d147b91ca6f39d846023d8b5c35a240e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn \/etc\/default\/o2cb, it is necessary to set (as in our configuration file)<\/p>\n<pre><code class=\"bash\">O2CB_ENABLED=true \nO2CB_BOOTCLUSTER=ocfs2cluster <\/code><\/pre>\n<p>\nand execute on each node:<\/p>\n<pre><code class=\"bash\">o2cb register-cluster ocfs2cluster<\/code><\/pre>\n<p>\nAfter which we enable and add to autostart all the necessary units:<\/p>\n<pre><code class=\"bash\">systemctl enable drbd o2cb ocfs2\nsystemctl start drbd o2cb ocfs2<\/code><\/pre>\n<p>\nPart of this will already be running during the setup process.<\/p>\n<p><b>Step 5. Adding mount points in fstab on both nodes:<\/b><\/p>\n<pre><code class=\"bash\">\/dev\/drbd0 \/media\/shared ocfs2 defaults,noauto,heartbeat=local 0 0<\/code><\/pre>\n<p>\nDirectory <i>\/media\/shared<\/i> this must be created in advance.<\/p>\n<p>Here we use the noauto option, which means that the filesystem will not be mounted at startup (I prefer to mount network filesystems via systemd) and heartbeat=local, which means using the heartbeat service on each node. There is also global heartbeat, which is more suitable for larger clusters.<\/p>\n<p>Next, we can mount <i>\/media\/shared<\/i> and check the synchronization of the contents.<\/p>\n<p><b>Done!<\/b> As a result, we get a more or less fault-tolerant storage system with scaling capabilities and decent performance.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/445612\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c: \u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 drbd+ocfs2. \u0414\u043b\u044f \u043a\u043e\u0433\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e: \u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041e\u0442 \u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0427\u0430\u0441\u0442\u043e \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22614,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30623","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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c: \u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 drbd+ocfs2.\" \/>\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\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 web-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 drbd+ocfs2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c: \u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 drbd+ocfs2.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2\" \/>\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-10-31T18:36:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:34+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\udd47 Cluster storage for small web clusters based on drbd+ocfs2 | ProHoster","description":"What we will talk about: How to quickly deploy shared storage for two servers based on drbd+ocfs2 solutions.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2","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\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 web-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 drbd+ocfs2 | ProHoster","og:description":"\u041e \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c: \u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 drbd+ocfs2.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/klasternoe-hranilishhe-dlya-nebolshih-web-klasterov-na-baze-drbd-ocfs2","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-10-31T18:36:34+00:00","article:modified_time":"2019-10-31T18:36:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30623","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-02-19 09:14:07","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:31:24","updated":"2026-02-19 09:14:07","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\/30623","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=30623"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30623\/revisions"}],"predecessor-version":[{"id":161788,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30623\/revisions\/161788"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/22614"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=30623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=30623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=30623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}