Kita wis ngomong babagan
menarik? Banjur mangga, ing ngisor potong, kita bakal ngandhani lan nuduhake kabeh.
Ayo dadi miwiti karo conto
Kita mung bakal ndeleng bagean saka fungsi peran kita. Sampeyan bisa tansah golek gambaran lengkap kabeh kapabilitas lan paramèter input ing
Tarantool Cartridge wis api
и storage
, sing bisa ditugasake kanggo instance.
Cartridge dhewe ora ngomong apa-apa bab carane miwiti proses, iku mung menehi kemampuan kanggo ngatur kedadean wis mlaku. Pangguna kudu nindakake liyane dhewe: ngatur file konfigurasi, miwiti layanan lan ngatur topologi. Nanging kita ora bakal nindakake kabeh iki; Ansible bakal nindakake kanggo kita.
Saka tembung nganti tumindak
Dadi, ayo masang aplikasi kita menyang rong mesin virtual lan nyiyapake topologi sing prasaja:
- Replika
app-1
bakal ngleksanakake peranapi
, kang kalebu peranvshard-router
. Mung ana siji conto ing kene. - Replika
storage-1
ngleksanakake peranstorage
(lan ing wektu sing padhavshard-storage
), ing kene kita bakal nambah rong conto saka mesin sing beda.
Kanggo mbukak conto kita kudu
Peran kasebut dhewe
Ayo tiron repositori kanthi conto:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Kita mundhakaken mesin virtual:
$ vagrant up
Instal peran Tarantool Cartridge ansible:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Bukak peran sing diinstal:
$ ansible-playbook -i hosts.yml playbook.yml
Kita ngenteni playbook kanggo ngrampungake eksekusi, pindhah menyang
Sampeyan bisa ngunggah data. Kelangan, bener?
Saiki ayo dipikirake carane nggarap iki, lan ing wektu sing padha nambahake replika liyane menyang topologi.
Ayo dadi miwiti kanggo tokoh metu
Dadi apa sing kedadeyan?
Kita nyiyapake rong mesin virtual lan ngluncurake playbook ansible sing ngatur kluster. Ayo ndeleng isi file kasebut 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
Ora ana sing menarik ing kene, ayo miwiti peran sing bisa diarani tarantool.cartridge
.
Kabeh sing paling penting (yaiku konfigurasi kluster) dumunung ing 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:
Kabeh sing kita butuhake yaiku sinau babagan ngatur conto lan replika kanthi ngganti isi file iki. Sabanjure kita bakal nambah bagean anyar. Supaya ora bingung ngendi kanggo nambah, sampeyan bisa ndeleng ing versi final saka berkas iki, hosts.updated.yml
, sing ana ing gudang conto.
Manajemen conto
Ing istilah Ansible, saben conto minangka host (ora bakal bingung karo server hardware), i.e. simpul infrastruktur sing Ansible bakal ngatur. Kanggo saben host kita bisa nemtokake paramèter sambungan (kayata ansible_host
и ansible_user
), uga konfigurasi conto. Katrangan saka kedadean ana ing bagean hosts
.
Ayo katon ing konfigurasi conto storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Ing variabel config
kita nemtokake paramèter conto - advertise URI
и HTTP port
.
Ing ngisor iki paramèter conto app-1
и storage-1-replica
.
We kudu marang Ansible paramèter sambungan kanggo saben Kayata. Iku misale jek logis kanggo klompok kedadean menyang grup mesin virtual. Kanggo tujuan iki, conto digabungake dadi klompok host1
и host2
, lan ing saben klompok ing bagean vars
nilai dituduhake ansible_host
и ansible_user
kanggo siji mesin virtual. Lan ing bagean hosts
- host (alias instance) sing kalebu ing grup iki:
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:
Kita wiwiti ngganti hosts.yml
. Ayo ditambahake rong conto liyane, storage-2-replica
ing mesin virtual pisanan lan storage-2
Ing kaloro:
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: # <==
...
Bukak playbook ansible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Wigati pilihan --limit
. Wiwit saben conto kluster minangka host ing istilah Ansible, kita bisa kanthi jelas nemtokake conto sing kudu dikonfigurasi nalika nglakokake playbook.
Bali menyang UI Web
Aja mandheg ing kana lan nguwasani manajemen topologi.
Manajemen topologi
Ayo gabungke instansi anyar dadi set replika storage-2
. Ayo nambah grup anyar replicaset_storage_2
lan njlèntrèhaké paramèter replikaset ing sawijining variabel dening analogi karo replicaset_storage_1
. Ing bagean hosts
Ayo nuduhake conto endi sing bakal dilebokake ing grup iki (yaiku, set replika):
---
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:
Ayo miwiti playbook maneh:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Ing parameter --limit
Wektu iki kita ngliwati jeneng grup sing cocog karo replikat kita.
Ayo dipikirake pilihan kasebut tags
.
Peran kita kanthi urutan nindakake macem-macem tugas, sing ditandhani karo tag ing ngisor iki:
cartridge-instances
: manajemen conto (konfigurasi, sambungan menyang anggota);cartridge-replicasets
: manajemen topologi (manajemen replika lan mbusak permanen (ngusir) conto saka kluster);cartridge-config
: Manajemen paramèter kluster liyane (vshard bootstrapping, mode failover otomatis, paramèter wewenang lan konfigurasi aplikasi).
Kita bisa kanthi jelas nemtokake bagean saka karya sing arep ditindakake, banjur peran kasebut bakal ngliwati tugas liyane. Ing kasus kita, kita mung pengin nggarap topologi, supaya kita nemtokake cartridge-replicasets
.
Ayo padha ngevaluasi asil saka usaha kita. We golek replikaset anyar ing
Hooray!
Eksperimen karo ngganti konfigurasi kedadean lan replika set lan ndeleng carane topologi cluster diganti. Sampeyan bisa nyoba metu skenario operasional beda, f.eks. memtx_memory
. Peran bakal nyoba nindakake iki tanpa miwiti maneh instance kanggo nyuda kemungkinan downtime aplikasi sampeyan.
Ojo lali mlayu vagrant halt
kanggo mungkasi mesin virtual yen sampeyan wis rampung nggarap.
Apa sing ana ing ngisor hood?
Ing kene aku bakal ngandhani sampeyan luwih lengkap babagan apa sing kedadeyan ing sangisore peran sing bisa ditindakake sajrone eksperimen.
Ayo goleki nggunakake aplikasi Cartridge langkah demi langkah.
Nginstal paket lan miwiti kedadean
Pisanan sampeyan kudu ngirim paket menyang server lan nginstal. Saiki peran kasebut bisa digunakake karo paket RPM lan DEB.
Sabanjure kita miwiti conto. Kabeh gampang banget ing kene: saben conto minangka kapisah systemd
-layanan. Aku bakal menehi conto:
$ systemctl start myapp@storage-1
Printah iki bakal miwiti conto storage-1
app myapp
. Kayata sing diluncurake bakal nggoleki /etc/tarantool/conf.d/
. Log Kayata bisa dideleng nggunakake journald
.
File unit /etc/systemd/system/[email protected]
kanggo layanan systemd bakal dikirim bebarengan karo paket.
Ansible duwe modul sing dibangun kanggo nginstal paket lan ngatur layanan sistem; kita durung nemokke sing anyar ing kene.
Nggawe topologi cluster
Iki ngendi fun wiwit. Setuju, iku bakal aneh kanggo keganggu peran Ansible khusus kanggo nginstal paket lan mlaku systemd
-layanan
Sampeyan bisa ngatur kluster kanthi manual:
- Opsi pisanan: bukak UI Web banjur klik tombol. Iku cukup cocok kanggo wiwitan siji-wektu sawetara kedadean.
- Pilihan kapindho: sampeyan bisa nggunakake API GraphQl. Kene sampeyan wis bisa ngotomatisasi soko, contone, nulis script ing Python.
- Pilihan katelu (kanggo kuwat-karep): pindhah menyang server, nyambung menyang salah siji saka kedadean nggunakake
tarantoolctl connect
lan nindakake kabeh manipulasi perlu karo modul Luacartridge
.
Tugas utama penemuan kita yaiku nindakake persis iki, bagean paling angel saka karya kanggo sampeyan.
Ansible ngijini sampeyan kanggo nulis modul dhewe lan nggunakake ing peran. Peran kita nggunakake modul kasebut kanggo ngatur macem-macem komponen kluster.
Cara kerjane? Sampeyan njlèntrèhaké negara dikarepake saka kluster ing config declarative, lan peran menehi saben modul karo bagean konfigurasi minangka input. Modul nampa kahanan saiki kluster lan mbandhingake karo apa sing ditampa minangka input. Sabanjure, kode diluncurake liwat soket salah sawijining conto, sing nggawa kluster menyang negara sing dikarepake.
Hasil
Dina iki kita marang lan nuduhake carane masang aplikasi kanggo Tarantool Cartridge lan nyetel topologi prasaja. Kanggo nindakake iki, kita nggunakake Ansible - alat sing kuat sing gampang digunakake lan ngidini sampeyan ngatur akeh simpul infrastruktur (ing kasus kita, conto cluster).
Ndhuwur kita ndeleng salah siji saka akeh cara kanggo njlèntrèhaké konfigurasi cluster nggunakake Ansible. Sawise sampeyan wis siap kanggo nerusake, njelajah group_vars
и host_vars
.
Rauh banget kita bakal pitutur marang kowe carane mbusak permanen (ngusir) kedadean saka topologi, bootstrap vshard, ngatur mode failover otomatis, ngatur wewenang lan patch config cluster. Ing sawetoro wektu, sampeyan bisa sinau dhewe
Yen ana sing ora bisa, mesthine
Source: www.habr.com