{"id":53611,"date":"2019-12-06T00:00:00","date_gmt":"2019-12-05T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1"},"modified":"2020-02-18T14:01:32","modified_gmt":"2020-02-18T11:01:32","slug":"legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e1r \u00edrtunk a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>-r\u00f3l, amely lehet\u0151v\u00e9 teszi elosztott alkalmaz\u00e1sok fejleszt\u00e9s\u00e9t \u00e9s csomagol\u00e1s\u00e1t. M\u00e1r csak egy l\u00e9p\u00e9s van h\u00e1tra: megtanulni, hogyan telep\u00edts\u00fck ezeket az alkalmaz\u00e1sokat \u00e9s kezelj\u00fck \u0151ket. Ne agg\u00f3djon, mindent el\u0151re l\u00e1ttunk! \u00d6sszegy\u0171jt\u00f6tt\u00fck a Tarantool Cartridge haszn\u00e1lat\u00e1nak legjobb gyakorlatait \u00e9s \u00edrtunk egy <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">ansible-szerepr\u0151l<\/a><\/noindex>, amely telep\u00edti a csomagot a szerverekre, elind\u00edtja az instanci\u00e1kat, klaszterbe egyes\u00edti \u0151ket, be\u00e1ll\u00edtja a hiteles\u00edt\u00e9st, elkezdi a vshard-ot, aktiv\u00e1lja az automatikus hibajav\u00edt\u00e1st \u00e9s friss\u00edti a klaszter konfigur\u00e1ci\u00f3t.<\/p>\n<p><\/p>\n<p>\u00c9rdekes? Akkor j\u00f6jj\u00f6n, mindent elmondunk \u00e9s megmutatunk.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Kezdj\u00fck egy p\u00e9ld\u00e1val<\/h1>\n<p><\/p>\n<p>Csak a szerep\u00fcnk funkcionalit\u00e1s\u00e1nak egy r\u00e9sz\u00e9t fogjuk megvizsg\u00e1lni. A szerep \u00f6sszes lehet\u0151s\u00e9g\u00e9nek \u00e9s bemeneti param\u00e9ter\u00e9nek teljes le\u00edr\u00e1s\u00e1t mindig megtal\u00e1lja a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">dokument\u00e1ci\u00f3<\/a><\/noindex>. De jobb egyszer kipr\u00f3b\u00e1lni, mint sz\u00e1zszor l\u00e1tni, ez\u00e9rt telep\u00edts\u00fcnk egy kis alkalmaz\u00e1st.<\/p>\n<p><\/p>\n<p>A Tarantool Cartridge rendelkezik <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/cartridge-cli\/tree\/master\/examples\/getting-started-app#application-example-based-on-tarantool-cartridge\">tutori\u00e1l<\/a><\/noindex> egy kis Cartridge-alkalmaz\u00e1s l\u00e9trehoz\u00e1s\u00e1hoz, amely t\u00e1rolja a bank \u00fcgyfeleinek \u00e9s sz\u00e1ml\u00e1inak adatait, valamint API-t k\u00edn\u00e1l az adatok HTTP-n kereszt\u00fcli kezel\u00e9s\u00e9re. Ehhez az alkalmaz\u00e1sban k\u00e9t lehets\u00e9ges szerepet \u00edrunk le, <code>api<\/code> \u00e9s <code>t\u00e1rol\u00e1s<\/code>, amelyek az instanci\u00e1khoz rendelhet\u0151k.<\/p>\n<p><\/p>\n<p>A Cartridge nem mond semmit arr\u00f3l, hogyan kell a folyamatokat elind\u00edtani, csup\u00e1n lehet\u0151s\u00e9get biztos\u00edt a m\u00e1r elind\u00edtott instanci\u00e1k konfigur\u00e1l\u00e1s\u00e1hoz. A t\u00f6bbit a felhaszn\u00e1l\u00f3nak kell elv\u00e9geznie: a konfigur\u00e1ci\u00f3s f\u00e1jlok telep\u00edt\u00e9se, a szolg\u00e1ltat\u00e1sok elind\u00edt\u00e1sa \u00e9s a topol\u00f3gia be\u00e1ll\u00edt\u00e1sa. De mi nem fogunk mindezzel foglalkozni, ezt elv\u00e9gzi helyett\u00fcnk az Ansible.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Szavakb\u00f3l tettek<\/h3>\n<p><\/p>\n<p>Teh\u00e1t telep\u00edts\u00fck alkalmaz\u00e1sunkat k\u00e9t virtu\u00e1lis g\u00e9pre, \u00e9s \u00e1ll\u00edtsunk be egy egyszer\u0171 topol\u00f3gi\u00e1t:<\/p>\n<p><\/p>\n<ul>\n<li>Replikak\u00e9szlet <code>app-1<\/code> azt a szerepet fogja bet\u00f6lteni, <code>api<\/code>, amely tartalmazza a szerepet <code>vshard-router<\/code>. Itt csak egy instancia lesz.<\/li>\n<li>Replikak\u00e9szlet <code>storage-1<\/code> bet\u00f6lti a szerepet <code>t\u00e1rol\u00e1s<\/code> (egyetlen <code>vshard-storage<\/code>), ide k\u00e9t instanci\u00e1t fogunk hozz\u00e1adni k\u00fcl\u00f6nb\u00f6z\u0151 g\u00e9pekr\u0151l.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A p\u00e9lda futtat\u00e1s\u00e1hoz sz\u00fcks\u00e9g\u00fcnk lesz <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (2.8-as vagy \u00fajabb verzi\u00f3j\u00fa).<\/p>\n<p><\/p>\n<p>A szerep mag\u00e1ban tal\u00e1lhat\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. Ez egy olyan t\u00e1rol\u00f3, amely lehet\u0151v\u00e9 teszi az egy\u00e9ni munk\u00e1k megoszt\u00e1s\u00e1t \u00e9s k\u00e9sz szerepek haszn\u00e1lat\u00e1t.<\/p>\n<p><\/p>\n<p>Kl\u00f3nozzuk a p\u00e9ld\u00e1t tartalmaz\u00f3 t\u00e1rol\u00f3t:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/dokshina\/deploy-tarantool-cartridge-app.git\n$ cd deploy-tarantool-cartridge-app &amp;&amp; git checkout 1.0.0<\/code><\/pre>\n<p><\/p>\n<p>Emelj\u00fck a virtu\u00e1lis g\u00e9peket:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Telep\u00edts\u00fck a Tarantool Cartridge ansible-szerepet:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-galaxy install tarantool.cartridge,1.0.1<\/code><\/pre>\n<p><\/p>\n<p>Futtassuk az telep\u00edtett szerepet:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>V\u00e1rjuk meg a playbook v\u00e9grehajt\u00e1s\u00e1nak befejez\u00e9s\u00e9t, majd t\u00e9rj\u00fcnk \u00e1t a <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> \u00e9s \u00e9lvezz\u00fck az eredm\u00e9nyt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az adatokat lehet t\u00e1pl\u00e1lni. H\u0171, igaz?<\/p>\n<p><\/p>\n<p>Most n\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dik ez, \u00e9s k\u00f6zben hozz\u00e1adunk egy \u00faj replikak\u00e9szletet a topol\u00f3gi\u00e1hoz.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Kezdj\u00fck a r\u00e9szletez\u00e9st<\/h3>\n<p><\/p>\n<p>Teh\u00e1t mi t\u00f6rt\u00e9nt?<\/p>\n<p><\/p>\n<p>Feltett\u00fcnk k\u00e9t virtu\u00e1lis g\u00e9pet \u00e9s futtattunk egy ansible-playbookot, amely be\u00e1ll\u00edtotta a klasztert. N\u00e9zz\u00fck meg a f\u00e1jl tartalm\u00e1t <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Telep\u00edtse a Tarantool Cartridge alkalmaz\u00e1somat\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Tarantool Cartridge szerep import\u00e1l\u00e1sa\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>Itt nem t\u00f6rt\u00e9nik semmi \u00e9rdekes, futtatjuk az ansible-szerepet, amelynek neve <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Mindez a legfontosabb (nevezetesen, a klaszter konfigur\u00e1ci\u00f3ja) a k\u00f6vetkez\u0151 helyen tal\u00e1lhat\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventory<\/a><\/noindex>-f\u00e1jlban <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # k\u00f6z\u00f6s klaszter v\u00e1ltoz\u00f3k\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\\\/getting-started-app-1.0.0-0.rpm  # csomag el\u00e9r\u00e9si \u00fat\n\n    cartridge_cluster_cookie: app-default-cookie  # klaszter s\u00fcti\n\n    # k\u00f6z\u00f6s ssh be\u00e1ll\u00edt\u00e1sok\n    ansible_ssh_private_key_file: ~\\\/vagrant.d\\\/insecure_private_key\n    ansible_ssh_common_args: '-o IdentitiesOnly=yes -o UserKnownHostsFile=\\\/dev\\\/null -o StrictHostKeyChecking=no'\n\n  # INSTANCIAK\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n    app-1:\n      config:\n        advertise_uri: '172.19.0.3:3301'\n        http_port: 8182\n\n    storage-1-replica:\n      config:\n        advertise_uri: '172.19.0.3:3302'\n        http_port: 8183\n\n  children:\n    # Csoportos\u00edtsa az INSTANCIAKAT G\u00c9PEK ALAPJ\u00c1N\n    host1:\n      vars:\n        # els\u0151 g\u00e9p kapcsolati be\u00e1ll\u00edt\u00e1sai\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # p\u00e9ld\u00e1nyok, amelyeket az els\u0151 g\u00e9pen ind\u00edtunk\n        storage-1:\n\n    host2:\n      vars:\n        # m\u00e1sodik g\u00e9p kapcsolati be\u00e1ll\u00edt\u00e1sai\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # p\u00e9ld\u00e1nyok, amelyeket a m\u00e1sodik g\u00e9pen ind\u00edtunk\n        app-1:\n        storage-1-replica:\n\n    # Csoportos\u00edtsa az INSTANCIAKAT REPLIKAK\u00c9SZLETEK ALAPJ\u00c1N\n    replicaset_app_1:\n      vars:  # replikak\u00e9szlet konfigur\u00e1ci\u00f3\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # vezet\u0151\n        roles:\n          - 'api'\n\n      hosts:  # replikak\u00e9szlet p\u00e9ld\u00e1nyai\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # replikak\u00e9szlet konfigur\u00e1ci\u00f3\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # vezet\u0151\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # replikak\u00e9szlet p\u00e9ld\u00e1nyai\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Minden, amire sz\u00fcks\u00e9g\u00fcnk van - az a p\u00e9ld\u00e1nyok \u00e9s replikak\u00e9szletek kezel\u00e9se a f\u00e1jl tartalm\u00e1nak m\u00f3dos\u00edt\u00e1s\u00e1val. Tov\u00e1bb\u00e1 \u00faj szakaszokat fogunk hozz\u00e1adni. Hogy ne zavarodjunk \u00f6ssze, hivatkozhatsz a f\u00e1jl v\u00e9gs\u0151 verzi\u00f3j\u00e1ra, <code>hosts.updated.yml<\/code>, ami a p\u00e9lda t\u00e1rol\u00f3j\u00e1ban tal\u00e1lhat\u00f3.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Instance-ok kezel\u00e9se<\/h3>\n<p><\/p>\n<p>Az Ansible terminol\u00f3gi\u00e1j\u00e1ban minden p\u00e9ld\u00e1ny egy host (ne keverd \u00f6ssze a fizik\u00e1lis szerverrel), azaz egy olyan infrastrukt\u00fara csom\u00f3pont, amelyet az Ansible kezelni fog. Minden hosthoz megadhatjuk a kapcsolati param\u00e9tereket (mint p\u00e9ld\u00e1ul <code>ansible_host<\/code> \u00e9s <code>ansible_user<\/code>), valamint az instance konfigur\u00e1ci\u00f3j\u00e1t. Az instance-okk le\u00edr\u00e1sa a szekci\u00f3ban tal\u00e1lhat\u00f3 <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg az instance konfigur\u00e1ci\u00f3j\u00e1t <code>storage-1<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCES\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Az <code>config<\/code> megadtuk az instance param\u00e9tereit \u2014 <code>advertise URI<\/code> \u00e9s <code>HTTP port<\/code>.<br \/>\nAz al\u00e1bbiakban tal\u00e1lhat\u00f3k az instance-ok param\u00e9terei <code>app-1<\/code> \u00e9s <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Azt kell k\u00f6z\u00f6ln\u00fcnk az Ansible-nek, hogy az egyes instance-ok csatlakoz\u00e1si param\u00e9terei mik. Logikusnak t\u0171nik, hogy az instance-okat virtu\u00e1lis g\u00e9pek szerint csoportos\u00edtsuk. Ennek \u00e9rdek\u00e9ben az instance-okat csoportokba soroltuk <code>host1<\/code> \u00e9s <code>host2<\/code>, \u00e9s minden csoportban a szekci\u00f3ban <code>vars<\/code> jelennek meg az \u00e9rt\u00e9kek <code>ansible_host<\/code> \u00e9s <code>ansible_user<\/code> egy virtu\u00e1lis g\u00e9phez. A szekci\u00f3ban pedig <code>hosts<\/code> a hostok (azaz az instance-ok), amelyek ebbe a csoportba tartoznak:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # Csoportos\u00edt\u00e1s g\u00e9pek szerint\n    host1:\n      vars:\n        # els\u0151 g\u00e9p csatlakoz\u00e1si opci\u00f3i\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # instance-ok, amelyeket az els\u0151 g\u00e9pen ind\u00edtanak\n        storage-1:\n\n     host2:\n      vars:\n        # m\u00e1sodik g\u00e9p csatlakoz\u00e1si opci\u00f3i\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # instance-ok, amelyeket a m\u00e1sodik g\u00e9pen ind\u00edtanak\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Kezd\u00fcnk v\u00e1ltoztatni <code>hosts.yml<\/code>. K\u00e9t \u00faj instance-ot adunk hozz\u00e1, <code>storage-2-replica<\/code> az els\u0151 virtu\u00e1lis g\u00e9pen \u00e9s <code>storage-2<\/code> a m\u00e1sodikon:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCES\n  hosts:\n    ...\n    storage-2:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.3:3303'\n        http_port: 8184\n\n    storage-2-replica:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.2:3302'\n        http_port: 8185\n\n  children:\n    # Csoportos\u00edt\u00e1s g\u00e9pek szerint\n    host1:\n      vars:\n        ...\n      hosts:  # instance-ok, amelyeket az els\u0151 g\u00e9pen ind\u00edtanak\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # instance-ok, amelyeket a m\u00e1sodik g\u00e9pen ind\u00edtanak\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Elind\u00edtjuk az ansible playbook-ot:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit storage-2,storage-2-replica \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Figyelj\u00fcnk az opci\u00f3ra <code>--limit<\/code>. Mivel minden cluster instance egy host az Ansible szempontj\u00e1b\u00f3l, vil\u00e1gosan jelezhetj\u00fck, hogy mely instance-okat kell be\u00e1ll\u00edtani a playbook futtat\u00e1sakor.<\/p>\n<p><\/p>\n<p>Ism\u00e9t bel\u00e9p\u00fcnk a Web UI-ba <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> \u00e9s figyelj\u00fck az \u00faj instance-ainkat:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne \u00e1lljunk meg itt, ismerkedj\u00fcnk meg a topol\u00f3gia kezel\u00e9s\u00e9vel.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Topol\u00f3gia kezel\u00e9se<\/h3>\n<p><\/p>\n<p>Csoportos\u00edtsuk \u00faj instance-ainkat replik\u00e1ci\u00f3s k\u00e9szletbe <code>storage-2<\/code>. Hozz\u00e1adunk egy \u00faj csoportot <code>replicaset_storage_2<\/code> \u00e9s a v\u00e1ltoz\u00f3i k\u00f6z\u00f6tt le\u00edrjuk a replik\u00e1ci\u00f3s k\u00e9szlet param\u00e9tereit a k\u00f6vetkez\u0151k\u00e9ppen, mint a <code>replicaset_storage_1<\/code>. A szakaszban <code>hosts<\/code> megadjuk, hogy mely instance-ok tartoznak ebbe a csoportba (azaz a replik\u00e1ci\u00f3s k\u00e9szlet\u00fcnk):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # INSTANCIAK CSOPORTOS\u00cdT\u00c1SA REPLIKA K\u00c9SZLET SZERINT\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # replika k\u00e9szlet konfigur\u00e1ci\u00f3\n        replicaset_alias: storage-2\n        weight: 2\n        failover_priority:\n          - storage-2\n          - storage-2-replica\n        roles:\n          - 'storage'\n\n      hosts:   # replika k\u00e9szlet p\u00e9ld\u00e1nyok\n        storage-2:\n        storage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>\u00dajra futtatjuk a playbookot:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit replicaset_storage_2 \n                   --tags cartridge-replicasets \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>A param\u00e9terben <code>--limit<\/code> ez\u00fattal a csoport nev\u00e9t adtuk meg, amely megfelel a replika k\u00e9szlet\u00fcnknek.<\/p>\n<p><\/p>\n<p>Vizsg\u00e1ljuk meg az opci\u00f3t <code>c\u00edmk\u00e9k<\/code>.<\/p>\n<p><\/p>\n<p>A szerep\u00fcnk k\u00fcl\u00f6nb\u00f6z\u0151 feladatokat hajt v\u00e9gre, amelyeket a k\u00f6vetkez\u0151 c\u00edmk\u00e9k jel\u00f6lnek:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: p\u00e9ld\u00e1nyok kezel\u00e9se (be\u00e1ll\u00edt\u00e1s, csatlakoz\u00e1s a tags\u00e1ghoz);<\/li>\n<li><code>cartridge-replicasets<\/code>: topol\u00f3gia kezel\u00e9se (replika k\u00e9szletek kezel\u00e9se \u00e9s p\u00e9ld\u00e1nyok v\u00e9glegesen elt\u00e1vol\u00edt\u00e1sa (expel) a klaszterb\u0151l);<\/li>\n<li><code>cartridge-config<\/code>: a klaszter t\u00f6bbi param\u00e9ter\u00e9nek kezel\u00e9se (vshard bootstrapping, automatikus failover m\u00f3d, hiteles\u00edt\u00e9si param\u00e9terek \u00e9s alkalmaz\u00e1s konfigur\u00e1ci\u00f3).<\/li>\n<\/ul>\n<p><\/p>\n<p>Kifejezetten megadhatjuk, hogy melyik feladatot szeretn\u00e9nk elv\u00e9gezni, \u00edgy a szerep kihagyja a t\u00f6bbi feladat v\u00e9grehajt\u00e1s\u00e1t. Az eset\u00fcnkben csak a topol\u00f3gi\u00e1val szeretn\u00e9nk foglalkozni, ez\u00e9rt megadtuk, hogy <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg az er\u0151fesz\u00edt\u00e9seink eredm\u00e9ny\u00e9t. Keres\u00fcnk \u00faj replika k\u00e9szletet a <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u00f6nnyed\u00e9n \u00e9s gond n\u00e9lk\u00fcl telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-ra (1. r\u00e9sz)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurr\u00e1!<\/p>\n<p><\/p>\n<p>K\u00eds\u00e9rletezz\u00fcnk a p\u00e9ld\u00e1nyok \u00e9s replika k\u00e9szletek konfigur\u00e1ci\u00f3j\u00e1nak megv\u00e1ltoztat\u00e1s\u00e1val, \u00e9s n\u00e9zz\u00fck meg, hogyan v\u00e1ltozik a klaszter topol\u00f3gi\u00e1ja. Kipr\u00f3b\u00e1lhat k\u00fcl\u00f6nb\u00f6z\u0151 \u00fczemeltet\u00e9si forgat\u00f3k\u00f6nyveket, p\u00e9ld\u00e1ul <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">rolling update<\/a><\/noindex> vagy a <code>memtx_memory<\/code>n\u00f6vel\u00e9se. A szerep megpr\u00f3b\u00e1lja ezt v\u00e9grehajtani an\u00e9lk\u00fcl, hogy \u00fajraind\u00edtan\u00e1 a p\u00e9ld\u00e1nyt, hogy minimaliz\u00e1lja az alkalmaz\u00e1s le\u00e1ll\u00e1s\u00e1nak id\u0151tartam\u00e1t.<\/p>\n<p><\/p>\n<p>Ne felejts\u00fck el futtatni a <code>vagrant halt<\/code>parancsot, hogy le\u00e1ll\u00edtsuk a virtu\u00e1lis g\u00e9peket, amikor befejezt\u00fck a vel\u00fck val\u00f3 munk\u00e1t.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">\u00c9s mi t\u00f6rt\u00e9nik a h\u00e1tt\u00e9rben?<\/h1>\n<p><\/p>\n<p>Itt r\u00e9szletesebben mes\u00e9lek arr\u00f3l, hogy mi zajlott a h\u00e1tt\u00e9rben az ansible szerep\u00e9vel a k\u00eds\u00e9rleteink sor\u00e1n.<\/p>\n<p><\/p>\n<p>Vizsg\u00e1ljuk meg l\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre a Cartridge-alkalmaz\u00e1s telep\u00edt\u00e9s\u00e9t.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">A csomag telep\u00edt\u00e9se \u00e9s a p\u00e9ld\u00e1nyok ind\u00edt\u00e1sa<\/h3>\n<p><\/p>\n<p>El\u0151sz\u00f6r a csomagot a szerverre kell juttatni \u00e9s telep\u00edteni. A szerep most m\u00e1r k\u00e9pes RPM \u00e9s DEB csomagokkal dolgozni.<\/p>\n<p><\/p>\n<p>Ezut\u00e1n elind\u00edtjuk a p\u00e9ld\u00e1nyokat. Itt minden nagyon egyszer\u0171: minden p\u00e9ld\u00e1ny egy k\u00fcl\u00f6n <code>systemd<\/code>-szolg\u00e1ltat\u00e1s. P\u00e9ldak\u00e9nt mes\u00e9lek:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ systemctl start myapp@storage-1<\/code><\/pre>\n<p><\/p>\n<p>Ez a parancs elind\u00edtja a p\u00e9ld\u00e1nyt. <code>storage-1<\/code> alkalmaz\u00e1s <code>myapp<\/code>Az elind\u00edtott p\u00e9ld\u00e1ny megkeresi a saj\u00e1t <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">konfigur\u00e1ci\u00f3<\/a><\/noindex> be. <code>\/etc\/tarantool\/conf.d\/<\/code>. A p\u00e9ld\u00e1ny napl\u00f3it a k\u00f6vetkez\u0151vel n\u00e9zhetj\u00fck meg: <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Unit-f\u00e1jl <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> a systemd-szolg\u00e1ltat\u00e1shoz a csomaggal egy\u00fctt lesz telep\u00edtve.<\/p>\n<p><\/p>\n<p>Az Ansible be\u00e9p\u00edtett modulokkal rendelkezik csomagok telep\u00edt\u00e9s\u00e9re \u00e9s a systemd-szolg\u00e1ltat\u00e1sok kezel\u00e9s\u00e9re, itt nem tal\u00e1ltunk ki semmi \u00fajat.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">A klaszter topol\u00f3gia be\u00e1ll\u00edt\u00e1sa<\/h3>\n<p><\/p>\n<p>Itt kezd\u0151dik a leg\u00e9rdekesebb r\u00e9sz. Egyet\u00e9rthet\u00fcnk, hogy furcsa lenne k\u00fcl\u00f6n Ansible-szerepet k\u00e9sz\u00edteni a csomagok telep\u00edt\u00e9s\u00e9re \u00e9s a szolg\u00e1ltat\u00e1sok ind\u00edt\u00e1s\u00e1ra. <code>systemd<\/code>-szolg\u00e1ltat\u00e1sok.<\/p>\n<p><\/p>\n<p>A klasztert manu\u00e1lisan is be\u00e1ll\u00edthatjuk:<\/p>\n<p><\/p>\n<ul>\n<li>Els\u0151 lehet\u0151s\u00e9g: megnyitjuk a Web UI-t, \u00e9s nyomogatjuk a gombokat. Egyszeri t\u00f6bb p\u00e9ld\u00e1ny ind\u00edt\u00e1s\u00e1ra ez teljesen megfelel\u0151.<\/li>\n<li>M\u00e1sodik lehet\u0151s\u00e9g: haszn\u00e1lhatjuk a GraphQl API-t. Itt m\u00e1r lehet automatiz\u00e1lni valamit, p\u00e9ld\u00e1ul \u00edrhatunk egy Python szkriptet.<\/li>\n<li>Harmadik lehet\u0151s\u00e9g (az er\u0151s lelk\u0171eknek): bel\u00e9p\u00fcnk a szerverre, csatlakozunk az egyik p\u00e9ld\u00e1nyhoz a <code>tarantoolctl connect<\/code> parancs haszn\u00e1lat\u00e1val, \u00e9s elv\u00e9gezz\u00fck az \u00f6sszes sz\u00fcks\u00e9ges m\u0171veletet a Lua-modullal. <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Feltal\u00e1l\u00e1sunk f\u0151 feladata, hogy ezt a legnehezebb munkar\u00e9szt elv\u00e9gezze helyettetek.<\/p>\n<p><\/p>\n<p>Az Ansible lehet\u0151v\u00e9 teszi saj\u00e1t moduljaink \u00edr\u00e1s\u00e1t \u00e9s haszn\u00e1lat\u00e1t szerepk\u00e9nt. A mi szerep\u00fcnk k\u00fcl\u00f6nb\u00f6z\u0151 klaszterkomponensek kezel\u00e9s\u00e9re haszn\u00e1l ilyen modulokat.<\/p>\n<p><\/p>\n<p>Hogyan m\u0171k\u00f6dik ez? \u00d6n a klaszter k\u00edv\u00e1nt \u00e1llapot\u00e1t \u00edrja le egy deklarat\u00edv konfigur\u00e1ci\u00f3ban, a szerep pedig bemenetk\u00e9nt adja meg minden modulnak a konfigur\u00e1ci\u00f3s szakasz\u00e1t. A modul megkapja a klaszter aktu\u00e1lis \u00e1llapot\u00e1t \u00e9s \u00f6sszehasonl\u00edtja azzal, ami bemenetk\u00e9nt \u00e9rkezett. Ezut\u00e1n az egyik p\u00e9ld\u00e1ny socketj\u00e9n kereszt\u00fcl elind\u00edt egy k\u00f3dot, amely a klasztert a k\u00edv\u00e1nt \u00e1llapotba hozza.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">\u00d6sszegz\u00e9s<\/h1>\n<p><\/p>\n<p>Ma bemutattuk, hogyan lehet telep\u00edteni az alkalmaz\u00e1s\u00e1t Tarantool Cartridge-re, \u00e9s egyszer\u0171 topol\u00f3gi\u00e1t be\u00e1ll\u00edtani. Ehhez az Ansible-t haszn\u00e1ltuk - egy er\u0151teljes eszk\u00f6zt, amely egyszer\u0171 haszn\u00e1lat\u00e1r\u00f3l ismert, \u00e9s lehet\u0151v\u00e9 teszi, hogy egyszerre sok infrastrukt\u00fara csom\u00f3pontot (eset\u00fcnkben klasztereik p\u00e9ld\u00e1nyait) konfigur\u00e1ljunk.<\/p>\n<p><\/p>\n<p>Fent a klaszter konfigur\u00e1ci\u00f3j\u00e1nak le\u00edr\u00e1s\u00e1nak egyik m\u00f3dj\u00e1val foglalkoztunk Ansible seg\u00edts\u00e9g\u00e9vel. Amint k\u00e9szen \u00e1ll arra, hogy tov\u00e1bb l\u00e9pjen, tanulm\u00e1nyozza a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">legjobb gyakorlatokat<\/a><\/noindex> a playbookok \u00edr\u00e1s\u00e1hoz. Lehet, hogy k\u00e9nyelmesebb lesz a topol\u00f3gia kezel\u00e9se a <code>group_vars<\/code> \u00e9s <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Hamarosan mes\u00e9l\u00fcnk arr\u00f3l, hogyan lehet v\u00e9gleg elt\u00e1vol\u00edtani (expel) a p\u00e9ld\u00e1nyokat a topol\u00f3gi\u00e1b\u00f3l, bootstrappelni a vshard-ot, kezelni az automatikus failover m\u00f3dot, be\u00e1ll\u00edtani az azonos\u00edt\u00e1st \u00e9s jav\u00edtani a klaszter konfigur\u00e1ci\u00f3j\u00e1t. De addig is \u00f6n\u00e1ll\u00f3an tanulm\u00e1nyozhat. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">a dokument\u00e1ci\u00f3val<\/a><\/noindex> \u00e9s k\u00eds\u00e9rletezhet a klaszter param\u00e9tereinek megv\u00e1ltoztat\u00e1s\u00e1val.<\/p>\n<p><\/p>\n<p>Ha valami nem m\u0171k\u00f6dik, felt\u00e9tlen\u00fcl <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">t\u00e1j\u00e9koztasson<\/a><\/noindex> minket a probl\u00e9m\u00e1r\u00f3l. Gyorsan megoldjuk!<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/478710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 [&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-53611","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0436\u0435.\" \/>\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\/hu\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0443\u0436\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\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-05T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:32+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\udd47Egyszer\u0171en \u00e9s k\u00f6nnyed\u00e9n telep\u00edtj\u00fck az alkalmaz\u00e1sokat a Tarantool Cartridge-re (1. r\u00e9sz) | ProHoster","description":"M\u00e1r k\u00e9szen \u00e1llunk.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster","og:description":"\u041c\u044b \u0443\u0436\u0435.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","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-05T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53611","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 08:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:22:49","updated":"2026-01-24 08:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}