Olemme jo puhuneet
Mielenkiintoista? Sitten kysyn alaspäin, kerromme ja näytämme kaiken.
Aloitetaan esimerkillä
Katamme vain osan roolimme toimivuudesta. Löydät aina täydellisen kuvauksen kaikista sen ominaisuuksista ja syöttöparametreista
Tarantool-patruunassa on api
и storage
jotka voidaan määrittää ilmentymille.
Kasetti itsessään ei kerro mitään prosessien käynnistämisestä, se tarjoaa vain mahdollisuuden määrittää jo käynnissä olevat ilmentymät. Käyttäjän tulee tehdä loput itse: hajottaa konfiguraatiotiedostot, käynnistää palvelut ja asettaa topologia. Mutta me emme tee kaikkea tätä, Ansible tekee sen puolestamme.
Sanoista tekoihin
Joten otetaan käyttöön sovelluksemme kahdelle virtuaalikoneelle ja määritetään yksinkertainen topologia:
- Replicaset
app-1
tulee näyttelemään rooliaapi
joka sisältää roolinvshard-router
. Tässä on vain yksi tapaus. - replikaatti
storage-1
toteuttaa rooliastorage
(ja samallavshard-storage
), lisäämme tähän kaksi esiintymää eri koneista.
Jotta voimme suorittaa esimerkin, tarvitsemme
Rooli itsessään on
Kloonaa arkisto esimerkin avulla:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Kasvatamme virtuaalikoneita:
$ vagrant up
Asenna Tarantool-kasetti sopiva rooli:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Suorita asennettu rooli:
$ ansible-playbook -i hosts.yml playbook.yml
Odotamme pelikirjan suorittamisen loppua, siirry kohtaan
Voit kaataa tietoja. Siistiä, eikö?
Selvitetään nyt, kuinka työskennellä tämän kanssa, ja samalla lisätään toinen kopiojoukko topologiaan.
Alamme ymmärtää
Mitä tapahtui?
Meillä on kaksi virtuaalikonetta ja käytössämme mahdollinen ohjekirja, joka perusti klusterin. Katsotaanpa tiedoston sisältöä 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.cartridge
Täällä ei tapahdu mitään mielenkiintoista, aloitamme ansible-roolin, jota kutsutaan tarantool.cartridge
.
Kaikki tärkeimmät (eli klusterin kokoonpano) sijaitsevat sisällä 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:
Tarvitsemme vain oppia hallitsemaan ilmentymiä ja kopioita muuttamalla tämän tiedoston sisältöä. Seuraavaksi lisäämme siihen uusia osioita. Jotta et joutuisi hämmennyksiin, mihin ne lisätään, voit kurkistaa tämän tiedoston lopulliseen versioon, hosts.updated.yml
, joka on esimerkkiarkistossa.
Instanssien hallinta
Ansiblen kannalta jokainen esiintymä on isäntä (ei pidä sekoittaa rautapalvelimeen), ts. infrastruktuurisolmu, jota Ansible hallitsee. Jokaiselle isännälle voimme määrittää yhteysparametrit (esim ansible_host
и ansible_user
), sekä ilmentymän kokoonpano. Esineiden kuvaus on osiossa hosts
.
Harkitse esiintymän kokoonpanoa storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Muuttujassa config
määritimme esiintymän parametrit - advertise URI
и HTTP port
.
Alla on esiintymän parametrit app-1
и storage-1-replica
.
Meidän on kerrottava Ansiblelle kunkin esiintymän yhteysparametrit. Näyttää loogiselta ryhmitellä esiintymät virtuaalikoneen ryhmiin. Tätä varten esiintymät yhdistetään ryhmiin. host1
и host2
, ja osion jokaisessa ryhmässä vars
arvot ansible_host
и ansible_user
yhdelle virtuaalikoneelle. Ja osiossa hosts
- isännät (ne ovat esiintymiä), jotka sisältyvät tähän ryhmään:
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:
Alamme muuttua hosts.yml
. Lisätään vielä kaksi tapausta, storage-2-replica
ensimmäisessä virtuaalikoneessa ja storage-2
Toisessa:
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: # <==
...
Suorita mahdollinen pelikirja:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Kiinnitä huomiota vaihtoehtoon --limit
. Koska jokainen klusterin ilmentymä on Ansible-termeillä isäntä, voimme nimenomaisesti määrittää, mitkä esiintymät tulee määrittää pelikirjaa suoritettaessa.
Takaisin verkkokäyttöliittymään
Emme jää lepäämään laakereillaan ja hallitsemme topologian hallinnan.
Topologian hallinta
Yhdistetään uudet ilmentymät replikasetiksi storage-2
. Lisää uusi ryhmä replicaset_storage_2
ja kuvaa muuttujissaan replikasetin parametrit analogisesti kanssa replicaset_storage_1
. Osassa hosts
määritä, mitkä esiintymät sisällytetään tähän ryhmään (eli kopiosarjamme):
---
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:
Aloitetaan pelikirja uudelleen:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Vaihtoehtokohtaisesti --limit
ohitimme tällä kertaa replikaattiamme vastaavan ryhmän nimen.
Harkitse vaihtoehtoa tags
.
Roolimme suorittaa peräkkäin erilaisia tehtäviä, jotka on merkitty seuraavilla tunnisteilla:
cartridge-instances
: ilmentymien hallinta (konfigurointi, liittyminen jäsenyyteen);cartridge-replicasets
: topologian hallinta (replikaattien hallinta ja ilmentymien pysyvä poistaminen (poistaminen) klusterista);cartridge-config
: hallitse muita klusterin parametreja (vshard bootstrapping, automaattinen vikasietotila, valtuutusparametrit ja sovelluskokoonpano).
Voimme määritellä tarkasti, minkä osan työstä haluamme tehdä, jolloin rooli ohittaa loput tehtävät. Meidän tapauksessamme haluamme työskennellä vain topologian kanssa, joten määritimme cartridge-replicasets
.
Arvioidaan ponnistelujemme tulosta. Etsitään uutta replikaattia
Hurraa!
Kokeile ilmentymien ja replikaattien uudelleenmäärittämistä ja katso, miten klusterin topologia muuttuu. Voit kokeilla erilaisia toimintaskenaarioita, esim. memtx_memory
. Rooli yrittää tehdä tämän käynnistämättä ilmentymää uudelleen lyhentääkseen sovelluksesi mahdollista seisonta-aikaa.
Älä unohda juosta vagrant halt
pysäyttääksesi virtuaalikoneet, kun olet lopettanut niiden käytön.
Mitä konepellin alla on?
Täällä kerron lisää siitä, mitä tapahtui ansiblen roolin alla kokeidemme aikana.
Katsotaanpa kasettisovelluksen käyttöönottoa vaihe vaiheelta.
Paketin asennus ja ilmentymien käynnistäminen
Ensin sinun on toimitettava paketti palvelimelle ja asennettava se. Nyt rooli voi toimia RPM- ja DEB-pakettien kanssa.
Seuraavaksi käynnistämme esiintymät. Kaikki on täällä hyvin yksinkertaista: jokainen esiintymä on erillinen systemd
-palvelu. Puhun esimerkistä:
$ systemctl start myapp@storage-1
Tämä komento käynnistää ilmentymän storage-1
приложения myapp
. Käynnistetty ilmentymä etsii sen /etc/tarantool/conf.d/
. Instanssilokeja voi tarkastella käyttämällä journald
.
Yksikkötiedosto /etc/systemd/system/[email protected]
järjestelmäpalvelulle toimitetaan paketin mukana.
Ansiblessa on sisäänrakennetut moduulit pakettien asentamiseen ja järjestelmäpalvelujen hallintaan, emme ole keksineet mitään uutta täällä.
Klusterin topologian määrittäminen
Ja tästä alkaa mielenkiintoisin. Samaa mieltä, olisi outoa vaivautua erityiseen mahdolliseen rooliin pakettien asentamiseen ja suorittamiseen systemd
-palvelut.
Voit määrittää klusterin manuaalisesti:
- Ensimmäinen vaihtoehto: avaa verkkokäyttöliittymä ja napsauta painikkeita. Se on varsin sopiva useiden tapausten kertakäynnistykseen.
- Toinen vaihtoehto: voit käyttää GraphQl API:ta. Täällä voit jo automatisoida jotain, esimerkiksi kirjoittaa skriptin Pythonissa.
- Kolmas vaihtoehto (vahville henkisille): mene palvelimelle, muodosta yhteys johonkin käyttävistä instansseista
tarantoolctl connect
ja suorita kaikki tarvittavat käsittelyt Lua-moduulillacartridge
.
Keksintömme päätehtävä on tehdä tämä, työn vaikein osa sinulle.
Ansible antaa sinun kirjoittaa oman moduulisi ja käyttää sitä roolissa. Roolimme käyttää näitä moduuleja klusterin eri komponenttien hallintaan.
Kuinka se toimii? Kuvaat klusterin halutun tilan deklaratiivisessa konfiguraatiossa, ja rooli antaa jokaiselle moduulille sen määritysosion syötteenä. Moduuli vastaanottaa klusterin nykyisen tilan ja vertaa sitä tuloon. Seuraavaksi koodi ajetaan yhden ilmentymän socketin läpi, joka tuo klusterin haluttuun tilaan.
Tulokset
Tänään kerroimme ja näytimme, kuinka voit ottaa sovelluksesi käyttöön Tarantool Cartridgessa ja määrittää yksinkertaisen topologian. Tätä varten käytimme Ansiblea, tehokasta työkalua, jota on helppo käyttää ja jonka avulla voit määrittää samanaikaisesti useita infrastruktuurisolmuja (meidän tapauksessamme nämä ovat klusteriesiintymiä).
Yllä käsittelimme yhtä monista tavoista kuvata klusterin kokoonpanoa Ansiblen avulla. Kun tiedät, että olet valmis jatkamaan, opi group_vars
и host_vars
.
Hyvin pian kerromme sinulle kuinka poistaa (poistaa) ilmentymiä pysyvästi topologiasta, bootstrap vshard, hallita automaattista vikasietotilaa, määrittää valtuutus ja korjata klusterin konfiguraatio. Sillä välin voit opiskella itsenäisesti
Jos jokin ei toimi, varmista
Lähde: will.com