Diximus iam de
Novus? Tunc amabo, sub inciso, tibi narrabimus et omnia tibi demonstrabimus.
Exemplum sit amet
Tantum spectamus partem functionis nostrae muneris. Potes semper invenire plenam descriptionem omnium eius facultatum et ambitum initus
Tarantool Adapter habet api
ΠΈ storage
quae instantiis assignari possunt.
Cartridge ipsa nihil dicit de processibus deducendis, tantum facultatem praebet instantiarum jam currentium configurandi. Usor se ceteris praestare debet: schemata configurationem disponere, officia incipere et topologiam configurare. Sed non omnia, Ansible nobis faciet.
A verbis ad facta
Itaque applicationem nostram ad duas machinis virtuales disponamus et topologiam simplicem constituamus:
- Replicaset
app-1
et ad efficiendum partesapi
quae includit partesvshard-router
. Una tantum instantia hic erit. - Replicaset
storage-1
ad munus exercetstorage
(Et simulvshard-storage
) Duo hic addemus Instantias ex diversis machinis.
Exemplum decurrendum nobis opus est
Munus ipsum in
Clone repositorium per exemplum:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Machinationes virtuales excitamus:
$ vagrant up
Install a Tarantool Adapter ansible partes:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Partes installed in launch:
$ ansible-playbook -i hosts.yml playbook.yml
Exspectavimus playbook ad executionem, ite to
Data imposuisti. Cool, vox?
Nunc quid opus hoc sit figurate, simulque aliam imaginem topologiae propositam addas.
Sit scriptor satus ut instar is sicco
Quid igitur factum est?
Duos machinis virtualis constituimus et ansibilis fabularum libri qui botrum nostrum configurantur. Intueamur quae in tabella 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
Nihil interesting hic fit, munus quod vocatur ansibile ineamus tarantool.cartridge
.
Omnia principalia (nempe figuram botri) in 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:
Omnes opus est discere quomodo instantias et replicationes regere debeamus, mutatis contentis in hoc documento. Deinde novas sectiones ei adiiciemus. Ne confundas ubi ea adiicias, ultimam huius fasciculi versionem inspicere potes. hosts.updated.yml
quod est in promptuario.
Instantia procuratio
In Ansible terms, each instance is a host (not to be confused with a hardware server), i.e. nodi infrastructuram quam Ansible aget. Pro unaquaque multitudine parametris nexum exprimere possumus (ut ansible_host
ΠΈ ansible_user
) , necnon figuratio instantia. Descriptio instantiarum in sectione est hosts
.
Intueamur instantia configuratione storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
In variabilis config
exempli gratia parametri sumus certa - advertise URI
ΠΈ HTTP port
.
Infra instantia parametri app-1
ΠΈ storage-1-replica
.
Indicanda Ansible nexum parametri pro singulis instantia necesse est. Consentaneum videtur esse instantiarum coetus in virtualis machinae circulos. Ad quem finem instantiae coniunguntur in circulos host1
ΠΈ host2
et singulis in sectione vars
values ββββsignificatur ansible_host
ΠΈ ansible_user
unius virtualis apparatus. Et in sectione hosts
- Virtutes (alias instantiae) quae in hoc coetu continentur:
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:
Mutare incipimus hosts.yml
. Addamus duo exempla. storage-2-replica
ad primam virtualem machinam et storage-2
Altero;
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: # <==
...
Ansible playbook in launch:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Placere note optio --limit
. Cum singulae instantiae botri sit hospes in terminis Ansible, aperte exprimere possumus quae instantiae conformari debent cum exsecutioni in fabula.
Rediens ad Web UI
Non illic desinamus ac magisterii topologiae administratione.
Acta administrationis
Coniungamus novas instantias nostras in statuto imaginis storage-2
. Addamus novum coetus replicaset_storage_2
et describe parametros replicaset in suis variabilibus per analogiam cum replicaset_storage_1
. In sectione hosts
Indicamus quae instantiae in hoc circulo includantur (hoc est, figura nostra);
---
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:
Sit scriptor playbook iterum incipit:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
In parametri --limit
Hoc tempore transivimus nomen sodalitatis nostrae replicaset respondet.
Consideremus optio tags
.
Munus nostrum successive varia opera fungitur, quae sequentibus tags notantur;
cartridge-instances
: instantia procuratio (configuratio, connexio ad membra);cartridge-replicasets
topology administratione (replicaset administratione ac remotione permanentium instantiarum e botro);cartridge-config
: administratio aliorum parametri botri (vshard bootstrapping, modus deficientis latae sententiae, parametri licentia et configuratione applicationis).
Explicare possumus quamnam partem operis quam volumus facere, tunc partes operarum reliqua omittemus. In casu nostro, solum cum topologia laborare velimus, sic nominavimus cartridge-replicasets
.
Perpendamus exitum laboris nostri. Invenimus novam replicaset in
Euax!
Experimentum de mutanda configuratione instantiarum et imaginum ponit et vide quomodo topologia botri mutatur. Diversas missiones operationales experiri potes, exempli causa. memtx_memory
. Munus hoc facere conabitur sine instantiam reprimendo, ut possibilis downtime applicationis tuae minuatur.
Noli oblivisci currere vagrant halt
virtualis machinis prohibere cum illis opus peractum es.
Quid sub cucullo?
Plura hic vobis dicam de iis quae sub cucullo munere ansibilis in nostris experimentis fiebant.
Intueamur gradatim explicandam applicationem ad Cartridge.
Installing in sarcina et incipiens instantiarum
Primum opus est sarcinam servo tradere ac instituere. Nunc munus cum RPM et DEB fasciculis laborare potest.
Deinde instantias deducimus. Omnia hic valde simplicia sunt: ββutrumque instantia separatum est systemd
-servitium. Exemplum dabo;
$ systemctl start myapp@storage-1
Hoc mandatum deducunt exempli storage-1
apps myapp
. Instantia deductae expecto suum /etc/tarantool/conf.d/
. Exempli gratia omnia videri potest utens journald
.
Unitas file /etc/systemd/system/[email protected]
pro systemd servitium una cum sarcina tradetur.
Ansible fabricavit in modulis ad inaugurandi sarcinas et systematica administrandi officia, nihil novi hic invenimus.
Botrus in topology profecta
Hic est ubi incipit iocus. Esto consentiens mirum esset cum munere ansibilis speciali vexare sarcinas et currit inaugurari systemd
-officia.
Configurare potes botrum manually:
- Prima optio: Web UI aperi et in globulis strepita. Plurium instantiarum unum tempus satis idoneum est.
- Secunda optio: uti potes GraphQl API. Hic iam potes aliquid automate, verbi gratia, in Pythone scriptum.
- Tertia optio (pro valido): vade ad ministratorem, coniunge uni exemplorum utentium
tarantoolctl connect
ac perfice omnia quae necessaria sunt cum Luae modulicartridge
.
Praecipuum inventionis nostrae negotium est, ut id facias, quod difficillimum est operis tui.
Ansible permittit tibi modulum tuum scribere et eo uti munere. Munus nostrum talibus modulis utitur ad varias partes ligaturas disponendas.
Quomodo facitur? Status botri desideratus in config declarativo describis, et partes singulae moduli cum sectione configurationis sua sicut input praebet. Modulus praesentem statum botri accipit et comparat cum eo quod input receptum est. Deinde per nervum cujusdam instantiarum, qui botrum fert ad statum desideratum, educitur.
results
Hodie narravimus et monstravimus applicationem tuam ad Tarantool Cartridge explicandam et simplicem topologiam erexisse. Ad hoc faciendum nos usi sumus Ansible - potens instrumentum quo uti facile est ac permittit ut simul plures nodos infrastructuras configurare (in casu nostro, instantiae botrus).
Supra inspeximus unum e multis modis figuram botri Ansible utentem describere. Cum sentis procedere paratus, explora group_vars
ΠΈ host_vars
.
Propediem narrabimus tibi exempla e topologia (expellere) exempla e topologia, bootstrap vshard, modum defectivi automatismi administrare, cessionem configurare et botrum config repeciare. Interim studeas tuo
Si aliquid non operatur, cave to
Source: www.habr.com