Nagstorya na mi
Makapainteres? Unya mangutana ko under the cut, isulti namo ug ipakita ang tanan.
Magsugod ta sa usa ka pananglitan
Among tabonan ang bahin lamang sa pagpaandar sa atong tahas. Kanunay nimong makit-an ang usa ka kompleto nga paghulagway sa tanan nga mga bahin niini ug mga parameter sa pag-input
Ang Tarantool Cartridge adunay api
ΠΈ storage
nga mahimong ma-assign sa mga higayon.
Ang Cartridge mismo wala magsulti bisan unsa bahin sa kung giunsa pagsugod ang mga proseso, naghatag lamang kini og katakus sa pag-configure nga nagdagan na nga mga higayon. Kinahanglan nga buhaton sa user ang nahabilin sa iyang kaugalingon: pag-decompose sa mga file sa pag-configure, pagsugod sa mga serbisyo ug pag-set up sa topology. Pero dili namo buhaton kining tanan, Ansible ang mubuhat para namo.
Gikan sa mga pulong ngadto sa mga buhat
Busa, atong i-deploy ang atong aplikasyon ngadto sa duha ka virtual machine ug magbutang ug simple nga topology:
- Replicaset
app-1
maoy modala sa papelapi
nga naglakip sa papelvshard-router
. Adunay usa ra ka higayon dinhi. - replicate
storage-1
nagpatuman sa papelstorage
(ug sa samang higayonvshard-storage
), dinhi magdugang kami og duha ka mga higayon gikan sa lainlaing mga makina.
Aron sa pagpadagan sa panig-ingnan, kita kinahanglan
Ang papel mismo mao
I-clone ang repository sa usa ka pananglitan:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Gipataas namo ang mga virtual machine:
$ vagrant up
I-install ang Tarantool Cartridge ansible nga papel:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Pagdalagan ang na-install nga papel:
$ ansible-playbook -i hosts.yml playbook.yml
Naghulat kami sa katapusan sa pagpatuman sa playbook, adto sa
Mahimo nimong ibubo ang datos. Cool, dili ba?
Karon atong mahibal-an kung unsaon pagtrabaho niini, ug sa samang higayon makadugang og laing replika nga set sa topology.
Nagsugod mi sa pagsabot
Busa unsay nahitabo?
Naghimo kami og duha ka VM ug nagpadagan sa usa ka praktikal nga playbook nga nagbutang sa among cluster. Atong tan-awon ang sulod sa file 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
Walay makapaikag nga mahitabo dinhi, kita magsugod sa ansible-papel, nga gitawag tarantool.cartridge
.
Ang tanan nga labing importante (nga mao, ang cluster configuration) nahimutang sa 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:
Ang atong gikinahanglan mao ang pagkat-on unsaon pagdumala sa mga higayon ug mga replicase pinaagi sa pag-usab sa mga sulod niini nga file. Sunod, magdugang kami ug bag-ong mga seksyon niini. Aron dili malibog kung asa kini idugang, mahimo nimong tan-awon ang katapusang bersyon niini nga file, hosts.updated.yml
, nga anaa sa pananglitan nga repository.
Pagdumala sa Instance
Sa termino sa Ansible, ang matag higayon usa ka host (dili malibog sa usa ka puthaw nga server), i.e. ang node sa imprastraktura nga pagdumala sa Ansible. Alang sa matag host, mahimo natong ipiho ang mga parameter sa koneksyon (sama sa ansible_host
ΠΈ ansible_user
), ingon man ang pag-configure sa pananglitan. Ang paghulagway sa mga higayon naa sa seksyon hosts
.
Tagda ang instance configuration storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Sa usa ka variable config
among gipiho ang mga parameter sa pananglitan - advertise URI
ΠΈ HTTP port
.
Sa ubos mao ang mga parameter sa pananglitan app-1
ΠΈ storage-1-replica
.
Kinahanglan natong isulti sa Ansible ang mga parameter sa koneksyon alang sa matag higayon. Morag lohikal ang paggrupo sa mga higayon ngadto sa mga grupo sa virtual machine. Aron mahimo kini, ang mga higayon gihiusa sa mga grupo. host1
ΠΈ host2
, ug sa matag grupo sa seksyon vars
mga mithi ansible_host
ΠΈ ansible_user
alang sa usa ka virtual machine. Ug sa seksyon hosts
- mga host (sila mga instance) nga nalakip sa kini nga grupo:
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:
Nagsugod kami sa pagbag-o hosts.yml
. Atong idugang ang duha pa ka higayon, storage-2-replica
sa unang virtual machine ug storage-2
Sa ikaduha:
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: # <==
...
Pagdalag ansible nga playbook:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Hatagi'g pagtagad ang kapilian --limit
. Tungod kay ang matag cluster nga instance usa ka host sa Ansible nga mga termino, mahimo namon nga klaro nga mahibal-an kung unsang mga higayon ang kinahanglan i-configure kung gipadagan ang playbook.
Balik sa Web UI
Dili kami mopahulay sa among mga kadaugan ug mag-master sa kontrol sa topology.
Pagdumala sa Topology
Atong iusa ang atong bag-ong mga instance ngadto sa usa ka replicase storage-2
. Pagdugang og bag-ong grupo replicaset_storage_2
ug ihulagway sa mga baryable niini ang mga parametro sa replicaset pinaagi sa analohiya sa replicaset_storage_1
. Sa seksyon hosts
ipiho kung unsang mga higayon ang maapil sa kini nga grupo (nga mao, ang among 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:
Atong sugdan pag-usab ang playbook:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Kada parameter --limit
kami niining higayona gipasa ang ngalan sa grupo nga katumbas sa among replicase.
Tagda ang kapilian tags
.
Ang among tahas nagsunud-sunod nga naghimo sa lainlaing mga buluhaton, nga gimarkahan sa mga musunud nga tag:
cartridge-instances
: pagdumala sa pananglitan (konfigurasyon, koneksyon sa membership);cartridge-replicasets
: pagdumala sa topology (pagdumala sa replicaset ug permanenteng pagtangtang (pagpalagpot) sa mga instance gikan sa cluster);cartridge-config
: pagdumala sa ubang mga cluster parameters (vshard bootstrapping, automatic failover mode, authorization parameters ug application configuration).
Mahimo natong tin-aw nga ipiho kung unsang bahin sa trabaho ang gusto natong buhaton, unya laktawan sa tahas ang nahabilin nga mga buluhaton. Sa among kaso, gusto namon nga magtrabaho lamang sa topology, mao nga among gipiho cartridge-replicasets
.
Atong susihon ang resulta sa atong mga paningkamot. Pagpangita usa ka bag-ong kopya
Hooray!
Eksperimento sa pag-reconfigure sa mga higayon ug mga replicase ug tan-awa kung giunsa pagbag-o ang topology sa cluster. Mahimo nimong sulayan ang lainlaing mga senaryo sa operasyon, pananglitan, memtx_memory
. Ang tahas mosulay sa pagbuhat niini nga dili i-restart ang instance aron makunhuran ang posible nga downtime sa imong aplikasyon.
Ayaw kalimot pagdagan vagrant halt
aron ihunong ang mga VM kung nahuman na nimo sila.
Ug unsa ang ilawom sa tabon?
Dinhi ako maghisgot og dugang mahitungod sa unsay nahitabo ubos sa hood sa ansible nga papel sa panahon sa among mga eksperimento.
Atong tan-awon ang pag-deploy sa usa ka aplikasyon sa Cartridge nga lakang sa lakang.
Pag-instalar sa package ug pagsugod sa mga higayon
Una kinahanglan nimo nga ihatud ang package sa server ug i-install kini. Karon ang tahas mahimoβg molihok sa mga pakete sa RPM ug DEB.
Sunod, gilansad namon ang mga higayon. Ang tanan yano ra kaayo dinhi: ang matag higayon lahi systemd
-serbisyo. Naghisgot ako bahin sa usa ka pananglitan:
$ systemctl start myapp@storage-1
Kini nga mando maglunsad sa pananglitan storage-1
apps myapp
. Ang gilunsad nga pananglitan mangita alang niini /etc/tarantool/conf.d/
. Ang mga instance logs mahimong tan-awon gamit ang journald
.
Unit file /etc/systemd/system/[email protected]
kay ang usa ka systemd nga serbisyo ipadala uban sa package.
Ang Ansible adunay mga built-in nga modules alang sa pag-install sa mga pakete ug pagdumala sa mga serbisyo sa systemd, wala kami nakaimbento nga bag-o dinhi.
Pag-configure sa cluster topology
Ug dinhi nagsugod ang labing makapaikag. Uyon, kini katingad-an nga magsamok sa usa ka espesyal nga papel nga mahimo alang sa pag-install sa mga pakete ug pagdagan systemd
-serbisyo.
Mahimo nimong i-set up ang cluster nga mano-mano:
- Ang unang kapilian: ablihi ang Web UI ug i-klik ang mga buton. Alang sa usa ka higayon nga pagsugod sa daghang mga higayon, kini angay.
- Ikaduha nga kapilian: mahimo nimong gamiton ang GraphQl API. Dinhi mahimo ka na nga mag-automate sa usa ka butang, pananglitan, pagsulat usa ka script sa Python.
- Ang ikatulo nga kapilian (alang sa kusgan sa espiritu): adto sa server, pagkonektar sa usa sa mga higayon nga gigamit
tarantoolctl connect
ug ipahigayon ang tanang gikinahanglang manipulasyon gamit ang Lua modulecartridge
.
Ang nag-unang tahas sa among imbensyon mao ang paghimo niini, ang labing lisud nga bahin sa trabaho alang kanimo.
Gitugotan ka sa Ansible sa pagsulat sa imong kaugalingon nga module ug gamiton kini sa usa ka tahas. Gigamit sa among tahas kini nga mga module aron madumala ang lainlaing mga sangkap sa cluster.
Giunsa kini paglihok? Imong gihulagway ang gitinguha nga kahimtang sa cluster sa usa ka declarative config, ug ang papel naghatag sa matag module sa iyang configuration section isip input. Ang module makadawat sa kasamtangan nga kahimtang sa cluster ug itandi kini sa input. Sunod, ang usa ka code gipadagan pinaagi sa socket sa usa sa mga higayon, nga nagdala sa cluster sa gusto nga estado.
Mga resulta
Karon among gisultihan ug gipakita kung giunsa ang pag-deploy sa imong aplikasyon sa Tarantool Cartridge ug pag-set up sa usa ka yano nga topology. Aron mahimo kini, gigamit namon ang Ansible, usa ka kusgan nga himan nga dali gamiton ug gitugotan ka nga dungan nga i-configure ang daghang mga node sa imprastraktura (sa among kaso, kini ang mga cluster instances).
Sa ibabaw, among giatubang ang usa sa daghang mga paagi sa paghulagway sa configuration sa cluster gamit ang Ansible. Kung nahibal-an nimo nga andam ka nga magpadayon, pagkat-on group_vars
ΠΈ host_vars
.
Sa dili madugay isulti namon kanimo kung giunsa ang permanente nga pagtangtang (pagpalagpot) mga higayon gikan sa topology, bootstrap vshard, pagdumala sa awtomatik nga failover mode, pag-configure sa pagtugot ug pag-patch sa cluster config. Sa kasamtangan, mahimo kang magtuon sa imong kaugalingon
Kung adunay dili molihok, siguroha
Source: www.habr.com