Ua kamaʻilio mua mākou
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
Loaʻa iā Tarantool Cartridge 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-1
e hoʻokō i ke kuleanaapi
, e pili ana i ke kuleanavshard-router
. Hoʻokahi wale nō manawa maʻaneʻi. - Hoʻopili hou
storage-1
hoʻ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
Aia ka hana ponoi
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.0
Hoʻonui mākou i nā mīkini virtual:
$ vagrant up
E hoʻouka i ka Tarantool Cartridge ansible role:
$ ansible-galaxy install tarantool.cartridge,1.0.1
E hoʻomaka i ka hana i hoʻokomo ʻia:
$ ansible-playbook -i hosts.yml playbook.yml
Ke kali nei mākou no ka hoʻokō ʻana o ka puke pāʻani, hele i
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 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.yml
E ʻ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ʻ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.yml
I 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. 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 halt
e 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-1
E 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/[email protected]
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 connect
a 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 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
Inā maikaʻi ʻole kekahi mea, e ʻike pono
Source: www.habr.com