Takatotaura nezvazvo
Inonakidza? Zvadaro ndapota, pasi pekucheka, tichakuudza uye kukuratidza zvose.
Ngatitange nemuenzaniso
Tichangotarisa chikamu chekushanda kwebasa redu. Iwe unogona kugara uchiwana tsananguro yakazara yezvese kugona kwayo uye ma paramita ekuisa mukati
Tarantool Cartridge ine api
ΠΈ storage
, iyo inogona kugoverwa kune zviitiko.
Cartridge pachayo haitaure chero chinhu nezve nzira yekutangisa maitiro, inongopa kugona kugadzirisa yatove kuita zviitiko. Mushandisi anofanira kuita zvakasara pachake: kuronga mafaera ekugadzirisa, tanga masevhisi uye gadzirisa iyo topology. Asi isu hatingaiti zvese izvi; Ansible achatiitira isu.
Kubva pamashoko kusvika pazviito
Saka, ngatiisei application yedu kumakina maviri chaiwo uye timise yakapusa topology:
- Replicaset
app-1
achaita basa rachoapi
, iyo inosanganisira basavshard-router
. Pachave nemuenzaniso mumwe chete pano. - Replicaset
storage-1
anoita basa rachostorage
(uye panguva imwe chetevshard-storage
), pano isu tichawedzera zviitiko zviviri kubva kumashini akasiyana.
Kuti tiite muenzaniso watinoda
Basa pacharo ririmo
Ngatitorei repository nemuenzaniso:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Isu tinosimudza virtual muchina:
$ vagrant up
Isa iyo Tarantool Cartridge inobatika basa:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Tangisa iyo yakaiswa basa:
$ ansible-playbook -i hosts.yml playbook.yml
Isu takamirira kuti playbook ipedze kuurayiwa, enda ku
Unogona kurodha data. Zvakanaka, handizvo?
Iye zvino ngationei kuti tingashanda sei neizvi, uye panguva imwechete wedzera imwe replica yakaiswa kune topology.
Ngatitangei kuzvinzwisisa
Saka chii chakaitika?
Isu takamisikidza maviri chaiwo muchina uye takatanga bhuku rekutamba rinonzwisisika iro rakagadzirisa cluster yedu. Ngatitarisei zviri mukati mefaira 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
Hapana chinonakidza chinoitika pano, ngatitangei basa rinonzwisisika rinonzi tarantool.cartridge
.
Zvese zvinhu zvakanyanya kukosha (kureva, iyo cluster kumisikidza) zviri mukati 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:
Chatinongoda kudzidza maitiro ekugadzirisa zviitiko uye replicases nekushandura zviri mukati meiyi faira. Zvadaro tichawedzera zvikamu zvitsva kwairi. Kuti urege kuvhiringika kuti ungavawedzera kupi, unogona kutarisa iyo yekupedzisira vhezheni yefaira iri, hosts.updated.yml
, iri mumuenzaniso repository.
Instance management
Mumashoko Ansible, chiitiko chega chega ndechemuenzi (kwete kuti avhiringidzwe ne server hardware), i.e. iyo node yezvivakwa iyo Ansible ichagadzirisa. Kune yega yega saiti tinogona kutsanangura ma parameter ekubatanidza (senge ansible_host
ΠΈ ansible_user
), pamwe nekumisikidzwa kwemuenzaniso. Tsanangudzo yezviitiko iri muchikamu hosts
.
Ngatitarisei muenzaniso configuration storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
In variable config
isu takatsanangura muenzaniso parameters - advertise URI
ΠΈ HTTP port
.
Pazasi pane muenzaniso parameters app-1
ΠΈ storage-1-replica
.
Isu tinofanirwa kuudza Ansible iyo yekubatanidza paramita yemuenzaniso wega wega. Zvinoita sezvine musoro kuunganidza zviitiko mumapoka emuchina chaiwo. Nechinangwa ichi, zviitiko zvinosanganiswa mumapoka host1
ΠΈ host2
, uye muboka rimwe nerimwe riri muchikamu chacho vars
ma values ββanoratidzwa ansible_host
ΠΈ ansible_user
yemuchina mumwe chete. Uye muchikamu hosts
- mauto (aka zviitiko) anosanganisirwa muboka iri:
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:
Tinotanga kushanduka hosts.yml
. Ngatiwedzere mamwe maenzanisi maviri, storage-2-replica
pamushini wekutanga chaiwo uye storage-2
Pechipiri:
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: # <==
...
Tangisa bhuku rekutamba rinoshanda:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Ndapota cherechedza sarudzo --limit
. Sezvo imwe neimwe cluster muenzaniso iri mugamuchiri mune Ansible mazwi, tinogona kutsanangura zvakajeka kuti ndeapi mamiriro anofanirwa kugadziridzwa paunenge uchiita bhuku rekutamba.
Kudzokera kuWebhu UI
Ngatirege kugumira ipapo uye master topology manejimendi.
Topology manejimendi
Ngatisanganise zviitiko zvedu zvitsva kuita replica set storage-2
. Ngatiwedzerei boka idzva replicaset_storage_2
uye tsanangura replicaset parameters mune zvinosiyana-siyana nekuenzanisa ne replicaset_storage_1
. Muchikamu hosts
Ngatiratidze kuti ndedzipi zviitiko zvichabatanidzwa muboka rino (kureva kuti, replica set):
---
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:
Ngatitange bhuku rekutamba zvakare:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
In parameter --limit
Panguva ino takapfuura zita reboka rinoenderana nereplicaset yedu.
Ngationei sarudzo tags
.
Basa redu sequentially rinoita mabasa akasiyana siyana, akanyorwa neanotevera ma tag:
cartridge-instances
: muenzaniso manejimendi (kugadzirisa, kubatana kune nhengo);cartridge-replicasets
: topology manejimendi (replicaset manejimendi uye kubviswa zvachose (dzinga) yezviitiko kubva musumbu);cartridge-config
: manejimendi emamwe masumbu paramita (vshard bootstrapping, otomatiki failover modhi, mvumo paramita uye application kumisikidza).
Tinogona kunyatso tsanangura kuti ndechipi chikamu chebasa chatinoda kuita, ipapo basa rinodarika mamwe mabasa. Kwatiri isu, isu tinoda kushanda chete neiyo topology, saka isu takatsanangura cartridge-replicasets
.
Ngationgororei mugumisiro wekuedza kwedu. Isu tinowana replicaset nyowani pa
Hooray!
Edza nekushandura magadzirirwo ezviitiko uye replica seti uye ona kuti iyo cluster topology inoshanduka sei. Unogona kuedza mamiriro akasiyana ekushanda, semuenzaniso. memtx_memory
. Basa racho rinoedza kuita izvi pasina kutangazve chiitiko kuitira kudzikisa inogona kudzika nguva yekushandisa kwako.
Usakanganwa kumhanya vagrant halt
kumisa iwo chaiwo michina kana wapedza kushanda navo.
Uye chii chiri pasi pehodhi?
Pano ini ndichakuudza zvimwe pamusoro pezvanga zvichiitika pasi pehodhi yebasa rinonzwisisika panguva yekuedza kwedu.
Ngatitarisei kuendesa iyo Cartridge application nhanho nhanho.
Kuisa iyo package uye kutanga zviitiko
Kutanga iwe unofanirwa kuendesa iyo package kune server uye kuiisa. Parizvino iro basa rinogona kushanda neRPM uye DEB mapakeji.
Tevere tinovhura zviitiko. Zvese zviri nyore pano: imwe neimwe muenzaniso yakaparadzana systemd
-service. Ndichakupa muenzaniso:
$ systemctl start myapp@storage-1
Uyu murairo uchavhura muenzaniso storage-1
Apps myapp
. Iyo yakatangwa chiitiko ichatsvaga yayo /etc/tarantool/conf.d/
. Instance logs inogona kutariswa uchishandisa journald
.
Unit file /etc/systemd/system/[email protected]
ye systemd sevhisi ichaunzwa pamwe chete nepakeji.
Ansible ane akavakirwa-mukati mamodule ekuisa mapakeji uye maneja systemd masevhisi; isu hatina kugadzira chero chinhu chitsva pano.
Kugadzira cluster topology
Apa ndipo panotangira mafaro. Bvumiranai, zvingave zvisinganzwisisike kunetseka nebasa rakakosha rekuisa mapakeji uye kumhanya systemd
-sevhisi.
Iwe unogona kugadzirisa iyo cluster nemaoko:
- Chekutanga sarudzo: vhura iyo Webhu UI uye tinya pane mabhatani. Yakanyatsokodzera kutanga-kamwe kwezviitiko zvakawanda.
- Chechipiri sarudzo: unogona kushandisa GraphQl API. Pano iwe unogona kutoita otomatiki chimwe chinhu, semuenzaniso, nyora script muPython.
- Chechitatu sarudzo (yevakasimba-vanoda): enda kune sevha, batanidza kune imwe yezviitiko uchishandisa
tarantoolctl connect
uye ita zvese zvinodiwa manipulations neLua modulecartridge
.
Basa guru rekugadzirwa kwedu nderekuita izvi chaizvo, chikamu chakaoma chebasa kwauri.
Ansible inokutendera iwe kunyora yako wega module uye uishandise mune chikamu. Basa redu rinoshandisa mamodule akadai kubata akasiyana masumbu ezvikamu.
Inoshanda sei? Iwe unotsanangura iyo inodiwa mamiriro esumbu mune inozivisa gadziriso, uye iro basa rinopa yega yega module ine yayo yekumisikidza chikamu sekuisa. Iyo module inogamuchira iyo ikozvino mamiriro esumbu uye inoienzanisa neyakagamuchirwa sekuisa. Tevere, kodhi inotangwa kuburikidza nesocket yeimwe yezviitiko, iyo inounza cluster kune inodiwa nyika.
Migumisiro
Nhasi taudza uye takaratidza nzira yekuendesa application yako kuTarantool Cartridge uye kumisikidza yakapusa topology. Kuti tiite izvi, takashandisa Ansible - chishandiso chine simba chiri nyore kushandisa uye chinokutendera iwe kuti ugadzirise panguva imwe chete akawanda ezvivakwa node (munyaya yedu, masumbu ezviitiko).
Pamusoro takatarisa imwe yenzira dzakawanda dzekutsanangura magadzirirwo emasumbu uchishandisa Ansible. Kana wangonzwa wagadzirira kuenderera mberi, ongorora group_vars
ΠΈ host_vars
.
Nenguva isipi isu tichakuudza nzira yekudzima zvachose (kudzinga) zviitiko kubva kumusoro, bootstrap vshard, tonga otomatiki failover mode, gadzirisa mvumo uye gadzira iyo cluster config. Panguva ino, unogona kudzidza uri woga
Kana chimwe chinhu chisingashande, iva nechokwadi chekuti
Source: www.habr.com