Urang geus ngobrol ngeunaan
metot? Teras kuring naroskeun handapeun cut, kami bakal nyarios sareng nunjukkeun sadayana.
Hayu urang mimitian ku conto
Urang bakal nutupan ukur bagian tina pungsionalitas peran urang. Anjeun salawasna bisa manggihan pedaran lengkep sadaya fitur sarta parameter input dina
Tarantool Cartridge boga api
и storage
nu bisa ditugaskeun ka instansi.
Cartridge sorangan henteu nyarios nanaon ngeunaan kumaha ngamimitian prosés, éta ngan ukur nyayogikeun kamampuan pikeun ngonpigurasikeun instansi anu parantos jalan. Pamaké kudu ngalakukeun sésana sorangan: decompose file konfigurasi, ngamimitian jasa jeung nyetél topologi nu. Tapi urang moal ngalakukeun sadayana ieu, Ansible bakal ngalakukeun pikeun urang.
Ti kecap nepi ka lampah
Janten, hayu urang nyebarkeun aplikasi urang kana dua mesin virtual sareng nyetél topologi saderhana:
- réplikat
app-1
bakal maénkeun peranapi
nu ngawengku kalungguhanvshard-router
. Bakal aya ngan hiji conto di dieu. - réplikat
storage-1
ngalaksanakeun peranstorage
(sareng dina waktos anu samivshard-storage
), Di dieu urang tambahkeun dua instansi tina mesin anu béda.
Pikeun ngajalankeun conto, urang peryogi
Peran sorangan
Kloning gudang kalayan conto:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Kami ngangkat mesin virtual:
$ vagrant up
Pasang peran Tarantool Cartridge ansible:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Jalankeun peran anu dipasang:
$ ansible-playbook -i hosts.yml playbook.yml
Kami ngantosan tungtung palaksanaan playbook, buka
Anjeun tiasa tuang data. Keren, leres?
Ayeuna hayu urang terang kumaha carana dianggo kalayan ieu, sarta dina waktos anu sareng nambahkeun replica set sejen ka topologi nu.
Urang mimitian ngartos
Janten naon anu lumangsung?
Kami ngagaduhan dua VM sareng ngajalankeun playbook ansible anu nyetél kluster kami. Hayu urang nempo eusi 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
Euweuh metot kajadian di dieu, urang mimitian ansible-peran, nu disebut tarantool.cartridge
.
Sadaya anu paling penting (nyaéta, konfigurasi klaster) ayana di 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:
Sadaya anu urang peryogikeun nyaéta diajar kumaha ngatur instansi sareng réplikat ku cara ngarobih eusi file ieu. Salajengna, urang bakal nambihan bagian anyar kana éta. Supados teu bingung dimana nambihanana, anjeun tiasa ngintip kana versi ahir file ieu, hosts.updated.yml
, anu aya dina conto gudang.
Manajemén Instance
Dina watesan Ansible, unggal conto nyaéta host (teu aya patalina sareng server beusi), i.e. titik infrastruktur anu Ansible bakal ngatur. Pikeun unggal host, urang tiasa netepkeun parameter sambungan (sapertos ansible_host
и ansible_user
), kitu ogé konfigurasi instance. Katerangan ngeunaan instansi aya dina bagian hosts
.
Mertimbangkeun konfigurasi conto storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Dina hiji variabel config
kami netepkeun parameter conto - advertise URI
и HTTP port
.
Di handap ieu aya parameter conto app-1
и storage-1-replica
.
Urang kudu ngabejaan Ansible parameter sambungan pikeun tiap conto. Sigana logis pikeun grup instansi kana grup mesin virtual. Pikeun ieu, instansi digabungkeun kana grup. host1
и host2
, sarta dina unggal grup dina bagian vars
nilai-nilai ansible_host
и ansible_user
pikeun hiji mesin virtual. Sareng dina bagian hosts
- host (aranjeunna mangrupikeun instansi) anu kalebet dina grup ieu:
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:
Urang mimitian robah hosts.yml
. Hayu urang tambahkeun dua conto deui, storage-2-replica
dina mesin virtual munggaran tur storage-2
Dina kadua:
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: # <==
...
Ngajalankeun playbook ansible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Nengetan pilihan --limit
. Kusabab unggal conto klaster mangrupikeun host dina istilah Ansible, urang sacara eksplisit tiasa netepkeun instansi mana anu kedah dikonpigurasi nalika ngajalankeun playbook.
Balik deui ka UI Wéb
Urang moal beristirahat on laurels kami sarta bakal ngawasaan kontrol topologi.
manajemén Topology
Hayu urang ngagabung instansi anyar urang kana replikaset a storage-2
. Tambahkeun grup anyar replicaset_storage_2
sarta ngajelaskeun dina variabel na parameter tina replikaset ku analogi jeung replicaset_storage_1
. Dina bagian hosts
tangtukeun instansi mana anu bakal dilebetkeun kana grup ieu (nyaéta, set réplika kami):
---
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:
Hayu urang ngamimitian deui playbook:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Per pilihan --limit
urang waktos ieu lulus nami grup nu pakait jeung replikaset urang.
Mertimbangkeun pilihan tags
.
Peran urang sacara berurutan ngalaksanakeun sababaraha pancén, anu ditandaan ku tag ieu:
cartridge-instances
: manajemén conto (konfigurasi, sambungan ka kaanggotaan);cartridge-replicasets
: manajemén topologi (manajemén replicaset sarta ngaleupaskeun permanén (usir) tina instansi tina klaster);cartridge-config
: ngatur parameter klaster séjén (vshard bootstrapping, mode failover otomatis, parameter otorisasina sarta konfigurasi aplikasi).
Urang sacara eksplisit tiasa ngécéskeun naon bagian tina padamelan anu urang hoyong laksanakeun, teras peranna bakal ngalangkungan sesa tugas. Dina kasus urang, urang hoyong dianggo ukur ku topologi, jadi urang dieusian cartridge-replicasets
.
Hayu urang evaluasi hasil tina usaha urang. Pananjung replikaset anyar
Hooray!
Ékspérimén sareng konfigurasi ulang instansi sareng réplikaset sareng tingali kumaha topologi klaster robih. Anjeun tiasa nyobian sababaraha skenario operasional, contona, memtx_memory
. Peran bakal nyobian ngalakukeun ieu tanpa ngamimitian deui conto pikeun ngirangan kamungkinan downtime tina aplikasi anjeun.
Tong hilap lumpat vagrant halt
pikeun ngeureunkeun VMs mun anjeun geus rengse kalayan aranjeunna.
Jeung naon handapeun tiung?
Di dieu kuring bakal ngobrol langkung seueur ngeunaan naon anu kajantenan di handapeun tiung tina peran ansible salami percobaan urang.
Hayu urang tingali dina nyebarkeun aplikasi Cartridge step by step.
Masang pakét sareng ngamimitian instansi
Kahiji maneh kudu nganteurkeun pakét ka server tur masangkeunana. Ayeuna peranna tiasa dianggo sareng bungkusan RPM sareng DEB.
Salajengna, urang ngajalankeun instansi. Sadayana saderhana pisan di dieu: unggal conto mangrupikeun misah systemd
-layanan. Kuring ngawangkong ngeunaan conto:
$ systemctl start myapp@storage-1
Paréntah ieu bakal ngaluncurkeun conto storage-1
aktip myapp
. Instance anu diluncurkeun bakal milarian na /etc/tarantool/conf.d/
. Log conto tiasa ditingali nganggo journald
.
file Unit /etc/systemd/system/[email protected]
pikeun layanan systemd bakal dikirimkeun ku pakét.
Ansible ngagaduhan modul anu diwangun pikeun masang bungkusan sareng ngatur jasa systemd, kami henteu acan mendakan anu énggal di dieu.
Ngonpigurasikeun topologi klaster
Sarta di dieu nu paling metot dimimitian. Satuju, eta bakal aneh mun repot jeung ansible-peran husus pikeun masang bungkusan jeung ngajalankeun systemd
-layanan.
Anjeun tiasa nyetél klaster sacara manual:
- Pilihan kahiji: buka UI Wéb teras klik dina tombol. Pikeun hiji-waktos mimiti sababaraha instansi, éta cukup merenah.
- Pilihan kadua: anjeun tiasa nganggo API GraphQl. Di dieu anjeun geus bisa ngajadikeun otomatis hal, contona, nulis naskah dina Python.
- Pilihan katilu (pikeun kuat dina sumanget): buka server, sambungkeun ka salah sahiji instansi maké
tarantoolctl connect
sarta ngalakukeun sagala manipulasi perlu jeung modul Luacartridge
.
Tugas utama penemuan kami nyaéta pikeun ngalakukeun ieu, bagian anu paling hese pikeun anjeun.
Ansible ngamungkinkeun anjeun nyerat modul anjeun nyalira sareng dianggo dina peran. Peran urang ngagunakeun modul ieu pikeun ngatur rupa-rupa komponén klaster.
Kumaha gawéna? Anjeun ngajelaskeun kaayaan dipikahoyong tina klaster dina config déklaratif, sarta peran méré tiap modul bagian konfigurasi na salaku input. modul narima kaayaan ayeuna tina klaster sarta ngabandingkeun éta kalayan input. Salajengna, kodeu dijalankeun ngaliwatan stop kontak salah sahiji instansi, nu brings klaster ka kaayaan dipikahoyong.
hasil
Dinten ieu kami nyarios sareng nunjukkeun kumaha cara nyebarkeun aplikasi anjeun dina Cartridge Tarantool sareng nyetél topologi saderhana. Jang ngalampahkeun ieu, kami nganggo Ansible, alat anu kuat anu gampang dianggo sareng ngamungkinkeun anjeun sakaligus ngonpigurasikeun seueur titik infrastruktur (dina kasus urang, ieu mangrupikeun conto klaster).
Di luhur, urang diurus salah sahiji tina loba cara pikeun ngajelaskeun konfigurasi klaster maké Ansible. Sakali anjeun terang anjeun siap ngaléngkah, diajar group_vars
и host_vars
.
Pisan geura-giru kami bakal ngabejaan ka maneh kumaha permanén miceun (ngusir) instansi ti topologi nu, bootstrap vshard, ngatur mode failover otomatis, ngonpigurasikeun otorisasina sarta patch config klaster. Samentawis waktos, anjeun tiasa diajar nyalira
Upami aya anu henteu jalan, pastikeun
sumber: www.habr.com