
Ua kamaʻilio mua mākou , hiki iā ʻoe ke hoʻomohala i nā noi i hoʻolaha ʻia a pūʻulu iā lākou. ʻO nā mea a pau i koe, ʻo ia ke aʻo pehea e hoʻokau ai i kēia mau noi a mālama iā lākou. Mai hopohopo, ua paʻa iā mākou nā mea a pau! Hoʻohui mākou i nā hana maikaʻi loa no ka hana ʻana me Tarantool Cartridge a kākau , ka mea e puʻunaue i ka pūʻolo i nā kikowaena, hoʻomaka i nā manawa, hoʻohui iā lākou i kahi hui, hoʻonohonoho i ka mana, bootstrap vshard, hiki i ka failover aunoa a hoʻopaʻa i ka config cluster.
hoihoi? A laila e ʻoluʻolu, ma lalo o ka ʻoki, e haʻi mākou iā ʻoe a hōʻike iā ʻoe i nā mea āpau.
E hoʻomaka kākou me kahi laʻana
E nānā wale mākou i kahi o ka hana o kā mākou kuleana. Hiki iā ʻoe ke ʻike i ka wehewehe piha ʻana o kona mau mana āpau a me nā ʻāpana komo i loko . Akā ʻoi aku ka maikaʻi o ka hoʻāʻo ʻana i hoʻokahi manawa ma mua o ka ʻike ʻana iā ia i hoʻokahi haneli mau manawa, no laila e kau mākou i kahi noi liʻiliʻi.
Loaʻa iā Tarantool Cartridge e hana i kahi palapala Cartridge liʻiliʻi e mālama i ka ʻike e pili ana i nā mea kūʻai aku panakō a me kā lākou mau moʻokāki, a hāʻawi pū i kahi API no ka hoʻokele ʻikepili ma o HTTP. No ka hoʻokō ʻana i kēia, wehewehe ka appendix i ʻelua mau kuleana kūpono: api и storage, hiki ke hāʻawi ʻia i nā manawa.
ʻAʻole ʻōlelo ʻo Cartridge i kekahi mea e pili ana i ka hoʻomaka ʻana i nā kaʻina hana, hāʻawi wale ia i ka hiki ke hoʻonohonoho i nā manawa e holo nei. Pono ka mea hoʻohana e hana i ke koena iā ia iho: hoʻonohonoho i nā faila hoʻonohonoho, hoʻomaka i nā lawelawe a hoʻonohonoho i ka topology. Akā ʻaʻole mākou e hana i kēia mau mea; Na Ansible e hana ia no mākou.
Mai ka ʻōlelo a i ka hana
No laila, e kau i kā mākou noi i ʻelua mau mīkini virtual a hoʻonohonoho i kahi topology maʻalahi:
- Hoʻopili hou
app-1e hoʻokō i ke kuleanaapi, e pili ana i ke kuleanavshard-router. Hoʻokahi wale nō manawa maʻaneʻi. - Hoʻopili hou
storage-1hoʻokō i ke kuleanastorage(a i ka manawa likevshard-storage), e hoʻohui mākou i ʻelua mau manawa mai nā mīkini like ʻole.

E holo i ka laʻana e pono ai mākou и (kahi 2.8 a ʻoi aku paha).
Aia ka hana ponoi . He waihona kēia e hiki ai iā ʻoe ke kaʻana like i kāu hana a hoʻohana i nā hana i mākaukau.
E hoʻopili i ka waihona me kahi laʻana:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0Hoʻonui mākou i nā mīkini virtual:
$ vagrant upE hoʻouka i ka Tarantool Cartridge ansible role:
$ ansible-galaxy install tarantool.cartridge,1.0.1E hoʻomaka i ka hana i hoʻokomo ʻia:
$ ansible-playbook -i hosts.yml playbook.ymlKe kali nei mākou no ka hoʻokō ʻana o ka puke pāʻani, hele i a hauʻoli i ka hopena:

Hiki iā ʻoe ke hoʻouka i ka ʻikepili. Maikaʻi, pololei?
I kēia manawa, e noʻonoʻo kākou pehea e hana ai me kēia, a ma ka manawa like e hoʻohui i kahi kope hou i ka topology.
E hoʻomaka kākou e noʻonoʻo
No laila he aha ka mea i hana?
Hoʻonohonoho mākou i ʻelua mau mīkini virtual a hoʻomaka i kahi puke pāʻani ansible i hoʻonohonoho i kā mākou hui. E nānā kākou i nā mea o ka faila 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ʻAʻohe mea hoihoi ma ʻaneʻi, e hoʻomaka kākou i kahi kuleana kūpono i kapa ʻia tarantool.cartridge.
Aia nā mea nui loa (ʻo ia hoʻi, ka hoʻonohonoho cluster) i loko - waihona 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:ʻO nā mea a pau e pono ai mākou e aʻo pehea e hoʻokele ai i nā manawa a me nā replicasets ma ka hoʻololi ʻana i nā ʻike o kēia faila. A laila e hoʻohui mākou i nā ʻāpana hou iā ia. I ʻole e huikau i kahi e hoʻohui ai iā lākou, hiki iā ʻoe ke nānā i ka mana hope o kēia faila, hosts.updated.yml, aia ma ka waihona laʻana.
Hoʻoponopono i nā mea hoʻohālike
Ma nā huaʻōlelo Ansible, ʻo kēlā me kēia laʻana he host (ʻaʻole e huikau me kahi kikowaena hardware), ʻo ia. ka node infrastructure a Ansible e hoʻokele ai. No kēlā me kēia host hiki iā mākou ke kuhikuhi i nā ʻāpana pili (e like me ansible_host и ansible_user), a me ka hoʻonohonoho hoʻonohonoho. ʻO ka wehewehe ʻana o nā hihia aia ma ka ʻāpana hosts.
E nānā kākou i ka hoʻonohonoho hoʻonohonoho storage-1:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...Ma ka loli config ua kuhikuhi mākou i nā ʻāpana hoʻohālike - advertise URI и HTTP port.
Aia ma lalo nā ʻāpana hoʻohālike app-1 и storage-1-replica.
Pono mākou e haʻi iā Ansible i nā palena pili no kēlā me kēia manawa. Me he mea lā e hoʻohui i nā manawa i loko o nā hui mīkini virtual. No kēia kumu, hoʻohui ʻia nā ʻano i nā hui host1 и host2, a ma kēlā me kēia hui ma ka māhele vars hōʻike ʻia nā waiwai ansible_host и ansible_user no hoʻokahi mīkini virtual. A ma ka pauku hosts - nā pūʻali (aka manawa) i hoʻokomo ʻia i kēia hui:
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:Hoʻomaka mākou e hoʻololi hosts.yml. E hoʻohui hou i ʻelua mau manawa, storage-2-replica ma ka mīkini virtual mua a storage-2 Ma ka lua:
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: # <==
...E hoʻokuʻu i ka puke pāʻani ansible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.ymlE ʻoluʻolu e hoʻomaopopo i ke koho --limit. No ka mea he pūʻali kēlā me kēia hui puʻupuʻu i nā huaʻōlelo Ansible, hiki iā mākou ke kuhikuhi pololei i nā manawa e hoʻonohonoho pono ʻia i ka wā e hoʻokō ai i ka playbook.
E hoʻi ana i ka UI Pūnaewele a ʻike i kā mākou mau manawa hou:

ʻAʻole kākou e pau i laila a haku i ka hoʻokele topology.
Hooponopono topology
E hoʻohui i kā mākou mau manawa hou i kahi hoʻonohonoho kope storage-2. E hoʻohui i kahi hui hou replicaset_storage_2 a wehewehe i nā ʻāpana replicaset i kona mau ʻano like ʻole me replicaset_storage_1. Ma ka pauku hosts E hōʻike i nā manawa e hoʻokomo ʻia i loko o kēia pūʻulu (ʻo ia hoʻi, kā mākou 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:E hoʻomaka hou kākou i ka puke pāʻani:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.ymlI ka palena --limit I kēia manawa ua hāʻawi mākou i ka inoa o ka hui e pili ana i kā mākou kope kope.
E noʻonoʻo kākou i ke koho tags.
Hana ʻia kā mākou kuleana i nā hana like ʻole, i hōʻailona ʻia me nā ʻōlelo aʻe:
cartridge-instances: hoʻokele hoʻonohonoho (hoʻonohonoho, pili i ka lālā);cartridge-replicasets: ka hooponopono topology (ka hooponopono hou ana a me ka hoopau mau loa ana (e kipaku aku) o na manawa mai ka hui;cartridge-config: ka mālama ʻana i nā ʻāpana cluster ʻē aʻe (vshard bootstrapping, mode failover aunoa, nā ʻāpana ʻae a me ka hoʻonohonoho noiʻi).
Hiki iā mākou ke kuhikuhi pololei i ka ʻāpana o ka hana a mākou e makemake ai e hana, a laila e hoʻokuʻu ke kuleana i ke koena o nā hana. I kā mākou hihia, makemake mākou e hana wale me ka topology, no laila ua kuhikuhi mākou cartridge-replicasets.
E loiloi kākou i ka hopena o kā kākou hoʻoikaika ʻana. ʻIke mākou i kahi kope hou ma .

Hooray!
E hoʻāʻo me ka hoʻololi ʻana i ka hoʻonohonoho o nā manawa a me nā hoʻonohonoho kope a ʻike i ka loli ʻana o ka topology cluster. Hiki iā ʻoe ke hoʻāʻo i nā hiʻohiʻona hana like ʻole, e.g. a mahuahua paha memtx_memory. E ho'āʻo ke kuleana e hana i kēia me ka ʻole e hoʻomaka hou i ka laʻana i mea e hōʻemi ai i ka manawa haʻahaʻa o kāu noi.
Mai poina e holo vagrant halte hooki i nā mīkini virtual ke pau kāu hana pū me lākou.
A aia ma lalo o ka pākaukau?
Eia wau e haʻi hou aku iā ʻoe e pili ana i nā mea e hana nei ma lalo o ka puʻupuʻu o ke kuleana ansible i kā mākou hoʻokolohua.
E nānā kākou i ka hoʻohana ʻana i ka palapala noi Cartridge i kēlā me kēia pae.
Ke hoʻouka nei i ka pūʻolo a me nā manawa hoʻomaka
Pono mua ʻoe e hāʻawi i ka pūʻolo i ke kikowaena a hoʻokomo iā ia. I kēia manawa hiki ke hana me nā pūʻolo RPM a me DEB.
A laila hoʻomaka mākou i nā hihia. Maʻalahi loa nā mea a pau ma ʻaneʻi: he ʻokoʻa kēlā me kēia laʻana systemd-lawelawe. E hāʻawi wau iā ʻoe i laʻana:
$ systemctl start myapp@storage-1E hoʻomaka kēia kauoha i ka laʻana storage-1 Apps myapp. E ʻimi ka mea i hoʻokuʻu ʻia i kāna в /etc/tarantool/conf.d/. Hiki ke ʻike ʻia nā log instance me ka hoʻohana ʻana journald.
waihona waihona /etc/systemd/system/myapp@.sevice no ka lawelawe systemd e hāʻawi pū ʻia me ka pūʻolo.
Ua kūkulu ʻia ʻo Ansible i nā modules no ka hoʻokomo ʻana i nā pūʻolo a me ka hoʻokele ʻana i nā lawelawe systemd; ʻaʻole mākou i hana i kahi mea hou ma aneʻi.
Hoʻonohonoho i kahi topology cluster
ʻO kēia kahi e hoʻomaka ai ka leʻaleʻa. ʻAe, he mea ʻē ka pilikia me kahi kuleana Ansible kūikawā no ka hoʻokomo ʻana i nā pūʻolo a me ka holo ʻana systemd-nā lawelawe.
Hiki iā ʻoe ke hoʻonohonoho i ka pūʻulu me ka lima:
- ʻO ka koho mua: wehe i ka UI pūnaewele a kaomi i nā pihi. He kūpono no ka hoʻomaka hoʻokahi manawa o kekahi mau manawa.
- Koho lua: hiki iā ʻoe ke hoʻohana i ka GraphQl API. Maanei hiki iā ʻoe ke hoʻokaʻawale i kekahi mea, no ka laʻana, kākau i kahi palapala ma Python.
- ʻO ke koho ʻekolu (no ka manaʻo ikaika): hele i ke kikowaena, hoʻopili i kekahi o nā manawa e hoʻohana ana
tarantoolctl connecta e hana i na hana pono a pau me ka lua modulecartridge.
ʻO ka hana nui o kā mākou mea hana, ʻo ia ke hana pololei i kēia, ʻo ka hapa paʻakikī o ka hana no ʻoe.
ʻAe ʻo Ansible iā ʻoe e kākau i kāu module ponoʻī a hoʻohana iā ia i kahi kuleana. Hoʻohana kā mākou kuleana i ia mau modula e hoʻokele i nā ʻāpana cluster like ʻole.
Pehea ka hana? Hōʻike ʻoe i ke kūlana makemake o ka puʻupuʻu ma kahi hoʻonohonoho declarative, a hāʻawi ke kuleana i kēlā me kēia module me kāna ʻāpana hoʻonohonoho i mea hoʻokomo. Loaʻa i ka module ke kūlana o kēia manawa o ka hui a hoʻohālikelike me ka mea i loaʻa ma ke ʻano he hoʻokomo. Ma hope aʻe, hoʻomaka ʻia kahi code ma ke kumu o kekahi o nā manawa, e lawe ana i ka pūʻulu i kahi kūlana i makemake ʻia.
Nā hopena
I kēia lā ua haʻi mākou a hōʻike pehea e kau ai i kāu noi iā Tarantool Cartridge a hoʻonohonoho i kahi topology maʻalahi. No ka hana ʻana i kēia, ua hoʻohana mākou iā Ansible - kahi mea hana maʻalahi e hoʻohana a hiki iā ʻoe ke hoʻonohonoho like i nā nodes waiwai nui (i kā mākou hihia, cluster instance).
Ma luna aʻe ua nānā mākou i kekahi o nā ala he nui e wehewehe i kahi hoʻonohonoho cluster me ka hoʻohana ʻana iā Ansible. Ke mākaukau ʻoe e neʻe, e ʻimi ma ke kākau ʻana i nā puke pāʻani. Hiki iā ʻoe ke maʻalahi i ka hoʻokele ʻana i kāu topology me ka hoʻohana ʻana group_vars и host_vars.
ʻAʻole koke mākou e haʻi iā ʻoe pehea e hoʻopau mau ai (kipaku) i nā manawa mai ka topology, bootstrap vshard, hoʻokele i ke ʻano failover aunoa, hoʻonohonoho i ka ʻae a hoʻopaʻa i ka config cluster. I kēia manawa, hiki iā ʻoe ke aʻo iā ʻoe iho a hoʻokolohua me ka hoʻololi ʻana i nā ʻāpana cluster.
Inā maikaʻi ʻole kekahi mea, e ʻike pono iā mākou e pili ana i ka pilikia. E hoʻoponopono koke mākou i nā mea a pau!
Source: www.habr.com
