Sesike sakhuluma ngayo
Kuyathakazelisa? Bese sicela, ngaphansi kokusikwa, sizokutshela futhi sikubonise konke.
Ake siqale ngesibonelo
Sizobheka kuphela ingxenye yokusebenza kwendima yethu. Ungathola njalo incazelo ephelele yawo wonke amakhono ayo kanye nemingcele yokufaka kuyo
I-Tarantool Cartridge ine api
и storage
, okungabelwa izimo.
I-Cartridge ngokwayo ayisho lutho mayelana nendlela yokuqalisa izinqubo, inikeza kuphela amandla okumisa izimo ezisebenzayo kakade. Umsebenzisi kufanele azenzele yena konke okunye: ahlele amafayela wokumisa, aqale izinsizakalo futhi alungiselele i-topology. Kodwa ngeke sikwenze konke lokhu; u-Ansible uzosenzela kona.
Kusukela emazwini kuya ezenzweni
Ngakho-ke, ake sisebenzise uhlelo lwethu lokusebenza emishinini emibili ebonakalayo futhi simise i-topology elula:
- Ukuphindaphinda
app-1
izosebenzisa indimaapi
, okuhlanganisa indimavshard-router
. Kuzoba nesibonelo esisodwa kuphela lapha. - Ukuphindaphinda
storage-1
ufeza indimastorage
(futhi ngesikhathi esifanayovshard-storage
), lapha sizofaka izimo ezimbili ezivela emishinini ehlukene.
Ukwenza isibonelo esisidingayo
Indima uqobo lwayo ingaphakathi
Ake sihlanganise indawo yokugcina ngesibonelo:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Siphakamisa imishini ebonakalayo:
$ vagrant up
Faka indima efanelekile ye-Tarantool Cartridge:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Yethula indima efakiwe:
$ ansible-playbook -i hosts.yml playbook.yml
Silinda ukuthi i-playbook iqedele ukwenza, iya ku
Ungalayisha idatha. Kupholile, akunjalo?
Manje ake sithole ukuthi singasebenza kanjani nalokhu, futhi ngesikhathi esifanayo sengeza enye isethi ye-replica ku-topology.
Ake siqale ukukuqonda
Pho kwenzekani?
Sakha imishini emibili ebonakalayo futhi sethula incwadi yokudlala enengqondo elungise iqoqo lethu. Ake sibheke okuqukethwe ifayela 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
Akukho okuthakazelisayo okwenzekayo lapha, ake sethule indima enengqondo ebizwa ngokuthi tarantool.cartridge
.
Zonke izinto ezibaluleke kakhulu (okungukuthi, ukucushwa kweqoqo) zitholakala 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:
Esikudingayo nje ukufunda ukuphatha izimo nezifaniso ngokushintsha okuqukethwe kwaleli fayela. Okulandelayo sizokwengeza izigaba ezintsha kuyo. Ukuze ungadideki ukuthi ungawengeza kuphi, ungabheka inguqulo yokugcina yaleli fayela, hosts.updated.yml
, esendaweni yesibonelo.
Ukuphathwa kwezigameko
Ngokwemibandela engaqondakali, isibonelo ngasinye singusokhaya (okungafanele kudidaniswe neseva yehadiwe), i.e. indawo yengqalasizinda ezophathwa yi-Ansible. Ngomsingathi ngamunye singacacisa imingcele yokuxhuma (njenge ansible_host
и ansible_user
), kanye nokucushwa kwesibonelo. Incazelo yezimo ikusigaba hosts
.
Ake sibheke ukucushwa kwesibonelo storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Ngokuguquguqukayo config
sicacise amapharamitha esibonelo - advertise URI
и HTTP port
.
Ngezansi kukhona amapharamitha esibonelo app-1
и storage-1-replica
.
Sidinga ukutshela u-Ansible amapharamitha wokuxhuma kusibonelo ngasinye. Kubonakala kunengqondo ukuhlanganisa izimo zibe amaqembu emishini ebonakalayo. Ngale njongo, izimo zihlanganiswa zibe ngamaqembu host1
и host2
, naseqenjini ngalinye esigabeni vars
amanani akhonjisiwe ansible_host
и ansible_user
ngomshini owodwa we-virtual. Futhi esigabeni hosts
- ababungazi (izikhathi ze-aka) ezifakwe kuleli qembu:
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:
Siqala ukushintsha hosts.yml
. Ake sengeze ezinye izibonelo ezimbili, storage-2-replica
emshinini wokuqala we-virtual futhi storage-2
Kwesibili:
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: # <==
...
Yethula incwadi yokudlala enengqondo:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Sicela uqaphele inketho --limit
. Njengoba i-cluster ngayinye ingumsingathi ngamatemu Afaneleka, singacacisa ngokucacile ukuthi yiziphi izimo okufanele zilungiswe lapho kusetshenziswa i-playbook.
Ukubuyela emuva ku-Web UI
Masingayeki lapho futhi nokuphatha i-topology.
Ukuphathwa kwe-Topology
Ake sihlanganise izehlakalo zethu ezintsha zibe isethi yokufanisa storage-2
. Masingeze iqembu elisha replicaset_storage_2
futhi uchaze amapharamitha wokuphindaphinda kokuguquguqukayo kwawo ngokufanisa ne replicaset_storage_1
. Esigabeni hosts
Ake sikhombise ukuthi yiziphi izimo ezizofakwa kuleli qembu (okungukuthi, isethi yethu yokukopisha):
---
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:
Asiqale futhi ibhuku lokudlala:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Kupharamitha --limit
Kulokhu sidlulise igama leqembu elihambisana nekhophi yethu.
Ake sicabangele inketho tags
.
Indima yethu yenza imisebenzi eyahlukene ngokulandelana kwayo, ephawulwe ngalamathegi alandelayo:
cartridge-instances
: ukuphathwa kwesibonelo (ukumisa, ukuxhumana nobulungu);cartridge-replicasets
: ukuphathwa kwe-topology (ukuphathwa kwe-replicaset nokususwa unomphela (ukuxosha) izimo eqenjini);cartridge-config
: Ukuphathwa kwamanye amapharamitha eqoqo (i-vshard bootstrapping, imodi ye-faillover ezenzakalelayo, imingcele yokugunyazwa nokucushwa kwesicelo).
Singacacisa ngokusobala ukuthi iyiphi ingxenye yomsebenzi esifuna ukuwenza, bese indima izokweqa eminye imisebenzi. Esimweni sethu, sifuna ukusebenza nge-topology kuphela, ngakho sicacisile cartridge-replicasets
.
Ake sihlole umphumela wemizamo yethu. Sithola i-replicaset entsha ivuliwe
Hooray!
Linga ngokushintsha ukucushwa kwezimo namasethi okukopisha futhi ubone ukuthi i-cluster topology ishintsha kanjani. Ungazama izimo zokusebenza ezihlukene, isb. memtx_memory
. Indima izozama ukwenza lokhu ngaphandle kokuqala kabusha isibonelo ukuze kwehliswe isikhathi sokungasebenzi esingaba khona sohlelo lwakho lokusebenza.
Ungakhohlwa ukugijima vagrant halt
ukumisa imishini ebonakalayo lapho usuqedile ukusebenza nayo.
Futhi yini engaphansi kwekhodi?
Lapha ngizokutshela kabanzi mayelana nokwakwenzeka ngaphansi kwesibopho sendima enengqondo phakathi nokuhlolwa kwethu.
Ake sibheke ukufaka isicelo seCartridge isinyathelo ngesinyathelo.
Ukufaka iphakheji kanye nezimo zokuqala
Okokuqala udinga ukuletha iphakheji kuseva futhi uyifake. Okwamanje indima ingasebenza namaphakheji e-RPM kanye ne-DEB.
Okulandelayo sethula izimo. Konke kulula kakhulu lapha: isibonelo ngasinye sihlukile systemd
-inkonzo. Ngizokunikeza isibonelo:
$ systemctl start myapp@storage-1
Lo myalo uzokwethula isibonelo storage-1
izicelo myapp
. Isigameko esethulwe sizobheka sona /etc/tarantool/conf.d/
. Amalogi wesibonelo angabukwa kusetshenziswa journald
.
Ifayela leyunithi /etc/systemd/system/[email protected]
yesevisi ye-systemd izolethwa kanye nephakheji.
I-Ansible inamamojula akhelwe ngaphakathi okufaka amaphakheji nokuphatha izinsiza zesistimu; akukho okusha esisungule lapha.
Ukusetha i-topology yeqoqo
Yilapho ubumnandi buqala khona. Vuma, kungaba yinqaba ukuzihlupha ngendima ekhethekile ebhekelela ukufakwa kwamaphakheji nokusebenza systemd
-izinsizakalo.
Ungakwazi ukumisa iqoqo ngokwenza:
- Inketho yokuqala: vula i-Web UI bese uchofoza izinkinobho. Ilungele ukuqala kwesikhathi esisodwa kwezimo eziningana.
- Inketho yesibili: ungasebenzisa i-GraphQl API. Lapha usungakwazi ukwenza okuthile ngokuzenzakalelayo, isibonelo, bhala iskripthi kuPython.
- Inketho yesithathu (kwabanamandla): iya kuseva, xhuma kwesinye sezimo usebenzisa
tarantoolctl connect
futhi wenze konke ukukhohlisa okudingekayo ngemojula ye-Luacartridge
.
Umsebenzi oyinhloko wokusungulwa kwethu ukwenza lokhu kanye, ingxenye enzima kakhulu yomsebenzi kuwe.
I-Ansible ikuvumela ukuthi ubhale imojula yakho futhi uyisebenzise endimeni. Indima yethu isebenzisa amamojula anjalo ukuphatha izingxenye zeqoqo ezahlukahlukene.
Isebenza kanjani? Uchaza isimo esifiswayo seqoqo ekucushweni kwesimemezelo, futhi indima ihlinzeka ngemojuli ngayinye nesigaba sayo sokumisa njengokufakwayo. Imojula ithola isimo samanje seqoqo futhi iqhathanise nalokho okutholwe njengokufakiwe. Okulandelayo, ikhodi yethulwa ngesokhethi kwesinye sezimo, okuletha iqoqo kusimo esifiswayo.
Imiphumela
Namuhla sitshele futhi sabonisa indlela yokufaka isicelo sakho ku-Tarantool Cartridge futhi usethe i-topology elula. Ukwenza lokhu, sisebenzise i-Ansible - ithuluzi elinamandla elisebenziseka kalula futhi likuvumela ukuthi ulungise ngesikhathi esisodwa izindawo eziningi zengqalasizinda (kithi, izimo zeqoqo).
Ngenhla sibheke enye yezindlela eziningi zokuchaza ukucushwa kweqoqo usebenzisa i-Ansible. Uma usuzizwa ulungele ukuqhubeka, hlola group_vars
и host_vars
.
Maduze nje sizokutshela ukuthi ungazisusa kanjani unomphela (ukuxosha) izimo ku-topology, i-bootstrap vshard, phatha imodi ye-failiover ezenzakalelayo, lungiselela ukugunyazwa futhi unamathisele ukulungiselelwa kweqoqo. Okwamanje, ungafunda wedwa
Uma okuthile kungasebenzi, qiniseka ukwenza kanjalo
Source: www.habr.com