
Rydym eisoes wedi siarad am , sy'n eich galluogi i ddatblygu cymwysiadau dosbarthedig a'u pecynnu. Y cyfan sydd ar ôl yw dysgu sut i ddefnyddio a rheoli'r cymwysiadau hyn. Peidiwch â phoeni, rydym wedi rhoi sylw i chi! Rydym wedi llunio'r holl arferion gorau ar gyfer gweithio gyda Tarantool Cartridge ac wedi ysgrifennu , a fydd yn dosbarthu'r pecyn i weinyddion, yn cychwyn achosion, yn eu cyfuno'n glwstwr, yn ffurfweddu awdurdodiad, yn cychwyn vshard, yn galluogi methiant drosodd awtomatig, ac yn clytio ffurfweddiad y clwstwr.
 diddordeb? Yna darllenwch ymlaen, byddwn yn dweud wrthych ac yn dangos popeth i chi.
Gadewch i ni ddechrau gydag enghraifft
Dim ond rhan o swyddogaethau ein rôl y byddwn yn eu trafod. Gellir dod o hyd i ddisgrifiad llawn o'i holl alluoedd a pharamedrau mewnbwn bob amser yn Ond mae'n well rhoi cynnig arni unwaith na gweld cant o weithiau, felly gadewch i ni ddefnyddio cymhwysiad bach.
Mae gan Gartrid Tarantool I greu cymhwysiad Cartridge bach sy'n storio gwybodaeth am gleientiaid banc a'u cyfrifon ac yn darparu API ar gyfer rheoli data trwy HTTP. I gyflawni hyn, mae'r cymhwysiad yn disgrifio dau rôl bosibl: api и storage, y gellir ei aseinio i achosion.
Nid yw Cartridge ei hun yn esbonio sut i lansio prosesau; dim ond y gallu i ffurfweddu enghreifftiau sydd eisoes yn rhedeg y mae'n ei ddarparu. Rhaid i'r defnyddiwr wneud y gweddill ei hun: defnyddio ffeiliau ffurfweddu, cychwyn gwasanaethau, a ffurfweddu'r topoleg. Ond ni fyddwn yn gwneud hynny i gyd; bydd Ansible yn ei wneud i ni.
O eiriau i weithredoedd
Felly, gadewch i ni ddefnyddio ein cymhwysiad ar ddau beiriant rhithwir a sefydlu topoleg syml:
- Set Atgynhyrchu
app-1fydd yn gweithredu'r rôlapi, sy'n cynnwys y rôlvshard-routerDim ond un enghraifft fydd yma. - Set Atgynhyrchu
storage-1yn sylweddoli'r rôlstorage(ac ar yr un prydvshard-storage), byddwn yn ychwanegu dau achos o wahanol beiriannau yma.

I redeg yr enghraifft bydd angen i ni и (fersiwn 2.8 neu'n ddiweddarach).
Mae'r rôl ei hun yn Mae hon yn storfa sy'n eich galluogi i rannu eich datblygiadau a defnyddio rolau parod.
Gadewch i ni glonio'r storfa enghreifftiol:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0Rydym yn codi peiriannau rhithwir:
$ vagrant upGosodwch rôl Ansible Cartridge Tarantool:
$ ansible-galaxy install tarantool.cartridge,1.0.1Gadewch i ni lansio'r rôl sydd wedi'i gosod:
$ ansible-playbook -i hosts.yml playbook.ymlRydym yn aros i'r llyfr chwarae gwblhau, yna'n mynd i a mwynhau'r canlyniad:

Gallwch chi dywallt data. Cŵl, iawn?
Nawr gadewch i ni ddarganfod sut i weithio gyda hyn, ac ar yr un pryd ychwanegu set replica arall at y topoleg.
Gadewch i ni ddechrau ei ddarganfod
Felly beth ddigwyddodd?
Rydym wedi sefydlu dau beiriant rhithwir ac wedi rhedeg y llyfr chwarae Ansible a ffurfweddodd ein clwstwr. Gadewch i ni edrych ar gynnwys y ffeil. 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.cartridgeDoes dim byd diddorol yn digwydd yma, rydyn ni'n lansio'r rôl atebol o'r enw tarantool.cartridge.
Mae'r holl bethau pwysicaf (sef, ffurfweddiad y clwstwr) ynddo -ffeil 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:Y cyfan sydd angen i ni ei wneud yw dysgu sut i reoli achosion a setiau replica trwy newid cynnwys y ffeil hon. Byddwn yn ychwanegu adrannau newydd ati yn ddiweddarach. Er mwyn osgoi dryswch ynghylch ble i'w hychwanegu, gallwch gyfeirio at y fersiwn derfynol o'r ffeil hon. hosts.updated.yml, sydd wedi'i leoli yn y storfa enghreifftiol.
Rheoli achosion
Yn nhermau Ansible, mae pob achos yn westeiwr (peidiwch â'i gymysgu â gweinydd caledwedd), h.y., nod seilwaith y bydd Ansible yn ei reoli. Ar gyfer pob gwesteiwr, gallwn nodi paramedrau cysylltiad (megis ansible_host и ansible_user), yn ogystal â chyfluniad yr achos. Mae disgrifiadau o achosion yn yr adran hosts.
Gadewch i ni edrych ar gyfluniad yr enghraifft storage-1:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...Yn amrywiol config fe wnaethon ni nodi'r paramedrau enghraifft - advertise URI и HTTP port.
Isod mae'r paramedrau enghraifft app-1 и storage-1-replica.
Mae angen i ni ddweud wrth Ansible y paramedrau cysylltiad ar gyfer pob achos. Mae'n ymddangos yn rhesymegol grwpio achosion yn ôl peiriant rhithwir. At y diben hwn, mae achosion yn cael eu grwpio. host1 и host2, ac ym mhob grŵp yn yr adran vars nodir gwerthoedd ansible_host и ansible_user ar gyfer un peiriant rhithwir. Ac yn yr adran hosts — gwesteiwyr (a elwir hefyd yn achosion) sy'n rhan o'r grŵp hwn:
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:Rydym yn dechrau newid hosts.ymlGadewch i ni ychwanegu dau enghraifft arall, storage-2-replica ar y peiriant rhithwir cyntaf a storage-2 ar yr ail:
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: # <==
...Gadewch i ni redeg llyfr chwarae Ansible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.ymlNodwch yr opsiwn os gwelwch yn dda --limitGan fod pob enghraifft o glwstwr yn westeiwr yn nhermau Ansible, gallwn nodi'n benodol pa achosion y dylid eu ffurfweddu wrth weithredu llyfr chwarae.
Gadewch i ni fynd yn ôl at y rhyngwyneb gwe ac rydym yn gweld ein hachosion newydd:

Gadewch i ni beidio â stopio yno a meistroli rheoli topoleg.
Rheoli topoleg
Gadewch i ni gyfuno ein hachosion newydd yn set atgynhyrchu storage-2Gadewch i ni ychwanegu grŵp newydd. replicaset_storage_2 a byddwn yn disgrifio paramedrau'r set replica yn ei newidynnau trwy analogiaeth â replicaset_storage_1. Yn adran hosts Gadewch i ni nodi pa achosion fydd yn cael eu cynnwys yn y grŵp hwn (hynny yw, ein set atgynhyrchiadau):
---
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:Gadewch i ni redeg y llyfr chwarae eto:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.ymlYn y paramedr --limit Y tro hwn fe wnaethon ni basio enw'r grŵp sy'n cyfateb i'n set replica.
Gadewch i ni ystyried yr opsiwn tags.
Mae ein rôl yn cyflawni amrywiol dasgau yn olynol, sydd wedi'u labelu â'r tagiau canlynol:
cartridge-instancesrheoli achosion (ffurfweddu, cysylltiad ag aelodaeth);cartridge-replicasets: rheoli topoleg (rheoli setiau replica a dileu (gwrthod) achosion o'r clwstwr yn barhaol);cartridge-config: rheoli paramedrau clwstwr eraill (bootstrapping vshard, modd methiant awtomatig, paramedrau awdurdodi a ffurfweddiad cymhwysiad).
Gallwn nodi'n benodol pa ran o'r gwaith yr ydym am ei chyflawni, ac yna bydd y rôl yn hepgor gweddill y tasgau. Yn ein hachos ni, dim ond gyda'r topoleg yr ydym am weithio, felly fe wnaethom nodi cartridge-replicasets.
Gadewch i ni werthuso canlyniadau ein hymdrechion. Rydym yn dod o hyd i set replica newydd ar .

Hwre!
Arbrofwch gyda newid ffurfweddiadau setiau enghreifftiau a replicâu a gweld sut mae topoleg y clwstwr yn newid. Gallwch roi cynnig ar wahanol senarios gweithredol, fel: neu gynyddu memtx_memoryBydd y rôl yn ceisio gwneud hyn heb ailgychwyn yr achos er mwyn lleihau amser segur posibl ar gyfer eich cymhwysiad.
Peidiwch ag anghofio rhedeg vagrant halti atal y peiriannau rhithwir pan fyddwch wedi gorffen gweithio gyda nhw.
Beth sydd o dan y cwfl?
Yma byddaf yn manylu mwy am yr hyn oedd yn digwydd o dan gwfl rôl Ansible yn ystod ein harbrofion.
Gadewch i ni edrych ar y camau ar gyfer defnyddio cymhwysiad Cartridge.
Gosod y pecyn a chychwyn achosion
Yn gyntaf, mae angen i chi ddanfon y pecyn i'r gweinydd a'i osod. Ar hyn o bryd, gall y rôl weithio gyda phecynnau RPM a DEB.
Nesaf, rydym yn lansio'r enghreifftiau. Mae'r cyfan yn syml iawn: mae pob enghraifft yn un ar wahân. systemd-gwasanaeth. Byddaf yn egluro gydag enghraifft:
$ systemctl start myapp@storage-1Bydd y gorchymyn hwn yn cychwyn yr enghraifft. storage-1 apps myappBydd yr achos a lansiwyd yn chwilio am ei в /etc/tarantool/conf.d/Gellir gweld logiau enghreifftiau gan ddefnyddio journald.
Ffeil uned /etc/systemd/system/myapp@.sevice ar gyfer y gwasanaeth systemd bydd yn cael ei gyflwyno ynghyd â'r pecyn.
Mae gan Ansible fodiwlau adeiledig ar gyfer gosod pecynnau a rheoli gwasanaethau systemd, ond nid ydym wedi dyfeisio unrhyw beth newydd yma.
Ffurfweddu topoleg clwstwr
A dyma lle mae pethau'n mynd yn ddiddorol. Byddwch chi'n cytuno, byddai'n rhyfedd trafferthu gyda rôl Ansible arbennig ar gyfer gosod pecynnau a rhedeg systemd-gwasanaethau.
Gallwch chi ffurfweddu'r clwstwr â llaw:
- Y dewis cyntaf: agorwch y rhyngwyneb gwe a chliciwch ar y botymau. Mae hyn yn iawn ar gyfer lansio sawl achos unwaith.
- Yr ail opsiwn yw defnyddio'r API GraphQl. Mae hyn yn caniatáu awtomeiddio, fel ysgrifennu sgript Python.
- Y trydydd opsiwn (i'r rhai cryf eu hewyllys): ewch i'r gweinydd, cysylltwch ag un o'r achosion gan ddefnyddio
tarantoolctl connectac rydym yn cyflawni'r holl driniaethau angenrheidiol gyda'r modiwl Luacartridge.
Prif nod ein dyfais yw gwneud y rhan anoddaf hon o'r gwaith i chi.
Mae Ansible yn caniatáu ichi ysgrifennu eich modiwlau eich hun a'u defnyddio mewn rôl. Mae ein rôl yn defnyddio'r modiwlau hyn i reoli gwahanol gydrannau clwstwr.
Sut mae'n gweithio? Rydych chi'n disgrifio'r cyflwr clwstwr a ddymunir mewn ffurfweddiad datganiadol, ac mae'r rôl yn trosglwyddo ei adran ffurfweddu fel mewnbwn i bob modiwl. Mae'r modiwl yn derbyn cyflwr cyfredol y clwstwr ac yn ei gymharu â'r mewnbwn. Yna, mae cod yn cael ei redeg trwy soced ar un o'r achosion, gan ddod â'r clwstwr i'r cyflwr a ddymunir.
Canlyniadau
Heddiw, fe wnaethon ni esbonio a dangos sut i ddefnyddio eich cymhwysiad i Tarantool Cartridge a sefydlu topoleg syml. I wneud hyn, fe wnaethon ni ddefnyddio Ansible, offeryn pwerus, hawdd ei ddefnyddio sy'n eich galluogi i ffurfweddu sawl nod seilwaith ar yr un pryd (yn ein hachos ni, achosion clwstwr).
Uchod, rydym wedi trafod un o'r nifer o ffyrdd o ddisgrifio ffurfweddiad clwstwr gan ddefnyddio Ansible. Unwaith y byddwch chi'n barod i symud ymlaen, archwiliwch ar gyfer ysgrifennu llyfrau chwarae. Efallai y byddwch yn ei chael hi'n fwy cyfleus rheoli'r topoleg gan ddefnyddio group_vars и host_vars.
Cyn bo hir, byddwn yn egluro sut i ddileu (gwrthod) achosion o'r topoleg yn barhaol, bootstrap vshard, rheoli modd methiant drosodd awtomatig, ffurfweddu awdurdodiad, a chlytsio ffurfweddiad y clwstwr. Yn y cyfamser, gallwch archwilio ar eich pen eich hun. ac arbrofi gyda newid paramedrau clwstwr.
Os nad yw rhywbeth yn gweithio, gwnewch yn siŵr Dywedwch wrthym am y broblem. Byddwn yn ei datrys yn gyflym!
Ffynhonnell: hab.com
