Yr ydym eisoes wedi siarad am
Diddorol? Yna os gwelwch yn dda, o dan y toriad, byddwn yn dweud wrthych ac yn dangos popeth i chi.
Gadewch i ni ddechrau gydag enghraifft
Dim ond rhan o ymarferoldeb ein rôl y byddwn yn edrych arno. Gallwch chi bob amser ddod o hyd i ddisgrifiad cyflawn o'i holl alluoedd a pharamedrau mewnbwn yn
Mae gan Tarantool Cartridge api
и storage
, y gellir ei neilltuo i achosion.
Nid yw cetris ei hun yn dweud unrhyw beth am sut i lansio prosesau, dim ond y gallu i ffurfweddu achosion sydd eisoes yn rhedeg y mae'n ei ddarparu. Rhaid i'r defnyddiwr wneud y gweddill ei hun: trefnu ffeiliau ffurfweddu, cychwyn gwasanaethau a ffurfweddu'r topoleg. Ond ni wnawn hyn i gyd; bydd Ansible yn ei wneud i ni.
O eiriau i weithredoedd
Felly, gadewch i ni ddefnyddio ein cais i ddau beiriant rhithwir a sefydlu topoleg syml:
- Atgynhyrchiad
app-1
fydd yn gweithredu’r rôlapi
, sy'n cynnwys y rôlvshard-router
. Dim ond un enghraifft fydd yma. - Atgynhyrchiad
storage-1
yn gweithredu’r rôlstorage
(ac ar yr un prydvshard-storage
), yma byddwn yn ychwanegu dau achos o wahanol beiriannau.
I redeg yr esiampl sydd ei angen arnom
Mae'r rôl ei hun ynddi
Gadewch i ni glonio'r ystorfa gydag enghraifft:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Rydym yn codi peiriannau rhithwir:
$ vagrant up
Gosod y rôl asible Cartridge Tarantool:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Lansio'r rôl sydd wedi'i gosod:
$ ansible-playbook -i hosts.yml playbook.yml
Rydyn ni'n aros i'r llyfr chwarae gwblhau ei gyflawni, ewch i
Gallwch uwchlwytho data. Cŵl, dde?
Nawr gadewch i ni ddarganfod sut i weithio gyda hyn, ac ar yr un pryd ychwanegu atgynhyrchiad arall o set at y topoleg.
Gadewch i ni ddechrau ei chyfrifo
Felly beth ddigwyddodd?
Fe wnaethom sefydlu dau beiriant rhithwir a lansio llyfr chwarae ansible a oedd yn ffurfweddu ein clwstwr. Gadewch i ni edrych ar gynnwys y ffeil 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
Nid oes dim byd diddorol yn digwydd yma, gadewch i ni lansio rôl ansible o'r enw tarantool.cartridge
.
Mae'r holl bethau pwysicaf (sef, cyfluniad y clwstwr) wedi'u lleoli yn 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:
Y cyfan sydd ei angen arnom yw dysgu sut i reoli achosion a atgynyrchiadau trwy newid cynnwys y ffeil hon. Nesaf byddwn yn ychwanegu adrannau newydd ato. Er mwyn peidio â drysu ble i'w hychwanegu, gallwch edrych ar fersiwn derfynol y ffeil hon, hosts.updated.yml
, sydd yn yr ystorfa esiampl.
Rheoli achosion
Yn nhermau Ansible, mae pob achos yn westeiwr (na ddylid ei gymysgu â gweinydd caledwedd), h.y. y nod seilwaith y bydd Ansible yn ei reoli. Ar gyfer pob gwesteiwr gallwn nodi paramedrau cysylltiad (fel ansible_host
и ansible_user
), yn ogystal â chyfluniad yr enghraifft. Mae disgrifiad o'r achosion yn yr adran hosts
.
Gadewch i ni edrych ar ffurfweddiad yr enghraifft storage-1
:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...
Yn amrywiol config
gwnaethom nodi paramedrau'r enghraifft - advertise URI
и HTTP port
.
Isod mae paramedrau'r enghraifft app-1
и storage-1-replica
.
Mae angen i ni ddweud wrth Ansible y paramedrau cysylltu ar gyfer pob achos. Mae'n ymddangos yn rhesymegol grwpio achosion yn grwpiau peiriannau rhithwir. At y diben hwn, cyfunir achosion yn grwpiau host1
и host2
, ac ym mhob grŵp yn yr adran vars
gwerthoedd yn cael eu nodi ansible_host
и ansible_user
ar gyfer un peiriant rhithwir. Ac yn yr adran hosts
— gwesteiwyr (aka enghreifftiau) sydd wedi'u cynnwys yn y grŵp hwn:
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:
Rydyn ni'n dechrau newid hosts.yml
. Gadewch i ni ychwanegu dau achos arall, storage-2-replica
ar y peiriant rhithwir cyntaf a storage-2
Ar yr ail:
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: # <==
...
Lansio'r llyfr chwarae anible:
$ ansible-playbook -i hosts.yml
--limit storage-2,storage-2-replica
playbook.yml
Nodwch yr opsiwn --limit
. Gan fod pob enghraifft clwstwr yn westeiwr yn nhermau Ansible, gallwn nodi'n benodol pa achosion y dylid eu ffurfweddu wrth weithredu'r llyfr chwarae.
Mynd yn ôl i'r We UI
Gadewch i ni beidio â stopio yno a meistroli rheolaeth topoleg.
Rheoli topoleg
Gadewch i ni gyfuno ein hachosion newydd yn set replica storage-2
. Gadewch i ni ychwanegu grŵp newydd replicaset_storage_2
a disgrifio'r paramedrau a atgynhyrchwyd yn ei newidynnau trwy gyfatebiaeth â replicaset_storage_1
. Yn adran hosts
Gadewch i ni nodi pa achosion fydd yn cael eu cynnwys yn y grŵp hwn (hynny yw, ein set replica):
---
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:
Gadewch i ni ddechrau'r llyfr chwarae eto:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.yml
Fesul paramedr --limit
Y tro hwn fe wnaethom basio enw'r grŵp sy'n cyfateb i'n hatgynhyrchiad.
Gadewch i ni ystyried yr opsiwn tags
.
Mae ein rôl yn cyflawni tasgau amrywiol yn olynol, sydd wedi'u marcio â'r tagiau canlynol:
cartridge-instances
: rheoli enghreifftiau (cyfluniad, cysylltiad ag aelodaeth);cartridge-replicasets
: rheoli topoleg (rheoli atgynhyrchu a thynnu (diarddel) achosion yn barhaol o'r clwstwr);cartridge-config
: rheoli paramedrau clwstwr eraill (vshard bootstrapping, modd methu awtomatig, paramedrau awdurdodi a chyfluniad cymhwysiad).
Gallwn nodi'n benodol pa ran o'r gwaith yr ydym am ei wneud, yna bydd y rôl yn hepgor gweddill y tasgau. Yn ein hachos ni, rydym am weithio gyda'r topoleg yn unig, felly fe wnaethom nodi cartridge-replicasets
.
Gadewch i ni werthuso canlyniad ein hymdrechion. Rydym yn dod o hyd i atgynhyrchiad newydd ar
Hwre!
Arbrofwch â newid ffurfweddiad enghreifftiau a setiau atgynhyrchiadau a gweld sut mae topoleg y clwstwr yn newid. Gallwch roi cynnig ar wahanol senarios gweithredol, e.e. memtx_memory
. Bydd y rôl yn ceisio gwneud hyn heb ailgychwyn yr enghraifft er mwyn lleihau amser segur posibl eich cais.
Peidiwch ag anghofio rhedeg vagrant halt
i atal y peiriannau rhithwir pan fyddwch wedi gorffen gweithio gyda nhw.
Beth sydd o dan y cwfl?
Yma byddaf yn dweud mwy wrthych am yr hyn oedd yn digwydd o dan y cwfl y rôl asible yn ystod ein harbrofion.
Gadewch i ni edrych ar ddefnyddio'r cais Cetris gam wrth gam.
Gosod y pecyn ac achosion cychwyn
Yn gyntaf mae angen i chi gyflwyno'r pecyn i'r gweinydd a'i osod. Ar hyn o bryd gall y rôl weithio gyda phecynnau RPM a DEB.
Nesaf rydym yn lansio'r achosion. Mae popeth yn syml iawn yma: mae pob achos ar wahân systemd
-gwasanaeth. Rhoddaf enghraifft ichi:
$ systemctl start myapp@storage-1
Bydd y gorchymyn hwn yn lansio'r enghraifft storage-1
apps myapp
. Bydd yr enghraifft a lansiwyd yn edrych am ei /etc/tarantool/conf.d/
. Gellir gweld logiau enghraifft gan ddefnyddio journald
.
Ffeil uned /etc/systemd/system/[email protected]
ar gyfer gwasanaeth systemd yn cael ei gyflwyno ynghyd â'r pecyn.
Mae gan Ansible fodiwlau adeiledig ar gyfer gosod pecynnau a rheoli gwasanaethau systemd; nid ydym wedi dyfeisio unrhyw beth newydd yma.
Sefydlu topoleg clwstwr
Dyma lle mae'r hwyl yn dechrau. Cytuno, byddai'n rhyfedd trafferthu gyda rôl Ansible arbennig ar gyfer gosod pecynnau a rhedeg systemd
-gwasanaethau.
Gallwch chi ffurfweddu'r clwstwr â llaw:
- Yr opsiwn cyntaf: agorwch We UI a chliciwch ar y botymau. Mae'n eithaf addas ar gyfer cychwyn un-amser o sawl achos.
- Ail opsiwn: gallwch ddefnyddio'r API GraphQl. Yma gallwch chi eisoes awtomeiddio rhywbeth, er enghraifft, ysgrifennu sgript yn Python.
- Trydydd opsiwn (ar gyfer y rhai cryf-willed): ewch i'r gweinydd, cysylltu ag un o'r achosion gan ddefnyddio
tarantoolctl connect
a pherfformio'r holl driniaethau angenrheidiol gyda'r modiwl Luacartridge
.
Prif dasg ein dyfais yw gwneud hyn yn union, y rhan anoddaf o'r gwaith i chi.
Mae Ansible yn caniatáu ichi ysgrifennu eich modiwl eich hun a'i ddefnyddio mewn rôl. Mae ein rôl yn defnyddio modiwlau o'r fath i reoli gwahanol gydrannau clwstwr.
Sut mae'n gweithio? Rydych chi'n disgrifio cyflwr dymunol y clwstwr mewn ffurfweddiad datganiadol, ac mae'r rôl yn rhoi ei adran ffurfweddu i bob modiwl fel mewnbwn. Mae'r modiwl yn derbyn cyflwr presennol y clwstwr ac yn ei gymharu â'r hyn a dderbyniwyd fel mewnbwn. Nesaf, mae cod yn cael ei lansio trwy soced un o'r achosion, sy'n dod â'r clwstwr i'r cyflwr dymunol.
Canlyniadau
Heddiw fe wnaethom ddweud a dangos sut i ddefnyddio'ch cais i Tarantool Cartridge a sefydlu topoleg syml. I wneud hyn, gwnaethom ddefnyddio Ansible - offeryn pwerus sy'n hawdd ei ddefnyddio ac sy'n eich galluogi i ffurfweddu llawer o nodau seilwaith ar yr un pryd (yn ein hachos ni, achosion clwstwr).
Uchod, fe wnaethom edrych ar un o'r ffyrdd niferus o ddisgrifio cyfluniad clwstwr gan ddefnyddio Ansible. Unwaith y byddwch chi'n teimlo'n barod i symud ymlaen, archwiliwch group_vars
и host_vars
.
Yn fuan iawn byddwn yn dweud wrthych sut i ddileu (diarddel) achosion yn barhaol o'r topoleg, bootstrap vshard, rheoli modd methu awtomatig, ffurfweddu awdurdodiad a chlytio'r ffurfwedd clwstwr. Yn y cyfamser, gallwch astudio ar eich pen eich hun
Os nad yw rhywbeth yn gweithio, gwnewch yn siŵr
Ffynhonnell: hab.com