A ti sọrọ tẹlẹ
Awon nkan? Lẹhinna jọwọ, labẹ gige, a yoo sọ fun ọ ati fi ohun gbogbo han ọ.
Jẹ ká bẹrẹ pẹlu ohun apẹẹrẹ
A yoo wo apakan nikan ti iṣẹ ṣiṣe ti ipa wa. O le rii nigbagbogbo apejuwe pipe ti gbogbo awọn agbara rẹ ati awọn aye igbewọle sinu
Tarantool Katiriji ni o ni api
и storage
, eyi ti o le wa ni sọtọ si instances.
Katiriji funrararẹ ko sọ ohunkohun nipa bii o ṣe le ṣe ifilọlẹ awọn ilana, o pese agbara nikan lati tunto awọn iṣẹlẹ ti nṣiṣẹ tẹlẹ. Olumulo gbọdọ ṣe isinmi funrararẹ: ṣeto awọn faili iṣeto, bẹrẹ awọn iṣẹ ati tunto topology. Ṣugbọn a kii yoo ṣe gbogbo eyi; Agbara yoo ṣe fun wa.
Lati ọrọ si awọn iṣẹ
Nitorinaa, jẹ ki a gbe ohun elo wa si awọn ẹrọ foju meji ati ṣeto topology ti o rọrun kan:
- Replicaset
app-1
yoo mu ipa naa ṣiṣẹapi
, eyiti o pẹlu ipavshard-router
. Apeere kan ṣoṣo yoo wa nibi. - Replicaset
storage-1
muse ipastorage
(ati ni akoko kannavshard-storage
), Nibi a yoo ṣafikun awọn iṣẹlẹ meji lati awọn ẹrọ oriṣiriṣi.
Lati ṣiṣẹ apẹẹrẹ ti a nilo
Ipa funrararẹ wa ninu
Jẹ ki a ṣe ẹda ibi ipamọ pẹlu apẹẹrẹ:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
A gbe awọn ẹrọ foju soke:
$ vagrant up
Fi ipa ti Tarantool Cartridge sori ẹrọ:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Lọlẹ ipa ti a fi sori ẹrọ:
$ ansible-playbook -i hosts.yml playbook.yml
A duro fun iwe-iṣere lati pari ipaniyan, lọ si
O le po si data. Dara, otun?
Nisisiyi ẹ jẹ ki a ṣawari bi a ṣe le ṣiṣẹ pẹlu eyi, ati ni akoko kanna fi ẹda miiran kun si topology.
Jẹ ká bẹrẹ lati ro ero o jade
Nitorina kini o ṣẹlẹ?
A ṣeto awọn ẹrọ foju meji ati ṣe ifilọlẹ iwe-iṣere ti o ṣee ṣe ti o tunto iṣupọ wa. Jẹ ki a wo awọn akoonu ti faili naa 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
Ko si ohun ti awon ti o ṣẹlẹ nibi, jẹ ki ká lọlẹ ohun ansible ipa ti a npe ni tarantool.cartridge
.
Gbogbo awọn ohun pataki julọ (eyun, iṣeto iṣupọ) wa ninu 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:
Gbogbo ohun ti a nilo ni lati kọ ẹkọ bi a ṣe le ṣakoso awọn iṣẹlẹ ati awọn ẹda nipa yiyipada awọn akoonu inu faili yii. Nigbamii ti a yoo fi awọn apakan titun kun si. Ni ibere ki o má ba ni idamu ni ibiti o ti le ṣafikun wọn, o le wo ẹya ikẹhin ti faili yii, hosts.updated.yml
, eyi ti o wa ni ibi ipamọ apẹẹrẹ.
Iṣakoso apẹẹrẹ
Ni awọn ofin Ansible, apẹẹrẹ kọọkan jẹ agbalejo (kii ṣe idamu pẹlu olupin ohun elo), i.e. ipade amayederun ti Ansible yoo ṣakoso. Fun agbalejo kọọkan a le pato awọn paramita asopọ (bii ansible_host
и ansible_user
), bakanna bi iṣeto apẹẹrẹ. Apejuwe ti awọn iṣẹlẹ wa ni apakan hosts
.
Jẹ ki a wo iṣeto apẹẹrẹ storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Ni oniyipada config
a pato awọn paramita apẹẹrẹ - advertise URI
и HTTP port
.
Ni isalẹ wa ni awọn paramita apẹẹrẹ app-1
и storage-1-replica
.
A nilo lati sọ fun Ansible awọn paramita asopọ fun apẹẹrẹ kọọkan. O dabi ọgbọn lati ṣe akojọpọ awọn apẹẹrẹ sinu awọn ẹgbẹ ẹrọ foju. Fun idi eyi, awọn iṣẹlẹ ti wa ni idapo sinu awọn ẹgbẹ host1
и host2
, ati ninu ẹgbẹ kọọkan ni apakan vars
awọn iye ti wa ni itọkasi ansible_host
и ansible_user
fun ọkan foju ẹrọ. Ati ni apakan hosts
- ogun (aka awọn apẹẹrẹ) ti o wa ninu ẹgbẹ yii:
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:
A bẹrẹ lati yipada hosts.yml
. Jẹ ki a ṣafikun awọn apẹẹrẹ meji diẹ sii, storage-2-replica
lori akọkọ foju ẹrọ ati storage-2
Lori keji:
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: # <==
...
Lọlẹ iwe-iṣere ti o ṣeeṣe:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Jọwọ ṣe akiyesi aṣayan naa --limit
. Níwọ̀n bí àpẹẹrẹ ìdìpọ̀ kọ̀ọ̀kan jẹ́ agbalejo ní àwọn ọ̀rọ̀ Aṣàyẹ̀wò, a le ní pàtó ní pàtó pàtó irú àwọn ìṣẹ̀lẹ̀ wo tí ó yẹ kí a túntò nígbà tí a bá ń ṣiṣẹ́ ìwé eré náà.
Nlọ pada si UI Wẹẹbu naa
Jẹ ki a ko da nibẹ ki o si titunto si topology isakoso.
Topology isakoso
Jẹ ki a ṣajọpọ awọn iṣẹlẹ tuntun wa sinu eto ajọra kan storage-2
. Jẹ ki a ṣafikun ẹgbẹ tuntun kan replicaset_storage_2
ki o si se apejuwe replicaset paramita ninu awọn oniwe-oniyipada nipa apéerẹìgbìyànjú pẹlu replicaset_storage_1
. Ni apakan hosts
Jẹ ki a tọkasi iru awọn iṣẹlẹ ti yoo wa ninu ẹgbẹ yii (iyẹn, eto ẹda wa):
---
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:
Jẹ ki a tun bẹrẹ iwe-iṣere naa lẹẹkansi:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Ni paramita --limit
Ni akoko yii a kọja orukọ ẹgbẹ ti o baamu si ẹda wa.
Jẹ ká ro aṣayan tags
.
Ipa wa leralera ṣe awọn iṣẹ ṣiṣe lọpọlọpọ, eyiti o jẹ samisi pẹlu awọn afi wọnyi:
cartridge-instances
: iṣakoso apẹẹrẹ (atunto, asopọ si ẹgbẹ);cartridge-replicasets
: topology isakoso (replicaset isakoso ati yẹ yiyọ (jade) ti instances lati awọn iṣupọ);cartridge-config
: iṣakoso ti awọn paramita iṣupọ miiran (vshard bootstrapping, ipo ikuna aifọwọyi, awọn aye aṣẹ aṣẹ ati iṣeto ni ohun elo).
A le sọ ni pato iru apakan ti iṣẹ ti a fẹ ṣe, lẹhinna ipa naa yoo foju awọn iṣẹ iyokù. Ninu ọran wa, a fẹ lati ṣiṣẹ nikan pẹlu topology, nitorinaa a ṣalaye cartridge-replicasets
.
Jẹ ki a ṣe ayẹwo abajade ti akitiyan wa. A ri titun kan replicaset lori
Hooray!
Ṣàdánwò pẹlu yiyipada iṣeto ni ti awọn iṣẹlẹ ati awọn eto ajọra ki o wo bii iṣupọ topology ṣe yipada. O le gbiyanju awọn oju iṣẹlẹ iṣẹ ṣiṣe ti o yatọ, fun apẹẹrẹ. memtx_memory
. Ipa naa yoo gbiyanju lati ṣe eyi laisi tun bẹrẹ apẹẹrẹ lati le dinku akoko idaduro ohun elo rẹ.
Maṣe gbagbe lati ṣiṣe vagrant halt
lati da awọn ẹrọ foju duro nigbati o ba ti pari ṣiṣẹ pẹlu wọn.
Ati ohun ti ni labẹ awọn Hood?
Nibi Emi yoo sọ fun ọ diẹ sii nipa ohun ti n ṣẹlẹ labẹ hood ti ipa ti o ṣeeṣe lakoko awọn adanwo wa.
Jẹ ki a wo gbigbe ohun elo Katiriji ni igbese nipasẹ igbese.
Fifi sori ẹrọ package ati awọn iṣẹlẹ ibẹrẹ
Ni akọkọ o nilo lati fi package ranṣẹ si olupin naa ki o fi sii. Lọwọlọwọ ipa le ṣiṣẹ pẹlu awọn idii RPM ati DEB.
Nigbamii ti a lọlẹ awọn instances. Ohun gbogbo rọrun pupọ nibi: apẹẹrẹ kọọkan jẹ lọtọ systemd
-iṣẹ. Emi yoo fun ọ ni apẹẹrẹ:
$ systemctl start myapp@storage-1
Aṣẹ yii yoo ṣe ifilọlẹ apẹẹrẹ naa storage-1
afikun myapp
. Apeere ti a ṣe ifilọlẹ yoo wa fun rẹ /etc/tarantool/conf.d/
. Awọn iwe apẹẹrẹ le ṣee wo ni lilo journald
.
Faili Unit /etc/systemd/system/[email protected]
fun systemd iṣẹ yoo wa ni jišẹ pẹlú pẹlu awọn package.
Ansible ti ni awọn modulu ti a ṣe sinu fun fifi awọn idii ati ṣiṣakoso awọn iṣẹ eto; a ko ṣẹda ohunkohun tuntun nibi.
Eto soke a iṣupọ topology
Eyi ni ibi ti igbadun bẹrẹ. Gba, yoo jẹ ajeji lati ṣe wahala pẹlu ipa Ansible pataki kan fun fifi sori ẹrọ awọn idii ati ṣiṣiṣẹ systemd
-awọn iṣẹ.
O le tunto iṣupọ pẹlu ọwọ:
- Aṣayan akọkọ: ṣii UI oju opo wẹẹbu ki o tẹ awọn bọtini. O dara pupọ fun ibẹrẹ akoko kan ti ọpọlọpọ awọn iṣẹlẹ.
- Aṣayan keji: o le lo GraphQl API. Nibi o le ṣe adaṣe ohunkan tẹlẹ, fun apẹẹrẹ, kọ iwe afọwọkọ ni Python.
- Aṣayan kẹta (fun awọn ti o lagbara): lọ si olupin naa, sopọ si ọkan ninu awọn iṣẹlẹ nipa lilo
tarantoolctl connect
ki o si ṣe gbogbo awọn ifọwọyi pataki pẹlu Lua modulecartridge
.
Iṣẹ akọkọ ti kiikan wa ni lati ṣe deede eyi, apakan ti o nira julọ ti iṣẹ fun ọ.
Ansible faye gba o lati kọ ara rẹ module ati ki o lo o ni a ipa. Ipa wa nlo iru awọn modulu lati ṣakoso ọpọlọpọ awọn paati iṣupọ.
Bawo ni o ṣe n ṣiṣẹ? O ṣe apejuwe ipo iṣupọ ti o fẹ ni atunto asọye, ati pe ipa naa pese module kọọkan pẹlu apakan iṣeto ni bi titẹ sii. Module naa gba ipo iṣupọ lọwọlọwọ ati ṣe afiwe rẹ pẹlu ohun ti a gba bi titẹ sii. Nigbamii ti, koodu kan ti ṣe ifilọlẹ nipasẹ iho ti ọkan ninu awọn iṣẹlẹ, eyiti o mu iṣupọ wa si ipo ti o fẹ.
Awọn esi
Loni a sọ ati ṣafihan bi o ṣe le fi ohun elo rẹ ranṣẹ si Tarantool Cartridge ati ṣeto topology ti o rọrun. Lati ṣe eyi, a lo Ansible - ohun elo ti o lagbara ti o rọrun lati lo ati gba ọ laaye lati tunto ọpọlọpọ awọn apa amayederun nigbakanna (ninu ọran wa, awọn iṣẹlẹ iṣupọ).
Loke a wo ọkan ninu awọn ọna pupọ lati ṣapejuwe iṣeto iṣupọ kan nipa lilo Ansible. Ni kete ti o ba ti ṣetan lati lọ siwaju, ṣawari group_vars
и host_vars
.
Laipẹ a yoo sọ fun ọ bi o ṣe le paarẹ (jade) awọn iṣẹlẹ patapata lati topology, bootstrap vshard, ṣakoso ipo ikuna aifọwọyi, tunto aṣẹ ati patch konfigi iṣupọ naa. Lakoko, o le ṣe ikẹkọ funrararẹ
Ti nkan ko ba ṣiṣẹ, rii daju lati
orisun: www.habr.com