
Už sme hovorili o , ktorý vám umožňuje vyvíjať distribuované aplikácie a baliť ich. Zostáva už len naučiť sa, ako tieto aplikácie nasadiť a spravovať. Nebojte sa, postaráme sa o vás! Zhromaždili sme všetky osvedčené postupy pre prácu s Tarantool Cartridge a napísali sme... , ktorý distribuuje balík na servery, spustí inštancie, zlúči ich do klastra, nakonfiguruje autorizáciu, spustí vshard, povolí automatické prepnutie na záložný systém a opraví konfiguráciu klastra.
Máte záujem? Tak čítajte ďalej, všetko vám povieme a ukážeme.
Začnime príkladom
Pokryjeme iba časť funkcií našej role. Úplný popis všetkých jej možností a vstupných parametrov nájdete vždy v Ale je lepšie raz skúsiť ako stokrát vidieť, takže si nasaďme malú aplikáciu.
Kazeta Tarantool má Vytvoriť malú aplikáciu Cartridge, ktorá ukladá informácie o bankových klientoch a ich účtoch a poskytuje API na správu údajov cez HTTP. Na dosiahnutie tohto cieľa aplikácia popisuje dve možné role: api и storage, ktoré je možné priradiť inštanciám.
Samotná kazeta nevysvetľuje, ako spúšťať procesy; poskytuje iba možnosť konfigurovať už spustené inštancie. Zvyšok musí používateľ urobiť sám: nasadiť konfiguračné súbory, spustiť služby a nakonfigurovať topológiu. Ale to všetko neurobíme my; Ansible to urobí za nás.
Od slov k činom
Takže, nasaďme našu aplikáciu na dva virtuálne počítače a nastavme jednoduchú topológiu:
- Replikačná sada
app-1bude implementovať úlohuapi, čo zahŕňa úlohuvshard-routerTu bude len jeden príklad. - Replikačná sada
storage-1uvedomuje si úlohustorage(a zároveňvshard-storage), pridáme sem dve inštancie z rôznych počítačov.

Na spustenie príkladu budeme potrebovať и (verzia 2.8 alebo novšia).
Samotná úloha je v Toto je úložisko, ktoré vám umožňuje zdieľať váš vývoj a používať hotové role.
Naklonujme si vzorový repozitár:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0Vytvárame virtuálne stroje:
$ vagrant upNainštalujte rolu Tarantool Cartridge Ansible:
$ ansible-galaxy install tarantool.cartridge,1.0.1Spustime nainštalovanú rolu:
$ ansible-playbook -i hosts.yml playbook.ymlČakáme na dokončenie playbooku a potom prejdeme na a vychutnajte si výsledok:

Môžete naliať dáta. Paráda, však?
Teraz si poďme predstaviť, ako s tým pracovať, a zároveň pridať do topológie ďalšiu sadu replík.
Poďme na to prísť
Tak čo sa stalo?
Nastavili sme dva virtuálne počítače a spustili sme Ansible playbook, ktorý nakonfiguroval náš klaster. Pozrime sa na obsah súboru. playbook.yml:
---
- name: Deploy my Tarantool Cartridge app
hosts: all
become: true
become_user: root
tasks:
- name: Import Tarantool Cartridge role
import_role:
name: tarantool.cartridgeNič zaujímavé sa tu nedeje, spustíme rolu ansible s názvom tarantool.cartridge.
Všetky najdôležitejšie veci (konkrétne konfigurácia klastra) sú v -súbor hosts.yml:
---
all:
vars:
# common cluster variables
cartridge_app_name: getting-started-app
cartridge_package_path: ./getting-started-app-1.0.0-0.rpm # path to package
cartridge_cluster_cookie: app-default-cookie # cluster cookie
# common ssh options
ansible_ssh_private_key_file: ~/.vagrant.d/insecure_private_key
ansible_ssh_common_args: '-o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
app-1:
config:
advertise_uri: '172.19.0.3:3301'
http_port: 8182
storage-1-replica:
config:
advertise_uri: '172.19.0.3:3302'
http_port: 8183
children:
# GROUP INSTANCES BY MACHINES
host1:
vars:
# first machine connection options
ansible_host: 172.19.0.2
ansible_user: vagrant
hosts: # instances to be started on the first machine
storage-1:
host2:
vars:
# second machine connection options
ansible_host: 172.19.0.3
ansible_user: vagrant
hosts: # instances to be started on the second machine
app-1:
storage-1-replica:
# GROUP INSTANCES BY REPLICA SETS
replicaset_app_1:
vars: # replica set configuration
replicaset_alias: app-1
failover_priority:
- app-1 # leader
roles:
- 'api'
hosts: # replica set instances
app-1:
replicaset_storage_1:
vars: # replica set configuration
replicaset_alias: storage-1
weight: 3
failover_priority:
- storage-1 # leader
- storage-1-replica
roles:
- 'storage'
hosts: # replica set instances
storage-1:
storage-1-replica:Všetko, čo musíme urobiť, je naučiť sa, ako spravovať inštancie a sady replík zmenou obsahu tohto súboru. Neskôr doň pridáme nové sekcie. Aby ste sa vyhli nejasnostiam o tom, kam ich pridať, môžete sa pozrieť na finálnu verziu tohto súboru. hosts.updated.yml, ktorý sa nachádza v úložisku príkladov.
Správa inštancií
V terminológii Ansible je každá inštancia hostiteľ (nezamieňať s hardvérovým serverom), t. j. uzol infraštruktúry, ktorý bude Ansible spravovať. Pre každého hostiteľa môžeme špecifikovať parametre pripojenia (ako napríklad ansible_host и ansible_user), ako aj konfiguráciu inštancie. Popisy inštancií sú v sekcii hosts.
Pozrime sa na konfiguráciu inštancie storage-1:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...V premennej config zadali sme parametre inštancie - advertise URI и HTTP port.
Nižšie sú uvedené parametre inštancie app-1 и storage-1-replica.
Musíme Ansible povedať parametre pripojenia pre každú inštanciu. Zdá sa logické zoskupovať inštancie podľa virtuálneho počítača. Na tento účel sú inštancie zoskupené. host1 и host2a v každej skupine v sekcii vars hodnoty sú uvedené ansible_host и ansible_user pre jeden virtuálny stroj. A v sekcii hosts — hostitelia (tiež známi ako inštancie), ktorí sú súčasťou tejto skupiny:
all:
vars:
...
hosts:
...
children:
# GROUP INSTANCES BY MACHINES
host1:
vars:
# first machine connection options
ansible_host: 172.19.0.2
ansible_user: vagrant
hosts: # instances to be started on the first machine
storage-1:
host2:
vars:
# second machine connection options
ansible_host: 172.19.0.3
ansible_user: vagrant
hosts: # instances to be started on the second machine
app-1:
storage-1-replica:Začíname sa meniť hosts.ymlPridajme ešte dva prípady, storage-2-replica na prvom virtuálnom počítači a storage-2 na druhom:
all:
vars:
...
# INSTANCES
hosts:
...
storage-2: # <==
config:
advertise_uri: '172.19.0.3:3303'
http_port: 8184
storage-2-replica: # <==
config:
advertise_uri: '172.19.0.2:3302'
http_port: 8185
children:
# GROUP INSTANCES BY MACHINES
host1:
vars:
...
hosts: # instances to be started on the first machine
storage-1:
storage-2-replica: # <==
host2:
vars:
...
hosts: # instances to be started on the second machine
app-1:
storage-1-replica:
storage-2: # <==
...Spustime si Ansible playbook:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.ymlUpozorňujeme na možnosť --limitKeďže každá inštancia klastra je v Ansible hostiteľom, môžeme explicitne určiť, ktoré inštancie by mali byť nakonfigurované pri spustení playbooku.
Vráťme sa k webovému používateľskému rozhraniu a vidíme naše nové inštancie:

Nezastavme sa tam a osvojme si správu topológie.
Správa topológie
Spojme naše nové inštancie do sady replík storage-2Pridajme novú skupinu. replicaset_storage_2 a parametre replíkovej sady v jej premenných popíšeme analogicky s replicaset_storage_1. V sekcii hosts Určime, ktoré inštancie budú zahrnuté v tejto skupine (teda do našej sady replík):
---
all:
vars:
...
hosts:
...
children:
...
# GROUP INSTANCES BY REPLICA SETS
...
replicaset_storage_2: # <==
vars: # replicaset configuration
replicaset_alias: storage-2
weight: 2
failover_priority:
- storage-2
- storage-2-replica
roles:
- 'storage'
hosts: # replicaset instances
storage-2:
storage-2-replica:Spustime si znova herný plán:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.ymlV parametri --limit Tentoraz sme zadali názov skupiny, ktorá zodpovedá našej sade replík.
Zvážme možnosť tags.
Naša rola postupne vykonáva rôzne úlohy, ktoré sú označené nasledujúcimi tagmi:
cartridge-instancesspráva inštancií (konfigurácia, pripojenie k členstvu);cartridge-replicasetsspráva topológie (správa replík a trvalé odstránenie (vylúčenie) inštancií z klastra);cartridge-configspráva ďalších parametrov klastra (bootstrapping vshard, automatický režim záložného prepnutia, parametre autorizácie a konfigurácia aplikácií).
Môžeme explicitne špecifikovať, ktorú časť práce chceme vykonať, a potom rola preskočí zvyšok úloh. V našom prípade chceme pracovať iba s topológiou, preto sme špecifikovali cartridge-replicasets.
Zhodnoťme výsledky nášho úsilia. Hľadáme novú repliku na... .

Hurá!
Experimentujte so zmenami konfigurácií inštancií a replík a sledujte, ako sa mení topológia klastra. Môžete vyskúšať rôzne prevádzkové scenáre, ako napríklad: alebo zvýšiť memtx_memoryRola sa to pokúsi urobiť bez reštartovania inštancie, aby sa skrátil potenciálny prestoj vašej aplikácie.
Nezabudnite behať vagrant haltzastaviť virtuálne počítače po dokončení práce s nimi.
Čo je pod kapotou?
Tu sa podrobnejšie venujem tomu, čo sa dialo pod kapotou Ansible role počas našich experimentov.
Pozrime sa na kroky nasadenia aplikácie Cartridge.
Inštalácia balíka a spustenie inštancií
Najprv je potrebné doručiť balík na server a nainštalovať ho. V súčasnosti môže táto rola pracovať s balíkmi RPM a DEB.
Ďalej spustíme inštancie. Je to veľmi jednoduché: každá inštancia je samostatná. systemd-služba. Vysvetlím to na príklade:
$ systemctl start myapp@storage-1Tento príkaz spustí inštanciu. storage-1 aplikácie myappSpustená inštancia bude hľadať svoje в /etc/tarantool/conf.d/Záznamy inštancií je možné zobraziť pomocou journald.
Súbor jednotky /etc/systemd/system/myapp@.sevice pre službu systemd bude dodaná spolu s balíkom.
Ansible má vstavané moduly na inštaláciu balíkov a správu služieb systemd, ale nevymysleli sme tu nič nové.
Konfigurácia topológie klastra
A tu sa veci začínajú zaujímať. Súhlasíte, bolo by zvláštne obťažovať sa špeciálnou rolou Ansible na inštaláciu balíkov a ich spúšťanie. systemd-služby.
Klaster môžete nakonfigurovať manuálne:
- Prvá možnosť: otvorte webové rozhranie a kliknite na tlačidlá. To je v poriadku na jednorazové spustenie viacerých inštancií.
- Druhou možnosťou je použitie rozhrania GraphQl API. To umožňuje automatizáciu, napríklad písanie skriptu v jazyku Python.
- Tretia možnosť (pre silných vôľou): prejdite na server a pripojte sa k jednej z inštancií pomocou
tarantoolctl connecta všetky potrebné manipulácie vykonáme s modulom Luacartridge.
Hlavným cieľom nášho vynálezu je urobiť túto najťažšiu časť práce za vás.
Ansible vám umožňuje písať vlastné moduly a používať ich v role. Naša rola používa tieto moduly na správu rôznych komponentov klastra.
Ako to funguje? Požadovaný stav klastra popíšete v deklaratívnej konfigurácii a rola odovzdá svoju konfiguračnú sekciu ako vstup každému modulu. Modul prijme aktuálny stav klastra a porovná ho so vstupom. Potom sa kód spustí cez socket na jednej z inštancií, čím sa klaster dostane do požadovaného stavu.
Výsledky
Dnes sme vysvetlili a predviedli, ako nasadiť aplikáciu do Tarantool Cartridge a nastaviť jednoduchú topológiu. Na to sme použili Ansible, výkonný a ľahko použiteľný nástroj, ktorý umožňuje súčasne konfigurovať viacero uzlov infraštruktúry (v našom prípade inštancie klastra).
Vyššie sme si popísali jeden z mnohých spôsobov, ako opísať konfiguráciu klastra pomocou Ansible. Keď budete pripravení pokračovať, preskúmajte ho na písanie herných príručiek. Možno vám bude pohodlnejšie spravovať topológiu pomocou group_vars и host_vars.
Veľmi skoro si vysvetlíme, ako natrvalo odstrániť (vylúčiť) inštancie z topológie, spustiť vshard, spravovať automatický režim záložného prepnutia, nakonfigurovať autorizáciu a opraviť konfiguráciu klastra. Medzitým si to môžete sami preskúmať. a experimentovať so zmenou parametrov klastra.
Ak niečo nefunguje, určite Povedzte nám o probléme. Rýchlo ho vyriešime!
Zdroj: hab.com
