Napag-usapan na namin
Interesting? Pagkatapos ay mangyaring, sa ilalim ng hiwa, sasabihin namin sa iyo at ipapakita sa iyo ang lahat.
Magsimula tayo sa isang halimbawa
Titingnan lang natin ang bahagi ng functionality ng ating tungkulin. Makakahanap ka palagi ng kumpletong paglalarawan ng lahat ng mga kakayahan at mga parameter ng input nito
Ang Tarantool Cartridge ay mayroon api
ΠΈ storage
, na maaaring italaga sa mga instance.
Ang Cartridge mismo ay walang sinasabi tungkol sa kung paano ilunsad ang mga proseso, nagbibigay lamang ito ng kakayahang i-configure ang mga tumatakbo nang pagkakataon. Dapat gawin mismo ng user ang iba: ayusin ang mga configuration file, simulan ang mga serbisyo at i-configure ang topology. Ngunit hindi namin gagawin ang lahat ng ito; gagawin ito ng Ansible para sa amin.
Mula sa salita hanggang sa gawa
Kaya, i-deploy natin ang aming application sa dalawang virtual machine at mag-set up ng isang simpleng topology:
- Replicaset
app-1
ipapatupad ang tungkulinapi
, na kinabibilangan ng tungkulinvshard-router
. Magkakaroon lamang ng isang pagkakataon dito. - Replicaset
storage-1
nagpapatupad ng tungkulinstorage
(at sa parehong orasvshard-storage
), dito magdaragdag kami ng dalawang pagkakataon mula sa magkaibang mga makina.
Upang patakbuhin ang halimbawa na kailangan natin
Ang papel mismo ay nasa
I-clone natin ang repositoryo ng isang halimbawa:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Nagtataas kami ng mga virtual machine:
$ vagrant up
I-install ang Tarantool Cartridge ansible role:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Ilunsad ang naka-install na tungkulin:
$ ansible-playbook -i hosts.yml playbook.yml
Hinihintay namin ang playbook upang makumpleto ang pagpapatupad, pumunta sa
Maaari kang mag-upload ng data. Astig diba?
Ngayon, alamin natin kung paano ito gagawin, at sabay na magdagdag ng isa pang replica na set sa topology.
Simulan natin itong malaman
So anong nangyari?
Nag-set up kami ng dalawang virtual machine at naglunsad ng isang praktikal na playbook na nag-configure sa aming cluster. Tingnan natin ang mga nilalaman ng 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
Walang kawili-wiling nangyayari dito, ilunsad natin ang isang ansible na tungkulin na tinatawag tarantool.cartridge
.
Ang lahat ng pinakamahalagang bagay (ibig sabihin, ang configuration ng cluster) ay matatagpuan 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 kailangan lang namin ay matutunan kung paano pamahalaan ang mga instance at replicase sa pamamagitan ng pagbabago sa mga nilalaman ng file na ito. Susunod, magdaragdag kami ng mga bagong seksyon dito. Upang hindi malito kung saan idaragdag ang mga ito, maaari mong tingnan ang huling bersyon ng file na ito, hosts.updated.yml
, na nasa halimbawang repositoryo.
Pamamahala ng halimbawa
Sa mga terminong Ansible, ang bawat instance ay isang host (hindi dapat ipagkamali sa isang server ng hardware), i.e. ang infrastructure node na pamamahalaan ng Ansible. Para sa bawat host maaari naming tukuyin ang mga parameter ng koneksyon (tulad ng ansible_host
ΠΈ ansible_user
), pati na rin ang pagsasaayos ng instance. Ang paglalarawan ng mga pagkakataon ay nasa seksyon hosts
.
Tingnan natin ang pagsasaayos ng halimbawa storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Sa variable config
tinukoy namin ang mga parameter ng halimbawa - advertise URI
ΠΈ HTTP port
.
Nasa ibaba ang mga parameter ng instance app-1
ΠΈ storage-1-replica
.
Kailangan nating sabihin sa Ansible ang mga parameter ng koneksyon para sa bawat pagkakataon. Mukhang lohikal na ipangkat ang mga pagkakataon sa mga pangkat ng virtual machine. Para sa layuning ito, ang mga pagkakataon ay pinagsama sa mga pangkat host1
ΠΈ host2
, at sa bawat pangkat sa seksyon vars
ipinahiwatig ang mga halaga ansible_host
ΠΈ ansible_user
para sa isang virtual machine. At sa section hosts
β mga host (aka instance) na kasama sa pangkat na ito:
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:
Nagsisimula tayong magbago hosts.yml
. Magdagdag pa tayo ng dalawa pang pagkakataon, storage-2-replica
sa unang virtual machine at storage-2
Sa pangalawa:
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: # <==
...
Ilunsad ang ansible playbook:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Pakitandaan ang opsyon --limit
. Dahil ang bawat cluster instance ay isang host sa mga terminong Ansible, maaari naming tahasang tukuyin kung aling mga instance ang dapat i-configure kapag isinasagawa ang playbook.
Bumabalik sa Web UI
Huwag tayong tumigil doon at master topology management.
Pamamahala ng topology
Pagsamahin natin ang ating mga bagong instance sa isang replica set storage-2
. Magdagdag tayo ng bagong grupo replicaset_storage_2
at ilarawan ang mga parameter ng replicaset sa mga variable nito sa pamamagitan ng pagkakatulad sa replicaset_storage_1
. Sa seksyon hosts
Ipahiwatig natin kung aling mga pagkakataon ang isasama sa pangkat na ito (iyon ay, ang aming 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:
Simulan natin muli ang playbook:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Sa parameter --limit
Sa pagkakataong ito, ipinasa namin ang pangalan ng pangkat na tumutugma sa aming replika.
Isaalang-alang natin ang pagpipilian tags
.
Ang aming tungkulin ay sunud-sunod na gumaganap ng iba't ibang mga gawain, na minarkahan ng mga sumusunod na tag:
cartridge-instances
: instance management (configuration, koneksyon sa membership);cartridge-replicasets
: pamamahala ng topology (pamamahala ng replicaset at permanenteng pag-alis (paalis) ng mga instance mula sa cluster);cartridge-config
: pamamahala ng iba pang mga parameter ng cluster (vshard bootstrapping, awtomatikong failover mode, mga parameter ng pahintulot at pagsasaayos ng application).
Maaari naming tahasang tukuyin kung aling bahagi ng gawain ang gusto naming gawin, pagkatapos ay laktawan ng tungkulin ang iba pang mga gawain. Sa aming kaso, gusto naming magtrabaho lamang sa topology, kaya tinukoy namin cartridge-replicasets
.
Suriin natin ang resulta ng ating pagsisikap. Nakahanap kami ng bagong replicase
Yehey!
Mag-eksperimento sa pagbabago ng configuration ng mga instance at replica set at tingnan kung paano nagbabago ang cluster topology. Maaari mong subukan ang iba't ibang mga sitwasyon sa pagpapatakbo, hal. memtx_memory
. Susubukan ng tungkulin na gawin ito nang hindi na-restart ang instance upang mabawasan ang posibleng downtime ng iyong aplikasyon.
Huwag kalimutang tumakbo vagrant halt
upang ihinto ang mga virtual machine kapag tapos ka nang magtrabaho sa kanila.
At ano ang nasa ilalim ng hood?
Dito ay sasabihin ko sa iyo ang higit pa tungkol sa kung ano ang nangyayari sa ilalim ng hood ng ansible na tungkulin sa panahon ng aming mga eksperimento.
Tingnan natin ang pag-deploy ng Cartridge application nang hakbang-hakbang.
Pag-install ng package at pagsisimula ng mga pagkakataon
Una kailangan mong ihatid ang package sa server at i-install ito. Sa kasalukuyan ang tungkulin ay maaaring gumana sa mga RPM at DEB na pakete.
Susunod na ilulunsad namin ang mga pagkakataon. Napakasimple ng lahat dito: hiwalay ang bawat pagkakataon systemd
-serbisyo. Bibigyan kita ng isang halimbawa:
$ systemctl start myapp@storage-1
Ilulunsad ng command na ito ang instance storage-1
apps myapp
. Hahanapin ng inilunsad na instance ang nito /etc/tarantool/conf.d/
. Maaaring tingnan ang mga instance log gamit ang journald
.
Unit file /etc/systemd/system/[email protected]
para sa systemd service ay ihahatid kasama ng package.
Ang Ansible ay may mga built-in na module para sa pag-install ng mga pakete at pamamahala ng mga serbisyo ng systemd; wala kaming naimbentong bago dito.
Pagse-set up ng cluster topology
Dito nagsisimula ang saya. Sumang-ayon, kakaiba ang mag-abala sa isang espesyal na tungkulin ng Ansible para sa pag-install ng mga pakete at pagpapatakbo systemd
-services.
Maaari mong i-configure nang manu-mano ang cluster:
- Unang pagpipilian: buksan ang Web UI at mag-click sa mga pindutan. Ito ay lubos na angkop para sa isang beses na pagsisimula ng ilang mga pagkakataon.
- Pangalawang opsyon: maaari mong gamitin ang GraphQl API. Dito maaari mo nang i-automate ang isang bagay, halimbawa, magsulat ng script sa Python.
- Pangatlong opsyon (para sa malakas ang loob): pumunta sa server, kumonekta sa isa sa mga pagkakataong gumagamit
tarantoolctl connect
at isagawa ang lahat ng kinakailangang manipulasyon gamit ang Lua modulecartridge
.
Ang pangunahing gawain ng aming imbensyon ay gawin ito nang eksakto, ang pinakamahirap na bahagi ng trabaho para sa iyo.
Binibigyang-daan ka ng Ansible na magsulat ng sarili mong module at gamitin ito sa isang tungkulin. Gumagamit ang aming tungkulin ng mga naturang module upang pamahalaan ang iba't ibang bahagi ng cluster.
Paano ito gumagana? Inilalarawan mo ang nais na estado ng cluster sa isang deklaratibong config, at ang tungkulin ay nagbibigay sa bawat module ng seksyon ng pagsasaayos nito bilang input. Natatanggap ng module ang kasalukuyang estado ng cluster at inihahambing ito sa kung ano ang natanggap bilang input. Susunod, ang isang code ay inilunsad sa pamamagitan ng socket ng isa sa mga pagkakataon, na nagdadala ng cluster sa nais na estado.
Mga resulta ng
Ngayon sinabi namin at ipinakita kung paano i-deploy ang iyong application sa Tarantool Cartridge at mag-set up ng isang simpleng topology. Upang gawin ito, ginamit namin ang Ansible - isang makapangyarihang tool na madaling gamitin at nagbibigay-daan sa iyo na sabay na i-configure ang maraming mga node ng imprastraktura (sa aming kaso, mga cluster instance).
Sa itaas ay tiningnan namin ang isa sa maraming paraan upang ilarawan ang configuration ng cluster gamit ang Ansible. Kapag handa ka nang magpatuloy, mag-explore group_vars
ΠΈ host_vars
.
Sa lalong madaling panahon, sasabihin namin sa iyo kung paano permanenteng tanggalin (paalisin) ang mga instance mula sa topology, bootstrap vshard, pamahalaan ang awtomatikong failover mode, i-configure ang awtorisasyon at i-patch ang cluster config. Samantala, maaari kang mag-aral nang mag-isa
Kung ang isang bagay ay hindi gumagana, siguraduhin na
Pinagmulan: www.habr.com