Diġà tkellimna dwarhom
Interessanti? Imbagħad jekk jogħġbok, taħt il-qatgħa, ngħidulek u nuruk kollox.
Nibdew b'eżempju
Aħna se nħarsu biss lejn parti mill-funzjonalità tar-rwol tagħna. Dejjem tista' ssib deskrizzjoni sħiħa tal-kapaċitajiet kollha tagħha u l-parametri tad-dħul
Tarantool Skartoċċ għandu api
и storage
, li jistgħu jiġu assenjati lill-istanzi.
L-iskartoċċ innifsu ma jgħid xejn dwar kif tniedi proċessi, jipprovdi biss il-ħila li jiġi kkonfigurat istanzi li diġà qed jaħdmu. L-utent għandu jagħmel il-bqija hu stess: jirranġa fajls ta 'konfigurazzjoni, jibda s-servizzi u kkonfigura t-topoloġija. Imma dan kollu mhux se nagħmlu; Ansible se jagħmel dan għalina.
Mill-kliem għall-fatti
Allura, ejja nużaw l-applikazzjoni tagħna għal żewġ magni virtwali u waqqaf topoloġija sempliċi:
- Replicaset
app-1
se timplimenta r-rwolapi
, li jinkludi r-rwolvshard-router
. Hawn se jkun hemm istanza waħda biss. - Replicaset
storage-1
jimplimenta r-rwolstorage
(u fl-istess ħinvshard-storage
), hawnhekk se nżidu żewġ każijiet minn magni differenti.
Biex inmexxu l-eżempju li għandna bżonn
Ir-rwol innifsu huwa fih
Ejja nikklonu r-repożitorju b'eżempju:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Aħna ngħollu magni virtwali:
$ vagrant up
Installa r-rwol ansible tal-Cartridge Tarantool:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Niedi r-rwol installat:
$ ansible-playbook -i hosts.yml playbook.yml
Nistennew li l-playbook jitlesta l-eżekuzzjoni, mur
Tista 'ttella' data. Kessaħ, hux?
Issa ejja nsemmu kif naħdmu ma 'dan, u fl-istess ħin żid sett replika ieħor mat-topoloġija.
Ejja nibdew insemmu
Allura x'ġara?
Waqqafna żewġ magni virtwali u nedejna playbook ansible li kkonfigura l-cluster tagħna. Ejja nħarsu lejn il-kontenut tal-fajl 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
Ma jiġri xejn interessanti hawn, ejja nniedu rwol ansible msejjaħ tarantool.cartridge
.
L-aktar affarijiet importanti kollha (jiġifieri, il-konfigurazzjoni tal-cluster) jinsabu fihom 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:
Kulma għandna bżonn huwa li nitgħallmu kif timmaniġġja l-istanzi u r-repliki billi nbiddlu l-kontenut ta’ dan il-fajl. Sussegwentement inżidu sezzjonijiet ġodda magħha. Sabiex ma titħawwadx fejn iżżidhom, tista' tħares lejn il-verżjoni finali ta' dan il-fajl, hosts.updated.yml
, li jinsab fir-repożitorju tal-eżempju.
Ġestjoni tal-istanza
F'termini Ansible, kull istanza hija host (ma tridx tiġi konfuża ma' server hardware), i.e. in-node infrastrutturali li Ansible se jamministra. Għal kull host nistgħu nispeċifikaw il-parametri tal-konnessjoni (bħal ansible_host
и ansible_user
), kif ukoll il-konfigurazzjoni tal-istanza. Deskrizzjoni tal-każijiet tinsab fit-taqsima hosts
.
Ejja nħarsu lejn il-konfigurazzjoni tal-istanza storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Fil-varjabbli config
speċifikajna l-parametri tal-istanza - advertise URI
и HTTP port
.
Hawn taħt jinsabu l-parametri tal-istanza app-1
и storage-1-replica
.
Irridu ngħidu lil Ansible il-parametri tal-konnessjoni għal kull istanza. Jidher loġiku li l-istanzi jiġu miġbura fi gruppi ta 'magni virtwali. Għal dan il-għan, l-istanzi huma magħquda fi gruppi host1
и host2
, u f'kull grupp fit-taqsima vars
valuri huma indikati ansible_host
и ansible_user
għal magna virtwali waħda. U fit-taqsima hosts
— hosts (magħruf ukoll bħala każijiet) li huma inklużi f'dan il-grupp:
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:
Nibdew inbiddlu hosts.yml
. Ejja nżidu żewġ każijiet oħra, storage-2-replica
fuq l-ewwel magna virtwali u storage-2
Fit-tieni:
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: # <==
...
Nieda l-playbook ansible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Jekk jogħġbok innota l-għażla --limit
. Peress li kull istanza ta 'cluster hija ospitanti f'termini Ansible, nistgħu nispeċifikaw b'mod espliċitu liema istanzi għandhom jiġu kkonfigurati meta tesegwixxi l-playbook.
Tmur lura għall-UI tal-Web
Ejja ma nieqfux hemm u nikkontrollaw il-ġestjoni tat-topoloġija.
Ġestjoni tat-topoloġija
Ejja ngħaqqdu l-istanzi l-ġodda tagħna f'sett replika storage-2
. Ejja nżidu grupp ġdid replicaset_storage_2
u ddeskrivi l-parametri replicaset fil-varjabbli tagħha b'analoġija ma' replicaset_storage_1
. Fit-taqsima hosts
Ejja nindikaw liema każijiet se jiġu inklużi f'dan il-grupp (jiġifieri, is-sett tar-repliki tagħna):
---
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:
Ejja nerġgħu nibdew il-playbook:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Għal kull parametru --limit
Din id-darba għadda l-isem tal-grupp li jikkorrispondi għar-replikaset tagħna.
Ejja nikkunsidraw l-għażla tags
.
Ir-rwol tagħna sekwenzjali jwettaq diversi kompiti, li huma mmarkati bit-tikketti li ġejjin:
cartridge-instances
: ġestjoni tal-istanzi (konfigurazzjoni, konnessjoni mas-sħubija);cartridge-replicasets
: ġestjoni tat-topoloġija (ġestjoni ta' replicaset u tneħħija permanenti (tkeċċija) ta' istanzi mill-cluster);cartridge-config
: ġestjoni ta' parametri oħra ta' cluster (vshard bootstrapping, mod awtomatiku ta' failover, parametri ta' awtorizzazzjoni u konfigurazzjoni ta' applikazzjoni).
Nistgħu nispeċifikaw b'mod espliċitu liema parti tax-xogħol irridu nagħmlu, allura r-rwol se taqbeż il-bqija tal-kompiti. Fil-każ tagħna, irridu naħdmu biss mat-topoloġija, għalhekk speċifikajna cartridge-replicasets
.
Ejja nevalwaw ir-riżultat tal-isforzi tagħna. Insibu replicaset ġdid fuq
Hooray!
Esperimenta bil-bdil tal-konfigurazzjoni ta 'istanzi u settijiet ta' repliki u ara kif tinbidel it-topoloġija tal-cluster. Tista' tipprova xenarji operattivi differenti, eż. memtx_memory
. Ir-rwol se jipprova jagħmel dan mingħajr ma jerġa' jibda l-istanza sabiex inaqqas il-perijodi ta' waqfien possibbli tal-applikazzjoni tiegħek.
Tinsiex tiġri vagrant halt
biex twaqqaf il-magni virtwali meta tkun spiċċajt taħdem magħhom.
U x’hemm taħt il-kappa?
Hawnhekk ser ngħidlek aktar dwar dak li kien qed jiġri taħt il-barnuża tar-rwol ansible matul l-esperimenti tagħna.
Ejja nħarsu lejn l-iskjerament tal-applikazzjoni tal-Iskartoċċ pass pass.
L-installazzjoni tal-pakkett u l-istanzi tal-bidu
L-ewwel trid twassal il-pakkett lis-server u tinstallah. Bħalissa r-rwol jista 'jaħdem ma' pakketti RPM u DEB.
Sussegwentement inniedu l-istanzi. Hawnhekk kollox huwa sempliċi ħafna: kull istanza hija separata systemd
-servizz. Nagħtik eżempju:
$ systemctl start myapp@storage-1
Dan il-kmand se jniedi l-istanza storage-1
apps myapp
. L-istanza mnedija se tfittex tagħha /etc/tarantool/conf.d/
. Istanza zkuk jistgħu jitqiesu bl-użu journald
.
Fajl tal-unità /etc/systemd/system/[email protected]
għas-servizz systemd se jitwassal flimkien mal-pakkett.
Ansible għandu moduli integrati għall-installazzjoni tal-pakketti u l-ġestjoni tas-servizzi tas-sistema; hawn ma ivvintajna xejn ġdid.
Twaqqif ta' topoloġija ta' cluster
Dan huwa fejn jibda l-gost. Naqbel, ikun stramba li tolqot bi rwol speċjali ta 'Ansible għall-installazzjoni ta' pakketti u t-tħaddim systemd
-servizzi.
Tista' tikkonfigura l-cluster manwalment:
- L-ewwel għażla: tiftaħ il-Web UI u kklikkja fuq il-buttuni. Huwa pjuttost adattat għal bidu ta 'darba ta' diversi każijiet.
- It-tieni għażla: tista 'tuża l-API GraphQl. Hawnhekk diġà tista 'awtomatizza xi ħaġa, pereżempju, tikteb skript f'Python.
- It-tielet għażla (għal rieda qawwija): mur fis-server, qabbad ma 'wieħed mill-istanzi bl-użu
tarantoolctl connect
u wettaq il-manipulazzjonijiet kollha meħtieġa bil-modulu Luacartridge
.
Il-kompitu ewlieni tal-invenzjoni tagħna huwa li tagħmel eżattament dan, l-aktar parti diffiċli tax-xogħol għalik.
Ansible jippermettilek tikteb il-modulu tiegħek stess u tużah fi rwol. Ir-rwol tagħna juża moduli bħal dawn biex jimmaniġġjaw diversi komponenti tal-clusters.
Kif taħdem? Inti tiddeskrivi l-istat mixtieq tal-cluster f'konfigurazzjoni dikjarattiva, u r-rwol jipprovdi lil kull modulu bit-taqsima tal-konfigurazzjoni tiegħu bħala input. Il-modulu jirċievi l-istat attwali tar-raggruppament u jqabbel ma' dak li ġie riċevut bħala input. Sussegwentement, jiġi mniedi kodiċi permezz tas-sokit ta 'wieħed mill-istanzi, li jġib il-cluster fl-istat mixtieq.
Riżultati ta '
Illum għedna u wrejna kif tuża l-applikazzjoni tiegħek għal Tarantool Cartridge u twaqqaf topoloġija sempliċi. Biex tagħmel dan, użajna Ansible - għodda b'saħħitha li hija faċli biex tużah u tippermettilek tikkonfigura simultanjament ħafna nodi tal-infrastruttura (fil-każ tagħna, istanzi ta 'clusters).
Hawn fuq ħares lejn wieħed mill-ħafna modi kif niddeskrivu konfigurazzjoni ta 'cluster bl-użu ta' Ansible. Ladarba tħossok lest biex timxi 'l quddiem, esplora group_vars
и host_vars
.
Dalwaqt ngħidulek kif tħassar (tkeċċi) istanzi mit-topoloġija b'mod permanenti, bootstrap vshard, timmaniġġja l-modalità ta' failover awtomatiku, tikkonfigura l-awtorizzazzjoni u twaħħal il-konfigurazzjoni tal-cluster. Sadanittant, tista' tistudja waħdek
Jekk xi ħaġa ma taħdimx, kun żgur li
Sors: www.habr.com