Dagoeneko hitz egin dugu
Interesgarria? Orduan, mesedez, ebaki azpian, dena esango dizugu eta erakutsiko dizugu.
Has gaitezen adibide batekin
Gure rolaren funtzionaltasunaren zati bat bakarrik ikusiko dugu. Beti aurki dezakezu bere gaitasun guztien eta sarrera-parametroen deskribapen osoa
Tarantool Kartutxoak ditu api
ΠΈ storage
, instantziei esleitu dakiekeena.
Kartutxoak berak ez du ezer esaten prozesuak abiarazteko moduari buruz, dagoeneko martxan dauden instantziak konfiguratzeko gaitasuna besterik ez du ematen. Erabiltzaileak berak egin behar du gainerakoa: konfigurazio fitxategiak antolatu, zerbitzuak martxan jarri eta topologia konfiguratu. Baina ez dugu hau guztia egingo; Ansiblek egingo du guregatik.
Hitzetatik ekintzetara
Beraz, zabaldu dezagun gure aplikazioa bi makina birtualetan eta konfigura dezagun topologia sinple bat:
- Erreplika multzoa
app-1
eginkizuna gauzatuko duapi
, rola barne hartzen duenavshard-router
. Hemen kasu bakarra egongo da. - Erreplika multzoa
storage-1
rola gauzatzen dustorage
(eta aldi bereanvshard-storage
), hemen makina ezberdinetako bi instantzia gehituko ditugu.
Behar dugun adibidea exekutatzeko
Rola bera dago
Klon dezagun biltegia adibide batekin:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Makina birtualak planteatzen ditugu:
$ vagrant up
Instalatu Tarantool Cartridge rol ansiblea:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Abiarazi instalatutako rola:
$ ansible-playbook -i hosts.yml playbook.yml
Playbook exekuzioa amaitu arte itxarongo dugu, joan hona
Datuak igo ditzakezu. Polita, ezta?
Orain asma dezagun nola lan egin honekin, eta, aldi berean, gehitu beste erreplika multzo bat topologiari.
Has gaitezen asmatzen
Orduan, zer gertatu zen?
Bi makina birtual konfiguratu genituen eta gure cluster konfiguratu zuen ansible playbook bat abiarazi genuen. Ikus ditzagun fitxategiaren edukia 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
Hemen ez da ezer interesgarririk gertatzen, abiarazi dezagun izeneko rol ansible bat tarantool.cartridge
.
Gauza garrantzitsuenak (hau da, kluster konfigurazioa) bertan daude 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:
Behar duguna da instantziak eta erreplika multzoak kudeatzen ikastea fitxategi honen edukia aldatuz. Jarraian, atal berriak gehituko dizkiogu. Non gehitu behar dituzun nahasteko, fitxategi honen azken bertsioa ikus dezakezu, hosts.updated.yml
, adibideen biltegian dagoena.
Instantzia kudeaketa
Ansible terminoetan, instantzia bakoitza ostalari bat da (ez da nahastu hardware zerbitzari batekin), hau da. Ansiblek kudeatuko duen azpiegitura-nodoa. Ostalari bakoitzeko konexio-parametroak zehaztu ditzakegu (adibidez ansible_host
ΠΈ ansible_user
), baita instantziaren konfigurazioa ere. Instantziaren deskribapena atalean dago hosts
.
Ikus dezagun instantziaren konfigurazioa storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Aldagaian config
instantzia-parametroak zehaztu ditugu - advertise URI
ΠΈ HTTP port
.
Jarraian instantzia-parametroak daude app-1
ΠΈ storage-1-replica
.
Ansibleri instantzia bakoitzeko konexio-parametroak esan behar dizkiogu. Logikoa dirudi instantziak makina birtualeko taldeetan biltzea. Horretarako, kasuak taldeetan konbinatzen dira host1
ΠΈ host2
, eta ataleko talde bakoitzean vars
balioak adierazten dira ansible_host
ΠΈ ansible_user
makina birtual baterako. Eta atalean hosts
β Talde honetan sartzen diren ostalariak (aka instantziak):
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:
Aldatzen hasten gara hosts.yml
. Gehi ditzagun beste bi kasu, storage-2-replica
lehen makina birtualean eta storage-2
Bigarrenean:
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: # <==
...
Abiarazi ansible playbook-a:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Kontuan izan aukera --limit
. Cluster-instantzia bakoitza Ansible terminoetan ostalari bat denez, berariaz zehaztu dezakegu zein instantzia konfiguratu behar diren playbook-a exekutatzen denean.
Web UI-ra itzuliz
Ez gaitezen gelditu eta topologia kudeaketa menperatu.
Topologiaren kudeaketa
Konbina ditzagun gure instantzia berriak erreplika multzo batean storage-2
. Gehitu dezagun talde berri bat replicaset_storage_2
eta deskribatu erreplika-multzoaren parametroak bere aldagaietan, analogiaz replicaset_storage_1
. atalean hosts
Adierazi dezagun zein instantzia sartuko diren talde honetan (hau da, gure erreplika multzoa):
---
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:
Hasi gaitezen berriro jolas liburua:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Parametroan --limit
Oraingoan gure erreplika multzoari dagokion taldearen izena pasatu dugu.
Azter dezagun aukera tags
.
Gure rolak sekuentzialki hainbat zeregin egiten ditu, eta hauek etiketa hauekin markatuta daude:
cartridge-instances
: instantzien kudeaketa (konfigurazioa, kidetasunerako konexioa);cartridge-replicasets
: topologia-kudeaketa (erreplika-multzoen kudeaketa eta instantzien behin betiko kentzea (kanporatzea) clusterretik);cartridge-config
: beste kluster parametroen kudeaketa (vshard bootstrapping, hutsegite automatikoaren modua, baimen-parametroak eta aplikazioen konfigurazioa).
Espresuki zehaztu dezakegu lanaren zein zati egin nahi dugun, eta gero rolak gainontzeko zereginak saltatuko ditu. Gure kasuan, topologiarekin bakarrik lan egin nahi dugu, hala adierazi genuen cartridge-replicasets
.
Balora dezagun gure ahaleginaren emaitza. Erreplika multzo berri bat aurkituko dugu
Hooray!
Saia zaitez instantzien eta erreplika multzoen konfigurazioa aldatzen eta ikusi nola aldatzen den kluster topologia. Eszenatoki operatibo desberdinak proba ditzakezu, adibidez. memtx_memory
. Rola hori egiten saiatuko da instantzia berrabiarazi gabe, zure aplikazioaren geldialdi-denbora murrizteko.
Ez ahaztu korrika egitea vagrant halt
makina birtualak gelditzeko haiekin lan egiten amaitzean.
Eta zer dago kanpaiaren azpian?
Hemen gure esperimentuetan rol ansiblearen azpian gertatzen ari zenari buruz gehiago kontatuko dizuet.
Ikus dezagun pausoz pauso Kartutxoen aplikazioa zabaltzen.
Paketea instalatzea eta instantziak abiaraztea
Lehenik eta behin paketea zerbitzariari entregatu eta instalatu behar duzu. Gaur egun rolak RPM eta DEB paketeekin lan egin dezake.
Ondoren, instantziak abiarazten ditugu. Hemen dena oso erraza da: instantzia bakoitza bereizia da systemd
-zerbitzua. Adibide bat jarriko dizut:
$ systemctl start myapp@storage-1
Komando honek instantzia abiaraziko du storage-1
aplikazioak myapp
. Abiarazitako instantzia bere bilatuko du /etc/tarantool/conf.d/
. Instantzia-erregistroak erabiliz ikus daitezke journald
.
Unitatearen fitxategia /etc/systemd/system/[email protected]
systemd zerbitzurako paketearekin batera entregatuko da.
Ansiblek paketeak instalatzeko eta sistemako zerbitzuak kudeatzeko moduluak ditu; ez dugu ezer berririk asmatu hemen.
Kluster topologia bat konfiguratzea
Hemen hasten da dibertsioa. Ados, arraroa litzateke paketeak instalatzeko eta exekutatzeko Ansible rol berezi batekin traba egitea systemd
-zerbitzuak.
Klusterra eskuz konfigura dezakezu:
- Lehenengo aukera: ireki Web UI eta egin klik botoietan. Nahiko egokia da hainbat instantzia bakarrean hasteko.
- Bigarren aukera: GraphQl APIa erabil dezakezu. Hemen dagoeneko zerbait automatizatu dezakezu, adibidez, script bat idatzi Python-en.
- Hirugarren aukera (borondate handikoentzat): joan zerbitzarira, konektatu erabiliz instantzia batera
tarantoolctl connect
eta egin behar diren manipulazio guztiak Lua moduluarekincartridge
.
Gure asmakizunaren zeregin nagusia hauxe da, zuretzat lanaren zatirik zailena egitea.
Ansiblek zure modulua idazteko eta rol batean erabiltzeko aukera ematen dizu. Gure rolak horrelako moduluak erabiltzen ditu klusterreko hainbat osagai kudeatzeko.
Nola dabil? Klusterren nahi duzun egoera deskribatzen duzu konfigurazio deklaratibo batean, eta rolak modulu bakoitzari bere konfigurazio-atala ematen dio sarrera gisa. Moduluak klusterraren egungo egoera jasotzen du eta sarrera gisa jasotakoarekin alderatzen du. Ondoren, kode bat abiarazten da instantzietako baten socketetik, eta horrek klusterra nahi den egoerara eramaten du.
Emaitzak
Gaur zure aplikazioa Tarantool Cartridge-ra nola zabaldu eta topologia sinple bat konfiguratu esan eta erakutsi dugu. Horretarako, Ansible erabili dugu - erabiltzeko erraza den tresna indartsua eta aldi berean azpiegitura-nodo asko (gure kasuan, kluster instantzia) konfiguratzeko aukera ematen duena.
Goian Ansible erabiliz kluster konfigurazioa deskribatzeko modu askotariko bat aztertu dugu. Aurrera egiteko prest sentitzen zarenean, arakatu group_vars
ΠΈ host_vars
.
Oso laster esango dizugu nola behin betiko ezabatu (kanporatu) topologiako instantziak, abioko vshard-a nola kudeatu, hutsegite modu automatikoa kudeatu, baimena konfiguratu eta klusterraren konfigurazioa adabaki. Bitartean, zure kabuz ikas dezakezu
Zerbaitek ez badu funtzionatzen, ziurtatu
Iturria: www.habr.com