Me berê jî li ser axivî
Balkêş? Wê hingê ji kerema xwe, di bin qutbûnê de, em ê ji we re vebêjin û her tiştî nîşanî we bidin.
Ka em bi mînakek dest pê bikin
Em ê tenê li beşek fonksiyona rola xwe binêrin. Hûn dikarin her gav ravekek bêkêmasî ya hemî jêhatîbûn û pîvanên têketinê tê de bibînin
Tarantool Cartridge heye api
и storage
, ku dikare ji bo nimûneyan were destnîşankirin.
Cartridge bixwe tiştek nabêje ka meriv çawa pêvajoyan dest pê dike, ew tenê şiyana mîhengkirina mînakên ku berê têne xebitandin peyda dike. Pêdivî ye ku bikarhêner bi xwe ya mayî bike: pelên mîhengê saz bike, karûbaran bide destpêkirin û topolojiyê mîheng bike. Lê em ê van hemûyan nekin; Ansible wê ji bo me bike.
Ji gotinan heta kirinan
Ji ber vê yekê, bila em serîlêdana xwe li du makîneyên virtual bicîh bikin û topolojîyek hêsan saz bikin:
- Replicaset
app-1
dê rola xwe pêk bîninapi
, ku rola xwe dihewînevshard-router
. Dê li vir tenê mînakek hebe. - Replicaset
storage-1
rolê pêk tînestorage
(û di heman demê devshard-storage
), li vir em ê du mînakan ji makîneyên cihê lê zêde bikin.
Ji bo ku em nimûneyê bimeşînin hewce ne
Rola xwe di nav de ye
Ka em bi mînakek depoyê klon bikin:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Em makîneyên virtual mezin dikin:
$ vagrant up
Rola kartêker a Tarantool saz bikin:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Rola sazkirî dest pê bikin:
$ ansible-playbook -i hosts.yml playbook.yml
Em li bendê ne ku pirtûka lîstikê temam bibe, biçin
Hûn dikarin daneyan barkirin. Cool, rast?
Naha em fêr bibin ka meriv çawa bi vê yekê re bixebite, û di heman demê de kopiyek din li topolojiyê zêde bike.
Werin em dest bi fêhmkirina wê bikin
Îcar çi qewimî?
Me du makîneyên virtual saz kirin û pirtûkek lîstikê ya bêkêmasî ya ku koma me mîheng kir da destpêkirin. Ka em li naveroka dosyayê binêrin 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
Tiştek balkêş li vir diqewime, bila em rolek berbiçav bi navê bidin destpêkirin tarantool.cartridge
.
Hemî tiştên herî girîng (ango, veavakirina komê) tê de cih digirin 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:
Tiştê ku em hewce ne ev e ku em fêr bibin ka meriv çawa bi guheztina naverokên vê pelê mînak û replikasetan îdare dike. Piştre em ê beşên nû lê zêde bikin. Ji bo ku hûn li ku derê lê zêde bikin tevlihev nebin, hûn dikarin li guhertoya dawî ya vê pelê binêrin, hosts.updated.yml
, ku di depoya nimûneyê de ye.
rêveberiya nimûne
Bi şertên Ansible, her mînakek mêvandarek e (ku bi serverek hardware re neyê tevlihev kirin), ango. girêka binesaziyê ya ku Ansible dê birêve bibe. Ji bo her mêvandar em dikarin pîvanên girêdanê diyar bikin (wek ansible_host
и ansible_user
), û her weha veavakirina nimûneyê. Danasîna mînakan di beşê de ye hosts
.
Ka em li veavakirina nimûneyê binêrin storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Di guherbar config
me pîvanên nimûne diyar kir - advertise URI
и HTTP port
.
Li jêr pîvanên nimûne hene app-1
и storage-1-replica
.
Pêdivî ye ku em ji bo her nimûneyê pîvanên pêwendiyê ji Ansible re vebêjin. Bi mentiqî xuya dike ku mînakan di komên makîneya virtual de kom bikin. Ji bo vê armancê, nimûne di koman de têne hev kirin host1
и host2
, û di her komê de di beşê de vars
nirx têne destnîşan kirin ansible_host
и ansible_user
ji bo yek makîneya virtual. Û di beşê de hosts
- mêvandar (wek mînak) ku di vê komê de cih digirin:
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:
Em dest bi guhertinê dikin hosts.yml
. Ka em du mînakên din lê zêde bikin, storage-2-replica
li ser yekem virtual machine û storage-2
Li ser duyemîn:
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: # <==
...
Pirtûka lîstikê ya ansible dest pê bikin:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Ji kerema xwe vebijarkê hişyar bikin --limit
. Ji ber ku her mînakek komê di şertên Ansible de mêvandar e, em dikarin bi eşkere diyar bikin ka kîjan mînak dema ku pirtûka lîstikê tê darve kirin divê werin mîheng kirin.
Vegere ser UI-ya Webê
Ka em li wir nesekinin û rêveberiya topolojiyê master bikin.
Rêveberiya topolojiyê
Werin em mînakên xwe yên nû di nav komek replica de berhev bikin storage-2
. Ka em komek nû lê zêde bikin replicaset_storage_2
û pîvanên replicaset di guhêrbarên wê de bi analojiya bi rave bike replicaset_storage_1
. Di beşa hosts
Ka em destnîşan bikin ka kîjan mînak dê di vê komê de cih bigirin (ango, berhevoka meya replika):
---
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:
Ka em dîsa dest bi lîstika lîstikê bikin:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Di parametreyê de --limit
Vê carê me navê koma ku bi replicaset me re têkildar derbas kir.
Werin em vebijarkê bifikirin tags
.
Rola me bi rêzdarî peywirên cihêreng pêk tîne, ku bi tagên jêrîn têne nîşankirin:
cartridge-instances
: rêveberiya nimûneyê (veavakirin, girêdana bi endamtiyê re);cartridge-replicasets
: rêveberiya topolojiyê (rêveberiya replicaset û rakirina daîmî (derxistina) mînakan ji komê);cartridge-config
: birêvebirina parametreyên din ên komê (bootstrapping vshard, moda têkçûna otomatîkî, parametreyên destûrnameyê û veavakirina serîlêdanê).
Em dikarin bi eşkere diyar bikin ka em dixwazin kîjan beşa xebatê bikin, wê hingê rol dê ji karên mayî derbas bibe. Di doza me de, em dixwazin tenê bi topolojiyê re bixebitin, ji ber vê yekê me diyar kir cartridge-replicasets
.
Werin em encama xebatên xwe binirxînin. Em li ser replikasetek nû dibînin
Hooray!
Bi guheztina veavakirina mînakan û setên replica ceribandinê bikin û bibînin ka topolojiya komê çawa diguhere. Hûn dikarin senaryoyên cûda yên xebitandinê biceribînin, mînakî. memtx_memory
. Rol dê hewl bide ku vê yekê bêyî destpêkirina nimûneyê ji nû ve bike da ku wextê gengaz a serîlêdana we kêm bike.
Ji bîr nekin ku birevin vagrant halt
ji bo rawestandina makîneyên virtual gava ku hûn bi wan re xebata xwe qedandin.
Û di bin hoodê de çi ye?
Li vir ez ê bêtir ji we re bibêjim ka di ceribandinên me de çi diqewime di bin kaxeza rola nesîb de.
Ka em gav bi gav li bicîhkirina serîlêdana Cartridge binêrin.
Sazkirina pakêtê û destpêkirina mînakan
Pêşî hûn hewce ne ku pakêtê radestî serverê bikin û saz bikin. Heya nuha rol dikare bi pakêtên RPM û DEB re bixebite.
Piştre em mînakan didin destpêkirin. Li vir her tişt pir hêsan e: her mînakek cûda ye systemd
-xizmetkar. Ez ê mînakek bidim te:
$ systemctl start myapp@storage-1
Ev ferman dê nimûneyê bide destpêkirin storage-1
apps myapp
. Mînaka hatî destpêkirin dê li wê bigere /etc/tarantool/conf.d/
. Têketinên nimûneyê dikarin bikar bînin journald
.
Pelê yekîneyê /etc/systemd/system/[email protected]
ji bo karûbarê systemd dê digel pakêtê were radest kirin.
Ansible ji bo sazkirina pakêtan û birêvebirina karûbarên pergalêd modulên çêkirî hene; me li vir tiştek nû îcad nekiriye.
Sazkirina topolojiya komê
Li vir kêfê dest pê dike. Bipejirînim, dê xerîb be ku meriv bi rola taybetî ya Ansible ji bo sazkirina pakêtan û xebitandinê aciz bibe systemd
-servîs.
Hûn dikarin komê bi destan mîheng bikin:
- Vebijarka yekem: UI-ya Webê vekin û li ser bişkokan bikirtînin. Ew ji bo destpêkek yek-carî ya çend mînakan pir maqûl e.
- Vebijarka duyemîn: hûn dikarin API-a GraphQl bikar bînin. Li vir hûn dikarin jixwe tiştek bixweber bikin, mînakî, skrîptek di Python de binivîsin.
- Vebijarka sêyemîn (ji bo îradeya bihêz): biçin serverê, bi yek ji mînakên ku bikar tînin ve girêdin
tarantoolctl connect
û bi modula Lua re hemî manipulasyonên pêwîst pêk bînincartridge
.
Erka sereke ya dahênana me ev e ku em tam vê yekê bikin, beşa herî dijwar a xebatê ji bo we.
Ansible destûrê dide te ku hûn modula xwe binivîsin û di rolek de bikar bînin. Rola me modulên weha bikar tîne da ku pêkhateyên cihêreng ên komê birêve bibe.
Çawa dixebite? Hûn rewşa xwestî ya komê di mîhengek daxuyandî de vedibêjin, û rol ji her module re beşa veavakirina xwe wekî têketinê peyda dike. Modul rewşa heyî ya komê distîne û wê bi ya ku wekî têketinê hatî wergirtin berhev dike. Dûv re, kodek bi navgîniya yek ji mînakan ve tê destpêkirin, ku komê digihîne rewşa xwestî.
Encam
Îro me got û destnîşan kir ka meriv çawa serîlêdana xwe li Tarantool Cartridge-ê bicîh dike û topolojîyek hêsan saz dike. Ji bo vê yekê, me Ansible bikar anî - amûrek hêzdar ku karanîna wê hêsan e û dihêle hûn bi hevdemî gelek girêkên binesaziyê mîheng bikin (di doza me de, mînakên komê).
Li jor me li yek ji gelek awayên danasîna veavakirina komê bi karanîna Ansible nihêrî. Gava ku hûn xwe amade hîs bikin ku biçin pêş, lêkolîn bikin group_vars
и host_vars
.
Di demek nêzîk de em ê ji we re vebêjin ka meriv çawa bi domdarî mînakan ji topolojiyê jêbirin (derdixe), vshard bootstrap, moda têkçûna otomatîkî birêve dibe, destûrnameyê mîheng dike û mîhengê komê pêça. Di vê navberê de, hûn dikarin bi tena serê xwe bixwînin
Ger tiştek nexebite, bê guman bikin
Source: www.habr.com