Nou te deja pale de
Enteresan? Lè sa a, mwen mande anba koupe a, nou pral di ak montre tout bagay.
Ann kòmanse ak yon egzanp
Nou pral kouvri sèlman yon pati nan fonksyonalite wòl nou an. Ou ka toujou jwenn yon deskripsyon konplè sou tout karakteristik li yo ak paramèt opinyon nan
Tarantool Cartridge gen api
и storage
ki ka plase nan ka.
Katouch tèt li pa di anyen sou kòman yo kòmanse pwosesis, li sèlman bay kapasite nan konfigirasyon deja kouri enstans. Itilizatè a dwe fè rès la tèt li: dekonpoze fichye konfigirasyon yo, kòmanse sèvis yo epi mete topoloji a. Men nou pap fè tout sa, Ansible ap fè l pou nou.
Soti nan pawòl rive nan zèv
Se konsa, ann deplwaye aplikasyon nou an nan de machin vityèl epi mete yon senp topoloji:
- Replicaset
app-1
pral jwe wòl laapi
ki gen ladann wòl lavshard-router
. Pral gen yon sèl egzanp isit la. - replicaset
storage-1
aplike wòl lastorage
(e an menm tan anvshard-storage
), isit la nou ajoute de ka soti nan machin diferan.
Pou kouri egzanp lan, nou bezwen
Wòl nan tèt li se
Klone repozitwa a ak yon egzanp:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Nou ogmante machin vityèl:
$ vagrant up
Enstale Tarantool Cartridge ansible wòl:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Kouri wòl enstale a:
$ ansible-playbook -i hosts.yml playbook.yml
Nou ap tann nan fen ekzekisyon liv la, ale nan
Ou ka vide done. Cool, dwa?
Koulye a, kite a konnen ki jan yo travay ak sa a, epi an menm tan an ajoute yon lòt seri kopi nan topoloji a.
Nou kòmanse konprann
Se konsa, sa ki te pase?
Nou te gen de VM kanpe ak kouri yon liv jwèt ansible ki te mete gwoup nou an. Ann gade sa ki nan dosye a 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
Pa gen anyen ki enteresan k ap pase isit la, nou kòmanse ansible-wòl la, ki rele tarantool.cartridge
.
Tout bagay ki pi enpòtan (savwa, konfigirasyon gwoup la) sitiye nan 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:
Tout sa nou bezwen se aprann kijan pou jere enstans ak replik yo lè w chanje sa ki nan dosye sa a. Apre sa, nou pral ajoute nouvo seksyon nan li. Pou pa konfonn kote pou ajoute yo, ou ka gade nan vèsyon final la nan dosye sa a, hosts.updated.yml
, ki nan depo egzanp lan.
Jesyon enstans
An tèm de Ansible, chak egzanp se yon lame (pa dwe konfonn ak yon sèvè fè), i.e. ne enfrastrikti ke Ansible pral jere. Pou chak lame, nou ka presize paramèt koneksyon (tankou ansible_host
и ansible_user
), osi byen ke konfigirasyon egzanp lan. Deskripsyon nan ka yo se nan seksyon an hosts
.
Konsidere konfigirasyon egzanp lan storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Nan yon varyab config
nou espesifye paramèt egzanp yo - advertise URI
и HTTP port
.
Anba a se paramèt egzanp yo app-1
и storage-1-replica
.
Nou bezwen di Ansible paramèt koneksyon yo pou chak egzanp. Li sanble lojik pou gwoupe ka yo nan gwoup machin vityèl. Pou fè sa, ka yo konbine an gwoup. host1
и host2
, ak nan chak gwoup nan seksyon an vars
valè ansible_host
и ansible_user
pou yon machin vityèl. Ak nan seksyon an hosts
- lame (yo se egzanp) ki enkli nan gwoup sa a:
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:
Nou kòmanse chanje hosts.yml
. Ann ajoute de lòt egzanp, storage-2-replica
sou premye machin vityèl la ak storage-2
Sou dezyèm lan:
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: # <==
...
Kouri ansible playbook:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Peye atansyon sou opsyon an --limit
. Depi chak egzanp gwoup se yon lame nan tèm Ansible, nou ka presize klèman ki enstans yo ta dwe configuré lè w ap kouri liv la.
Retounen nan entènèt UI
Nou pa pral repoze sou lorye nou yo epi yo pral metrize kontwòl topoloji.
Jesyon topoloji
Ann rantre nouvo egzanp nou yo nan yon replik storage-2
. Ajoute yon nouvo gwoup replicaset_storage_2
epi dekri nan varyab li yo paramèt replicaset la pa analoji ak replicaset_storage_1
. Nan seksyon hosts
presize ki ka yo pral enkli nan gwoup sa a (ki se, seri kopi nou an):
---
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:
Ann kòmanse liv la ankò:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Pou chak opsyon --limit
nou fwa sa a te pase non gwoup la ki koresponn ak replicaset nou an.
Konsidere opsyon an tags
.
Wòl nou an sekans fè plizyè travay, ki make ak tags sa yo:
cartridge-instances
: jesyon egzanp (konfigirasyon, koneksyon ak manm);cartridge-replicasets
: jesyon topoloji (jesyon replika ansanm ak retire pèmanan (expulse) nan ka ki soti nan gwoup la);cartridge-config
: jere lòt paramèt gwoup (vshard bootstrapping, mòd failover otomatik, paramèt otorizasyon ak konfigirasyon aplikasyon an).
Nou ka presize klèman ki pati nan travay la nou vle fè, Lè sa a, wòl la pral sote rès travay yo. Nan ka nou an, nou vle travay sèlman ak topoloji a, kidonk nou espesifye cartridge-replicasets
.
Ann evalye rezilta efò nou yo. Jwenn yon nouvo replicaset
Hooray!
Eksperyans ak rekonfigirasyon enstans ak kopi ansanm epi wè ki jan topoloji gwoup la chanje. Ou ka eseye diferan senaryo operasyonèl, pou egzanp, memtx_memory
. Wòl la pral eseye fè sa san yo pa rekòmanse egzanp lan nan lòd yo diminye tan an posib aplikasyon w lan.
Pa bliye kouri vagrant halt
pou sispann VMs lè w fini ak yo.
Ki sa ki nan anba kapo a?
Isit la mwen pral pale plis sou sa ki te pase anba kapo a nan wòl nan ansible pandan eksperyans nou yo.
Ann pran yon gade nan deplwaye yon aplikasyon Cartridge etap pa etap.
Enstale pake a ak kòmanse ka yo
Premye ou bezwen delivre pake a nan sèvè a epi enstale li. Koulye a, wòl la ka travay ak pakè RPM ak DEB.
Apre sa, nou lanse enstans yo. Tout bagay trè senp isit la: chak egzanp se yon separe systemd
-sèvis. M ap pale de yon egzanp:
$ systemctl start myapp@storage-1
Kòmand sa a pral lanse egzanp lan storage-1
apps myapp
. Enstans lan te lanse a ap chèche pou li /etc/tarantool/conf.d/
. Ou ka wè mòso bwa egzanp yo lè l sèvi avèk journald
.
Fichye inite /etc/systemd/system/[email protected]
pou yon sèvis systemd pral delivre ak pake a.
Ansible gen modil entegre pou enstale pakè ak jere sèvis sistèm, nou pa envante anyen nouvo isit la.
Konfigirasyon topoloji gwoup la
Ak isit la ki pi enteresan an kòmanse. Dakò, li ta etranj deranje ak yon wòl espesyal ansible pou enstale pakè ak kouri systemd
-servis.
Ou ka mete gwoup la manyèlman:
- Premye opsyon a: louvri UI Web la epi klike sou bouton yo. Pou yon kòmansman yon sèl fwa nan plizyè ka, li se byen apwopriye.
- Dezyèm opsyon: ou ka itilize API GraphQl. Isit la ou ka deja otomatize yon bagay, pou egzanp, ekri yon script nan Python.
- Twazyèm opsyon (pou fò nan lespri): ale nan sèvè a, konekte nan youn nan ka yo lè l sèvi avèk
tarantoolctl connect
epi fè tout manipilasyon ki nesesè yo ak modil Luacartridge
.
Travay prensipal la nan envansyon nou an se fè sa a, pati ki pi difisil nan travay la pou ou.
Ansible pèmèt ou ekri pwòp modil ou epi sèvi ak li nan yon wòl. Wòl nou itilize modil sa yo pou jere divès eleman gwoup la.
Ki jan li fonksyone? Ou dekri eta a vle nan gwoup la nan yon konfigirasyon deklaratif, epi wòl la bay chak modil seksyon konfigirasyon li yo kòm opinyon. Modil la resevwa eta aktyèl la nan gwoup la epi konpare li ak opinyon an. Apre sa, yon kòd kouri nan priz youn nan ka yo, ki pote gwoup la nan eta a vle.
Rezilta
Jodi a nou te di epi montre kijan pou deplwaye aplikasyon w lan sou Tarantool Cartridge epi mete yon senp topoloji. Pou fè sa, nou te itilize Ansible, yon zouti pwisan ki fasil pou itilize epi ki pèmèt ou konfigirasyon anpil nœuds enfrastrikti ansanm (nan ka nou an, sa yo se ka gwoup).
Pi wo a, nou te fè fas ak youn nan plizyè fason yo dekri konfigirasyon gwoup la lè l sèvi avèk Ansible. Yon fwa ou konnen ou pare pou avanse pou pi, aprann group_vars
и host_vars
.
Trè byento nou pral di w kijan pou w retire (ekspilsyon) ka yo nan topoloji a pou tout tan, demaraj vshard, jere mòd otomatik failover, konfigirasyon otorizasyon ak patch konfigirasyon gwoup la. Antretan, ou ka etidye poukont ou
Si yon bagay pa mache, asire w
Sous: www.habr.com