Takambirana kale
Zosangalatsa? Ndiye chonde, pansi pa odulidwa, tidzakuuzani ndi kukuwonetsani chirichonse.
Tiyeni tiyambe ndi chitsanzo
Tingoyang'ana gawo limodzi la magwiridwe antchito athu. Mutha kupeza nthawi zonse kufotokozera kwamphamvu zake zonse ndi magawo ake
Tarantool Cartridge ili ndi api
ΠΈ storage
, yomwe ikhoza kuperekedwa ku zochitika.
Cartridge palokha sichinena chilichonse chokhudza momwe mungayambitsire njira, imangopereka luso lokonzekera zochitika zomwe zikuyenda kale. Wogwiritsa ntchito ayenera kuchita zotsala yekha: konzani mafayilo osinthira, yambitsani ntchito ndikukhazikitsa topology. Koma sitidzachita zonsezi; Ansible adzatichitira ife.
Kuchokera pa mawu kupita ku zochita
Chifukwa chake, tiyeni titumize ntchito yathu pamakina awiri enieni ndikukhazikitsa topology yosavuta:
- Seweraninso
app-1
adzakwaniritsa udindoapi
, zomwe zikuphatikizapo udindovshard-router
. Padzakhala chitsanzo chimodzi chokha apa. - Seweraninso
storage-1
amakwaniritsa udindostorage
(ndipo nthawi yomweyovshard-storage
), apa tidzawonjezera zitsanzo ziwiri kuchokera pamakina osiyanasiyana.
Kuti tiyendetse chitsanzo chomwe tikufuna
Udindo womwewo uli mkati
Tiyeni tifananize chosungiramo ndi chitsanzo:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Timayika makina owoneka bwino:
$ vagrant up
Ikani Tarantool Cartridge udindo woyenerera:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Yambitsani ntchito yoyika:
$ ansible-playbook -i hosts.yml playbook.yml
Timadikirira kuti playbook imalize kuphedwa, pitani
Mutha kukweza deta. Chabwino, chabwino?
Tsopano tiyeni tiwone momwe tingagwiritsire ntchito izi, ndipo panthawi imodzimodziyo yonjezerani chofanana china pa topology.
Tiyeni tiyambe kulingalira
Ndiye chinachitika ndi chiyani?
Tidapanga makina awiri owoneka bwino ndikuyambitsa buku lamasewera lomwe lidakonza gulu lathu. Tiyeni tiwone zomwe zili mufayiloyo 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
Palibe chosangalatsa chomwe chikuchitika apa, tiyeni tiyambitse gawo loyenera lotchedwa tarantool.cartridge
.
Zinthu zonse zofunika kwambiri (ndiko, kasinthidwe kamagulu) zili mkati 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:
Zomwe timafunikira ndikuphunzira momwe mungasamalire zochitika ndi zofananira posintha zomwe zili mufayiloyi. Kenako tidzawonjezera zigawo zatsopano kwa izo. Kuti musasokonezeke komwe mungawawonjezere, mutha kuyang'ana mtundu womaliza wa fayiloyi, hosts.updated.yml
, yomwe ili mu chitsanzo chosungira.
Kasamalidwe ka zochitika
M'mawu Ansible, chitsanzo chilichonse ndi cholandira (chosasokonezedwa ndi seva ya hardware), i.e. node ya zomangamanga yomwe Ansible idzayendetsa. Kwa wolandira aliyense titha kufotokozera magawo olumikizirana (monga ansible_host
ΠΈ ansible_user
), komanso makonzedwe achitsanzo. Kufotokozera za zochitika kuli mu gawoli hosts
.
Tiyeni tiwone kasinthidwe kachitsanzo storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Mu variable config
tidafotokoza zachitsanzo - advertise URI
ΠΈ HTTP port
.
Pansipa pali magawo a zitsanzo app-1
ΠΈ storage-1-replica
.
Tiyenera kuuza Ansible magawo olumikizirana pamwambo uliwonse. Zikuwoneka zomveka kuyika zochitika m'magulu a makina enieni. Pachifukwa ichi, zitsanzo zimaphatikizidwa m'magulu host1
ΠΈ host2
, ndi mβgulu lililonse mβgawolo vars
ma values ββamawonetsedwa ansible_host
ΠΈ ansible_user
kwa makina amodzi. Ndipo mu gawo hosts
- makamu (akanthawi) omwe akuphatikizidwa mu gulu ili:
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:
Timayamba kusintha hosts.yml
. Tiyeni tiwonjezere zitsanzo zina ziwiri, storage-2-replica
pa makina oyamba pafupifupi ndi storage-2
Pa chachiwiri:
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: # <==
...
Yambitsani playbook yoyenera:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Chonde dziwani njira --limit
. Popeza kuti gulu lililonse limakhala ndi mawu akuti Ansible, titha kufotokoza momveka bwino kuti ndi zochitika ziti zomwe zikuyenera kukhazikitsidwa popanga playbook.
Kubwerera ku Web UI
Osayima pamenepo ndikuwongolera kasamalidwe ka topology.
Topology Management
Tiyeni tiphatikize zochitika zathu zatsopano kukhala zofananira storage-2
. Tiyeni tiwonjezere gulu latsopano replicaset_storage_2
ndikufotokozera magawo ofananirako muzosintha zake mofananiza ndi replicaset_storage_1
. Mu gawo hosts
Tiyeni tiwonetse zochitika zomwe zidzaphatikizidwe mugululi (ndiko kuti, zofananira zathu):
---
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:
Tiyeni tiyambenso sewerolo:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Pa njira --limit
Nthawi ino tidapereka dzina la gulu lomwe limagwirizana ndi zomwe tajambula.
Tiyeni tikambirane zimene mungachite tags
.
Ntchito yathu motsatizana imagwira ntchito zosiyanasiyana, zomwe zimalembedwa ndi ma tag awa:
cartridge-instances
: kasamalidwe ka zitsanzo (kusintha, kulumikizana ndi umembala);cartridge-replicasets
: kasamalidwe ka topology (kasamalidwe kofananira ndi kuchotsedwa kosatha (kuchotsa) zochitika pagulu);cartridge-config
: kasamalidwe ka magawo ena amagulu (vshard bootstrapping, automatic failover mode, zololeza magawo ndi kasinthidwe ka ntchito).
Titha kufotokoza momveka bwino kuti ndi gawo liti la ntchito yomwe tikufuna kuchita, ndiye kuti gawolo lidzadumpha zina zonse. Kwa ife, tikufuna kugwira ntchito ndi topology yokha, ndiye tidafotokoza cartridge-replicasets
.
Tiyeni tione zotsatira za khama lathu. Tapeza chofananira chatsopano
Hooray!
Yesani kusintha masinthidwe a zochitika ndi ma seti ofananira ndikuwona momwe ma cluster topology amasinthira. Mutha kuyesa zochitika zosiyanasiyana zogwirira ntchito, mwachitsanzo. memtx_memory
. Ntchitoyi idzayesa kuchita izi popanda kuyambitsanso chitsanzo kuti muchepetse nthawi yochepetsera pulogalamu yanu.
Osayiwala kuthamanga vagrant halt
kuyimitsa makina enieni mukamaliza kugwira nawo ntchito.
Ndipo pansi pa hood ndi chiyani?
Pano ndikuuzani zambiri za zomwe zinali kuchitika pansi pa hood ya udindo wovomerezeka panthawi yoyesera.
Tiyeni tiwone kuyika pulogalamu ya Cartridge pang'onopang'ono.
Kuyika phukusi ndi zochitika zoyambira
Choyamba muyenera kupereka phukusi ku seva ndikuyiyika. Pakadali pano ntchitoyi imatha kugwira ntchito ndi RPM ndi DEB phukusi.
Apa tikuyamba zochitika. Chilichonse ndi chophweka apa: chitsanzo chilichonse ndi chosiyana systemd
- utumiki. Ndikupatsani chitsanzo:
$ systemctl start myapp@storage-1
Lamuloli liyambitsa chitsanzo storage-1
mapulogalamu myapp
. Chitsanzo chokhazikitsidwa chidzayang'ana zake /etc/tarantool/conf.d/
. Zithunzi zojambulidwa zimatha kuwonedwa pogwiritsa ntchito journald
.
Fayilo ya unit /etc/systemd/system/[email protected]
kwa ntchito ya systemd idzaperekedwa pamodzi ndi phukusi.
Ansible ali ndi ma module opangira kukhazikitsa mapaketi ndikuwongolera ma systemd services; sitinapange china chatsopano pano.
Kupanga topology yamagulu
Apa ndi pamene zosangalatsa zimayambira. Gwirizanani, zingakhale zachilendo kuvutitsidwa ndi gawo lapadera la Ansible pakuyika mapaketi ndikuyendetsa systemd
-zinthu.
Mutha kusintha cluster pamanja:
- Njira yoyamba: tsegulani Web UI ndikudina mabatani. Ndikoyenera kuti muyambe kamodzi pakanthawi zingapo.
- Njira yachiwiri: mutha kugwiritsa ntchito GraphQl API. Apa mutha kusintha kale china chake, mwachitsanzo, lembani script mu Python.
- Njira yachitatu (kwa ofunitsitsa): pitani ku seva, kulumikizana ndi imodzi mwazogwiritsa ntchito
tarantoolctl connect
ndikuchita zonse zofunikira ndi gawo la Luacartridge
.
Ntchito yayikulu yomwe tapanga ndikupanga izi ndendende, gawo lovuta kwambiri pantchitoyo kwa inu.
Ansible imakulolani kuti mulembe gawo lanu ndikuligwiritsa ntchito ngati gawo. Ntchito yathu imagwiritsa ntchito ma modules kuti aziyang'anira zigawo zosiyanasiyana zamagulu.
Zimagwira ntchito bwanji? Mumalongosola momwe gululo likufunira mukusintha kofotokozera, ndipo gawolo limapereka gawo lililonse ndi gawo lake lokonzekera ngati cholowetsa. Gawoli limalandira momwe gululi likukhalira ndikulifanizira ndi zomwe zidalandilidwa ngati zolowetsa. Kenako, code imayambitsidwa kudzera mu socket ya imodzi mwazochitika, zomwe zimabweretsa gululo kudziko lomwe mukufuna.
Zotsatira
Lero tidauza ndikuwonetsa momwe mungatumizire pulogalamu yanu ku Tarantool Cartridge ndikukhazikitsa topology yosavuta. Kuti tichite izi, tidagwiritsa ntchito Ansible - chida champhamvu chomwe ndi chosavuta kugwiritsa ntchito ndipo chimakupatsani mwayi wokonza nthawi imodzi ma node ambiri (kwa ife, zochitika zamagulu).
Pamwambapa tidayang'ana njira imodzi yofotokozera masanjidwe amagulu pogwiritsa ntchito Ansible. Mukangomva kuti mwakonzeka kupitilira, fufuzani group_vars
ΠΈ host_vars
.
Posachedwapa tidzakuuzani momwe mungachotsere (kutulutsa) zochitika kuchokera ku topology, bootstrap vshard, kusamalira mode automatic failover, sinthani chilolezo ndikuyika chigamba config. Pakali pano, mukhoza kuphunzira nokha
Ngati china chake sichikuyenda, onetsetsani
Source: www.habr.com