{"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\/it\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Abbiamo gi\u00e0 parlato di <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, che consente di sviluppare applicazioni distribuite e confezionarle. Ci\u00f2 che resta \u00e8 solo imparare a distribuire queste applicazioni e gestirle. Non preoccuparti, abbiamo pensato a tutto! Abbiamo raccolto insieme tutte le best practices per lavorare con Tarantool Cartridge e scritto <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">il ruolo ansible<\/a><\/noindex>, che installer\u00e0 il pacchetto sui server, avvier\u00e0 le istanze, le unir\u00e0 in un cluster, configurer\u00e0 l'autenticazione, bootstrapper\u00e0 vshard, attiver\u00e0 il failover automatico e aggiorner\u00e0 la configurazione del cluster.<\/p>\n<p><\/p>\n<p>Interessa? Allora ti invitiamo a proseguire, ti racconteremo tutto.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Iniziamo con un esempio<\/h1>\n<p><\/p>\n<p>Esamineremo solo una parte delle funzionalit\u00e0 del nostro ruolo. Puoi sempre trovare una descrizione completa di tutte le sue capacit\u00e0 e dei parametri di ingresso in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">documentazione<\/a><\/noindex>. Ma \u00e8 meglio provare una volta che vedere cento volte, quindi distribuiamo una piccola applicazione.<\/p>\n<p><\/p>\n<p>Tarantool Cartridge ha un <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/cartridge-cli\/tree\/master\/examples\/getting-started-app#application-example-based-on-tarantool-cartridge\">tutorial<\/a><\/noindex> per creare una piccola applicazione Cartridge, che memorizza informazioni sui clienti della banca e sui loro conti, e fornisce anche un'API per gestire i dati tramite HTTP. Per fare ci\u00f2, nell'applicazione vengono descritte due possibili ruoli: <code>api<\/code> e <code>storage<\/code>, che possono essere assegnati alle istanze.<\/p>\n<p><\/p>\n<p>Cartridge non fornisce indicazioni su come avviare processi, ma semplicemente offre la possibilit\u00e0 di configurare gli istanti gi\u00e0 avviati. Il resto deve essere fatto dall'utente: creare file di configurazione, avviare i servizi e impostare la topologia. Ma non ci occuperemo di tutto questo, Ansible lo far\u00e0 per noi.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Dalla teoria alla pratica<\/h3>\n<p><\/p>\n<p>Quindi, deployiamo la nostra applicazione su due macchine virtuali e configuriamo una semplice topologia:<\/p>\n<p><\/p>\n<ul>\n<li>ReplicaSet <code>app-1<\/code> avr\u00e0 il compito di implementare il ruolo <code>api<\/code>, che include il ruolo <code>vshard-router<\/code>. Qui ci sar\u00e0 solo un'istanza.<\/li>\n<li>ReplicaSet <code>storage-1<\/code> implementa il ruolo <code>storage<\/code> (e contemporaneamente <code>vshard-storage<\/code>), aggiungeremo due istanze da macchine diverse.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Per avviare l'esempio avremo bisogno di <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (versione 2.8 o superiore).<\/p>\n<p><\/p>\n<p>Il ruolo si trova in <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. Questo \u00e8 un repository che consente di condividere il proprio lavoro e utilizzare ruoli gi\u00e0 pronti.<\/p>\n<p><\/p>\n<p>Cloniamo il repository con l'esempio:<\/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>Avviamo le macchine virtuali:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Installiamo il ruolo Ansible Tarantool Cartridge:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-galaxy install tarantool.cartridge,1.0.1<\/code><\/pre>\n<p><\/p>\n<p>Eseguiamo il ruolo installato:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Stiamo aspettando la fine dell'esecuzione del playbook, passiamo a <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> e godiamoci il risultato:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Possiamo iniziare a trasferire i dati. \u00c8 fantastico, vero?<\/p>\n<p><\/p>\n<p>Ora vediamo come lavorare con questo e aggiungiamo un altro replica set nella topologia.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Iniziamo a capire<\/h3>\n<p><\/p>\n<p>Quindi, cosa \u00e8 successo?<\/p>\n<p><\/p>\n<p>Abbiamo avviato due macchine virtuali e lanciato un playbook ansible che ha configurato il nostro cluster. Diamo un'occhiata al contenuto del file <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Distribuisci la mia app Tarantool Cartridge\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Importa il ruolo Tarantool Cartridge\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>Qui non sta succedendo nulla di interessante, lanciamo il ruolo ansible chiamato <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Tutto ci\u00f2 che \u00e8 importante (ossia, la configurazione del cluster) si trova nel <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventory<\/a><\/noindex>-file <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # variabili comuni del cluster\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\/getting-started-app-1.0.0-0.rpm  # percorso del pacchetto\n\n    cartridge_cluster_cookie: app-default-cookie  # cookie del cluster\n\n    # opzioni ssh comuni\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  # ISTANZE\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    # GRUPPARE LE ISTANZE PER MACCHINE\n    host1:\n      vars:\n        # opzioni di connessione della prima macchina\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # istanze da avviare sulla prima macchina\n        storage-1:\n\n    host2:\n      vars:\n        # opzioni di connessione della seconda macchina\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # istanze da avviare sulla seconda macchina\n        app-1:\n        storage-1-replica:\n\n    # GRUPPARE LE ISTANZE PER SET DI REPLICA\n    replicaset_app_1:\n      vars:  # configurazione del set di replica\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # leader\n        roles:\n          - 'api'\n\n      hosts:  # istanze del set di replica\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # configurazione del set di replica\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # leader\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # istanze del set di replica\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Tutto ci\u00f2 che dobbiamo fare \u00e8 imparare a gestire le istanze e i replica set, modificando il contenuto di questo file. In seguito, aggiungeremo nuove sezioni. Per non confonderci su dove aggiungerle, puoi dare un'occhiata alla versione finale di questo file, <code>hosts.updated.yml<\/code>, che si trova nel repository di esempio.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Gestione delle istanze<\/h3>\n<p><\/p>\n<p>In termini di Ansible, ogni istanza \u00e8 un host (non confondere con un server fisico), cio\u00e8 un nodo dell'infrastruttura che Ansible gestir\u00e0. Per ogni host possiamo specificare le impostazioni di connessione (come <code>ansible_host<\/code> e <code>ansible_user<\/code>), cos\u00ec come la configurazione dell'istanza. La descrizione delle istanze \u00e8 nella sezione <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>Esaminiamo la configurazione dell'istanza <code>storage-1<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # ISTANZE\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>Nella variabile <code>config<\/code> abbiamo specificato i parametri dell'istanza \u2014 <code>advertise URI<\/code> e <code>HTTP port<\/code>.<br \/>\nSotto ci sono i parametri delle istanze <code>app-1<\/code> e <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Dobbiamo fornire ad Ansible i parametri di connessione per ogni istanza. Sembra logico raggruppare le istanze in base alle macchine virtuali. A tal fine, le istanze sono state raggruppate in <code>host1<\/code> e <code>host2<\/code>, e in ogni gruppo, nella sezione <code>vars<\/code> , sono indicate le valori <code>ansible_host<\/code> e <code>ansible_user<\/code> per una singola macchina virtuale. E nella sezione <code>hosts<\/code> \u2014 hosts (o istanze) che appartengono a questo gruppo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # GRUPPA ISTANZE PER MACCHINE\n    host1:\n      vars:\n        # opzioni di connessione della prima macchina\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # istanze da avviare sulla prima macchina\n        storage-1:\n\n     host2:\n      vars:\n        # opzioni di connessione della seconda macchina\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # istanze da avviare sulla seconda macchina\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Iniziamo a modificare <code>hosts.yml<\/code>. Aggiungeremo altre due istanze, <code>storage-2-replica<\/code> sul primo virtuale e <code>storage-2<\/code> sul secondo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # ISTANZE\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    # GRUPPA ISTANZE PER MACCHINE\n    host1:\n      vars:\n        ...\n      hosts:  # istanze da avviare sulla prima macchina\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # istanze da avviare sulla seconda macchina\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Eseguiamo l'ansible-playbook:<\/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>Fai attenzione all'opzione <code>--limit<\/code>. Poich\u00e9 ogni istanza del cluster \u00e8 un host in termini di Ansible, possiamo specificare esplicitamente quali istanze devono essere configurate durante l'esecuzione del playbook.<\/p>\n<p><\/p>\n<p>Accediamo di nuovo all'interfaccia Web <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> e osserviamo i nostri nuovi istanze:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Non ci fermeremo qui e impareremo a gestire la topologia.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Gestione della topologia<\/h3>\n<p><\/p>\n<p>Uniremo i nostri nuovi istanze in un replicaset <code>storage-2<\/code>. Aggiungeremo un nuovo gruppo <code>replicaset_storage_2<\/code> e descriveremo nelle sue variabili i parametri del replicaset, analogamente a <code>replicaset_storage_1<\/code>. Nella sezione <code>hosts<\/code> indicheremo quali istanze faranno parte di questo gruppo (cio\u00e8 il nostro replicaset):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # GRUPPARE LE ISTANZE PER REPLICA SET\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # configurazione del replicaset\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:   # istanze del replicaset\n        storage-2:\n        storage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>Riavviamo il playbook:<\/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>Nel parametro <code>--limit<\/code> questa volta abbiamo passato il nome del gruppo che corrisponde al nostro replicaset.<\/p>\n<p><\/p>\n<p>Consideriamo l'opzione <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Il nostro ruolo esegue sequenzialmente varie attivit\u00e0 contrassegnate dai seguenti tag:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: gestione delle istanze (configurazione, connessione a membership);<\/li>\n<li><code>cartridge-replicasets<\/code>: gestione della topologia (gestione dei replicaset e rimozione irreversibile (expel) delle istanze dal cluster);<\/li>\n<li><code>cartridge-config<\/code>: gestione degli altri parametri del cluster (bootstrapping vshard, modalit\u00e0 di failover automatico, parametri di autorizzazione e configurazione dell'applicazione).<\/li>\n<\/ul>\n<p><\/p>\n<p>Possiamo specificare esplicitamente quale parte del lavoro vogliamo svolgere, in tal modo il ruolo salter\u00e0 l'esecuzione delle altre attivit\u00e0. Nel nostro caso vogliamo lavorare solo con la topologia, quindi abbiamo specificato <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>Valutiamo il risultato dei nostri sforzi. Troviamo un nuovo replicaset su <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=\"Deployiamo facilmente e con naturalezza le applicazioni su Tarantool Cartridge (parte 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Evviva!<\/p>\n<p><\/p>\n<p>Sperimentate con la modifica della configurazione degli istanze e dei replicaset e osservate come cambia la topologia del cluster. Potete provare vari scenari operativi, come ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">aggiornamento rolling<\/a><\/noindex> o aumento <code>memtx_memory<\/code>. Il ruolo cercher\u00e0 di farlo senza riavviare l'istanza, al fine di ridurre il possibile downtime della vostra applicazione.<\/p>\n<p><\/p>\n<p>Non dimenticate di eseguire <code>vagrant halt<\/code>, per fermare le macchine virtuali quando avete finito di lavorarci.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">E cosa c'\u00e8 sotto il cofano?<\/h1>\n<p><\/p>\n<p>Qui parler\u00f2 pi\u00f9 in dettaglio di cosa \u00e8 successo sotto il cofano del ruolo ansible durante i nostri esperimenti.<\/p>\n<p><\/p>\n<p>Analizziamo passo dopo passo il deployment dell'applicazione Cartridge.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">Installazione del pacchetto e avvio delle istanze<\/h3>\n<p><\/p>\n<p>Prima di tutto, \u00e8 necessario consegnare il pacchetto al server e installarlo. Ora il ruolo \u00e8 in grado di lavorare con pacchetti RPM e DEB.<\/p>\n<p><\/p>\n<p>Poi avviamo gli istanze. Qui \u00e8 tutto molto semplice: ogni istanza \u00e8 un <code>systemd<\/code>-servizio. Lo spiego con un esempio:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ systemctl start myapp@storage-1<\/code><\/pre>\n<p><\/p>\n<p>Questo comando avvier\u00e0 l'istanza <code>storage-1<\/code> applicativi <code>myapp<\/code>. L'istanza avviata cercher\u00e0 il suo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">la configurazione<\/a><\/noindex> in <code>\/etc\/tarantool\/conf.d\/<\/code>. I log dell'istanza possono essere visualizzati utilizzando <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Il file di unit\u00e0 <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> per il servizio systemd sar\u00e0 consegnato insieme al pacchetto.<\/p>\n<p><\/p>\n<p>Ansible ha moduli incorporati per l'installazione di pacchetti e la gestione dei servizi systemd, quindi non abbiamo inventato nulla di nuovo.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">Configurazione della topologia del cluster<\/h3>\n<p><\/p>\n<p>Qui inizia la parte pi\u00f9 interessante. Concordate che sarebbe strano preoccuparsi di un ruolo ansible speciale per l'installazione di pacchetti e l'avvio di <code>systemd<\/code>-servizi.<\/p>\n<p><\/p>\n<p>\u00c8 possibile configurare il cluster manualmente:<\/p>\n<p><\/p>\n<ul>\n<li>Prima opzione: apriamo l'interfaccia Web e facciamo clic sui pulsanti. Per avviare temporaneamente pi\u00f9 istanze, andr\u00e0 benissimo.<\/li>\n<li>Seconda opzione: \u00e8 possibile utilizzare l'API GraphQl. Qui \u00e8 possibile automatizzare qualcosa, ad esempio scrivere uno script in Python.<\/li>\n<li>La terza opzione (per i pi\u00f9 coraggiosi): accediamo al server e ci colleghiamo a una delle istanze utilizzando <code>tarantoolctl connect<\/code> e facciamo tutte le manipolazioni necessarie con il modulo Lua <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>L'obiettivo principale della nostra invenzione \u00e8 svolgere per voi questa parte di lavoro, la pi\u00f9 complessa.<\/p>\n<p><\/p>\n<p>Ansible consente di scrivere il proprio modulo e utilizzarlo in un ruolo. Il nostro ruolo utilizza questi moduli per gestire i vari componenti del cluster.<\/p>\n<p><\/p>\n<p>Come funziona? Descrivi lo stato desiderato del cluster in una configurazione dichiarativa, e il ruolo fornisce a ciascun modulo la sua sezione di configurazione. Il modulo riceve lo stato attuale del cluster e lo confronta con ci\u00f2 che \u00e8 stato fornito. Successivamente, tramite il socket di un'istanza, viene eseguito il codice che riporta il cluster allo stato desiderato.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">Risultati<\/h1>\n<p><\/p>\n<p>Oggi abbiamo parlato e dimostrato come distribuire la vostra applicazione su Tarantool Cartridge e configurare una semplice topologia. Per questo abbiamo utilizzato Ansible, uno strumento potente che si distingue per la sua facilit\u00e0 d'uso e consente di configurare simultaneamente numerosi nodi dell'infrastruttura (nel nostro caso, le istanze del cluster).<\/p>\n<p><\/p>\n<p>In precedenza abbiamo esaminato uno dei tanti modi per descrivere la configurazione del cluster utilizzando Ansible. Una volta che sarai pronto a procedere, scopri <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">le best practice<\/a><\/noindex> per scrivere playbook. Potresti trovare pi\u00f9 facile gestire la topologia tramite <code>group_vars<\/code> e <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Presto parleremo di come espellere istanze dalla topologia, avviare vshard, gestire la modalit\u00e0 di failover automatico, configurare l'autenticazione e patchare la configurazione del cluster. Nel frattempo, puoi studiare <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">documentazione<\/a><\/noindex> e sperimentare con la modifica dei parametri del cluster.<\/p>\n<p><\/p>\n<p>Se qualcosa non funziona, assicurati di <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">segnalarci<\/a><\/noindex> il problema. Risolveremo tutto rapidamente!<\/p>\n<p>Fonte: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/it\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Distribuiamo semplicemente e senza sforzo applicazioni su Tarantool Cartridge (parte 1) | ProHoster","description":"Abbiamo gi\u00e0 parlato di Tarantool Cartridge, che consente di sviluppare applicazioni distribuite e imballarle. Rimane solo un ultimo passaggio: imparare a distribuire queste applicazioni e gestirle. Non preoccuparti, abbiamo tutto sotto controllo! Abbiamo raccolto tutte le best practice per lavorare con Tarantool Cartridge e scritto un ruolo ansible che distribuir\u00e0 il pacchetto sui server, avvier\u00e0 le istanze e le unir\u00e0 in un cluster, configurando","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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 \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}