MÄs jau esam runÄjuÅ”i par
Interesanti? Tad, lÅ«dzu, zem griezuma mÄs jums visu pastÄstÄ«sim un parÄdÄ«sim.
SÄksim ar piemÄru
MÄs apskatÄ«sim tikai daļu no mÅ«su lomas funkcionalitÄtes. JÅ«s vienmÄr varat atrast pilnÄ«gu visu tÄ iespÄju un ievades parametru aprakstu
Tarantool kÄrtridÅ¾Ä ir api
Šø storage
, ko var pieŔķirt gadījumiem.
Kasetne pati par sevi neko nesaka par procesu palaiÅ”anu, tikai nodroÅ”ina iespÄju konfigurÄt jau darbojoÅ”Äs instances. PÄrÄjais lietotÄjam jÄdara paÅ”am: jÄsakÄrto konfigurÄcijas faili, jÄuzsÄk pakalpojumi un jÄkonfigurÄ topoloÄ£ija. Bet mÄs to visu nedarÄ«sim; Ansible to izdarÄ«s mÅ«su vietÄ.
No vÄrdiem uz darbiem
TÄtad, izvietosim savu lietojumprogrammu divÄs virtuÄlajÄs maŔīnÄs un iestatÄ«sim vienkÄrÅ”u topoloÄ£iju:
- Replicat
app-1
Ä«stenos lomuapi
, kas ietver lomuvshard-router
. Šeit būs tikai viens gadījums. - Replicat
storage-1
Ä«steno lomustorage
(un tajÄ paÅ”Ä laikÄvshard-storage
), Å”eit mÄs pievienosim divus gadÄ«jumus no dažÄdÄm iekÄrtÄm.
Lai palaistu mums vajadzÄ«go piemÄru
Pati loma ir iekÅ”Ä
KlonÄsim repozitoriju ar piemÄru:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
MÄs izvirzÄm virtuÄlÄs maŔīnas:
$ vagrant up
UzstÄdiet Tarantool kasetnes iespÄjamo lomu:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Palaidiet instalÄto lomu:
$ ansible-playbook -i hosts.yml playbook.yml
MÄs gaidÄm, lÄ«dz rokasgrÄmata pabeigs izpildi, dodieties uz
Varat augÅ”upielÄdÄt datus. ForÅ”i, vai ne?
Tagad izdomÄsim, kÄ ar to strÄdÄt, un tajÄ paÅ”Ä laikÄ topoloÄ£ijai pievienosim citu kopiju kopu.
SÄksim to izdomÄt
Kas tad notika?
MÄs iestatÄ«jÄm divas virtuÄlÄs maŔīnas un izlaidÄm iespÄjamu rokasgrÄmatu, kas konfigurÄja mÅ«su kopu. ApskatÄ«sim faila saturu 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
Nekas interesants te nenotiek, palaidÄ«sim saprÄtÄ«gu lomu ar nosaukumu tarantool.cartridge
.
Visas svarÄ«gÄkÄs lietas (proti, klastera konfigurÄcija) atrodas 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:
Viss, kas mums nepiecieÅ”ams, ir iemÄcÄ«ties pÄrvaldÄ«t gadÄ«jumus un replikÄtus, mainot Ŕī faila saturu. TÄlÄk mÄs tai pievienosim jaunas sadaļas. Lai neapjuktu, kur tos pievienot, varat apskatÄ«t Ŕī faila galÄ«go versiju, hosts.updated.yml
, kas atrodas piemÄru repozitorijÄ.
InstanÄu vadÄ«ba
Ansible izteiksmÄ katrs gadÄ«jums ir resursdators (nejaukt ar aparatÅ«ras serveri), t.i. infrastruktÅ«ras mezgls, ko Ansible pÄrvaldÄ«s. Katram resursdatoram mÄs varam norÄdÄ«t savienojuma parametrus (piemÄram, ansible_host
Šø ansible_user
), kÄ arÄ« instances konfigurÄciju. GadÄ«jumu apraksts ir sadaÄ¼Ä hosts
.
ApskatÄ«sim gadÄ«juma konfigurÄciju storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
MainÄ«gÄ config
mÄs norÄdÄ«jÄm gadÄ«juma parametrus - advertise URI
Šø HTTP port
.
TÄlÄk ir norÄdÄ«ti gadÄ«jumu parametri app-1
Šø storage-1-replica
.
Mums ir jÄpasaka Ansible savienojuma parametri katram gadÄ«jumam. Å Ä·iet loÄ£iski grupÄt gadÄ«jumus virtuÄlo maŔīnu grupÄs. Å im nolÅ«kam gadÄ«jumi tiek apvienoti grupÄs host1
Šø host2
, un katrÄ sadaÄ¼Ä sadaÄ¼Ä vars
vÄrtÄ«bas ir norÄdÄ«tas ansible_host
Šø ansible_user
vienai virtuÄlajai maŔīnai. Un sadaÄ¼Ä hosts
ā resursdatori (pazÄ«stami arÄ« kÄ gadÄ«jumi), kas ir iekļauti Å”ajÄ grupÄ:
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:
MÄs sÄkam mainÄ«ties hosts.yml
. Pievienosim vÄl divus gadÄ«jumus, storage-2-replica
pirmajÄ virtuÄlajÄ maŔīnÄ un storage-2
OtrajÄ:
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: # <==
...
Palaidiet iespÄjamo rokasgrÄmatu:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
LÅ«dzu, Åemiet vÄrÄ opciju --limit
. TÄ kÄ Ansible izteiksmÄ katrs klastera gadÄ«jums ir resursdators, mÄs varam skaidri norÄdÄ«t, kuri gadÄ«jumi ir jÄkonfigurÄ, izpildot rokasgrÄmatu.
AtgrieÅ”anÄs pie tÄ«mekļa lietotÄja interfeisa
NeapstÄsimies pie tÄ un apgÅ«sim topoloÄ£ijas pÄrvaldÄ«bu.
TopoloÄ£ijas pÄrvaldÄ«ba
Apvienosim savus jaunos gadÄ«jumus kopiju komplektÄ storage-2
. Pievienosim jaunu grupu replicaset_storage_2
un apraksta replicaset parametrus tÄ mainÄ«gajos pÄc analoÄ£ijas ar replicaset_storage_1
. SadaÄ¼Ä hosts
NorÄdÄ«sim, kuri gadÄ«jumi tiks iekļauti Å”ajÄ grupÄ (tas ir, mÅ«su kopiju komplektÄ):
---
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:
SÄksim no jauna rokasgrÄmatu:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
PÄc iespÄjas --limit
Å oreiz mÄs izturÄjÄm grupas nosaukumu, kas atbilst mÅ«su replikÄtam.
ApsvÄrsim variantu tags
.
MÅ«su loma secÄ«gi veic dažÄdus uzdevumus, kas ir atzÄ«mÄti ar Å”Ädiem tagiem:
cartridge-instances
: instanÄu pÄrvaldÄ«ba (konfigurÄcija, savienojums ar dalÄ«bu);cartridge-replicasets
: topoloÄ£ijas pÄrvaldÄ«ba (replikÄtu pÄrvaldÄ«ba un gadÄ«jumu pastÄvÄ«ga noÅemÅ”ana (izraidÄ«Å”ana) no klastera);cartridge-config
: citu klastera parametru pÄrvaldÄ«ba (vshard bootstrapping, automÄtiskais kļūmjpÄrlÄces režīms, autorizÄcijas parametri un lietojumprogrammas konfigurÄcija).
MÄs varam skaidri norÄdÄ«t, kuru darba daļu mÄs vÄlamies veikt, tad loma izlaidÄ«s pÄrÄjos uzdevumus. MÅ«su gadÄ«jumÄ mÄs vÄlamies strÄdÄt tikai ar topoloÄ£iju, tÄpÄc mÄs precizÄjÄm cartridge-replicasets
.
NovÄrtÄsim mÅ«su pūļu rezultÄtu. MÄs atrodam jaunu replikÄtu
UrÄ!
EksperimentÄjiet, mainot gadÄ«jumu un reprodukciju kopu konfigurÄciju, un skatiet, kÄ mainÄs klasteru topoloÄ£ija. Varat izmÄÄ£inÄt dažÄdus darbÄ«bas scenÄrijus, piem. memtx_memory
. Loma mÄÄ£inÄs to izdarÄ«t, nerestartÄjot gadÄ«jumu, lai samazinÄtu iespÄjamo jÅ«su lietojumprogrammas dÄ«kstÄvi.
Neaizmirsti skriet vagrant halt
lai apturÄtu virtuÄlÄs maŔīnas, kad esat pabeidzis darbu ar tÄm.
Un kas ir zem pÄrsega?
Å eit es jums pastÄstÄ«Å”u vairÄk par to, kas mÅ«su eksperimentu laikÄ notika zem ansible lomas pÄrsega.
Apskatīsim soli pa solim lietojumprogrammas Cartridge izvietoŔanu.
Pakotnes instalÄÅ”ana un gadÄ«jumu palaiÅ”ana
Vispirms jums ir jÄnogÄdÄ pakete uz serveri un jÄinstalÄ. PaÅ”laik loma var darboties ar RPM un DEB pakotnÄm.
TÄlÄk mÄs palaižam gadÄ«jumus. Å eit viss ir ļoti vienkÄrÅ”i: katrs gadÄ«jums ir atseviŔķs systemd
-apkalpoÅ”ana. Es sniegÅ”u jums piemÄru:
$ systemctl start myapp@storage-1
Šī komanda palaidīs instanci storage-1
progr myapp
. Palaistais gadÄ«jums meklÄs savu /etc/tarantool/conf.d/
. GadÄ«jumu žurnÄlus var apskatÄ«t, izmantojot journald
.
Vienības fails /etc/systemd/system/[email protected]
sistÄmai pakalpojums tiks piegÄdÄts kopÄ ar paku.
Ansible ir iebÅ«vÄti moduļi pakotÅu instalÄÅ”anai un sistÄmisko pakalpojumu pÄrvaldÄ«bai; mÄs Å”eit neesam izgudrojuÅ”i neko jaunu.
Klasteru topoloģijas iestatīŔana
Å eit sÄkas jautrÄ«ba. PiekrÄ«tu, bÅ«tu dÄ«vaini apnikt ar Ä«paÅ”u Ansible lomu pakotÅu instalÄÅ”anai un palaiÅ”anai systemd
-pakalpojumi.
Klasteru var konfigurÄt manuÄli:
- PirmÄ iespÄja: atveriet Web UI un noklikŔķiniet uz pogÄm. Tas ir diezgan piemÄrots vienreizÄjai vairÄku gadÄ«jumu sÄkumam.
- OtrÄ iespÄja: varat izmantot GraphQl API. Å eit jau var kaut ko automatizÄt, piemÄram, uzrakstÄ«t skriptu Python.
- TreÅ”Ä iespÄja (spÄcÄ«gajiem): dodieties uz serveri, izveidojiet savienojumu ar kÄdu no gadÄ«jumiem, izmantojot
tarantoolctl connect
un veiciet visas nepiecieÅ”amÄs manipulÄcijas ar Lua modulicartridge
.
MÅ«su izgudrojuma galvenais uzdevums ir paveikt tieÅ”i Å”o, visgrÅ«tÄko darba daļu jÅ«su vietÄ.
Ansible ļauj jums uzrakstÄ«t savu moduli un izmantot to lomÄ. MÅ«su loma izmanto Å”Ädus moduļus, lai pÄrvaldÄ«tu dažÄdus klastera komponentus.
KÄ tas strÄdÄ? JÅ«s aprakstÄt vÄlamo klastera stÄvokli deklaratÄ«vÄ konfigurÄcijÄ, un loma nodroÅ”ina katram modulim konfigurÄcijas sadaļu kÄ ievadi. Modulis saÅem klastera paÅ”reizÄjo stÄvokli un salÄ«dzina to ar to, kas tika saÅemts kÄ ievade. PÄc tam caur vienas instances ligzdu tiek palaists kods, kas nodroÅ”ina kopu vÄlamajÄ stÄvoklÄ«.
RezultÄti
Å odien mÄs stÄstÄ«jÄm un parÄdÄ«jÄm, kÄ izvietot lietojumprogrammu Tarantool Cartridge un iestatÄ«t vienkÄrÅ”u topoloÄ£iju. Lai to izdarÄ«tu, mÄs izmantojÄm Ansible ā jaudÄ«gu rÄ«ku, kas ir viegli lietojams un ļauj vienlaikus konfigurÄt daudzus infrastruktÅ«ras mezglus (mÅ«su gadÄ«jumÄ ā klasteru gadÄ«jumus).
IepriekÅ” mÄs apskatÄ«jÄm vienu no daudzajiem veidiem, kÄ aprakstÄ«t klastera konfigurÄciju, izmantojot Ansible. Kad jÅ«taties gatavs doties tÄlÄk, izpÄtiet group_vars
Šø host_vars
.
Ä»oti drÄ«z mÄs jums pateiksim, kÄ neatgriezeniski dzÄst (izraidÄ«t) gadÄ«jumus no topoloÄ£ijas, bootstrap vshard, pÄrvaldÄ«t automÄtisko kļūmjpÄrlÄces režīmu, konfigurÄt autorizÄciju un izlabot klastera konfigurÄciju. TikmÄr jÅ«s varat mÄcÄ«ties patstÄvÄ«gi
Ja kaut kas nedarbojas, noteikti
Avots: www.habr.com