
మనం ఇప్పటికే మాట్లాడుకున్నాం ఇది డిస్ట్రిబ్యూటెడ్ అప్లికేషన్లను డెవలప్ చేయడానికి మరియు వాటిని ప్యాకేజ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇక మిగిలిందల్లా ఈ అప్లికేషన్లను ఎలా డిప్లాయ్ చేయాలో మరియు మేనేజ్ చేయాలో నేర్చుకోవడమే. చింతించకండి, మేము మీకు అండగా ఉన్నాము! మేము టరాన్టూల్ కార్ట్రిడ్జ్తో పనిచేయడానికి అవసరమైన అన్ని ఉత్తమ పద్ధతులను సంకలనం చేసి వ్రాసాము. ఇది ప్యాకేజీని సర్వర్లకు పంపిణీ చేస్తుంది, ఇన్స్టాన్స్లను ప్రారంభిస్తుంది, వాటిని ఒక క్లస్టర్గా కలుపుతుంది, ఆథరైజేషన్ను కాన్ఫిగర్ చేస్తుంది, vshardను బూట్స్ట్రాప్ చేస్తుంది, ఆటోమేటిక్ ఫెయిల్ఓవర్ను ఎనేబుల్ చేస్తుంది మరియు క్లస్టర్ కాన్ఫిగ్ను ప్యాచ్ చేస్తుంది.
ఆసక్తి ఉందా? అయితే చదవండి, మేము మీకు అన్నీ చెప్పి చూపిస్తాము.
ఒక ఉదాహరణతో ప్రారంభిద్దాం
మేము మా పాత్ర యొక్క కార్యాచరణలో కొంత భాగాన్ని మాత్రమే వివరిస్తాము. దాని అన్ని సామర్థ్యాలు మరియు ఇన్పుట్ పారామీటర్ల పూర్తి వివరణను ఎల్లప్పుడూ కనుగొనవచ్చు. కానీ వందసార్లు చూడటం కన్నా ఒక్కసారి ప్రయత్నించడం మేలు, కాబట్టి ఒక చిన్న అప్లికేషన్ను అమలు చేద్దాం.
టరాన్టూల్ కార్ట్రిడ్జ్ కలిగి ఉంది బ్యాంకు ఖాతాదారులు మరియు వారి ఖాతాల గురించిన సమాచారాన్ని నిల్వ చేస్తూ, HTTP ద్వారా డేటా నిర్వహణ కోసం ఒక APIని అందించే ఒక చిన్న కార్ట్రిడ్జ్ అప్లికేషన్ను రూపొందించడం. దీనిని సాధించడానికి, ఈ అప్లికేషన్ రెండు సాధ్యమయ్యే పాత్రలను వివరిస్తుంది: api и storage, వీటిని ఇన్స్టాన్సులకు కేటాయించవచ్చు.
ప్రాసెస్లను ఎలా ప్రారంభించాలో కార్ట్రిడ్జ్ స్వయంగా వివరించదు; అది ఇప్పటికే నడుస్తున్న ఇన్స్టాన్స్లను కాన్ఫిగర్ చేసే సామర్థ్యాన్ని మాత్రమే అందిస్తుంది. మిగిలినవన్నీ వినియోగదారుడే చేయాలి: కాన్ఫిగరేషన్ ఫైళ్లను డిప్లాయ్ చేయడం, సర్వీసులను ప్రారంభించడం, మరియు టోపాలజీని కాన్ఫిగర్ చేయడం. కానీ మనం అవన్నీ చేయబోము; ఆన్సిబుల్ మన కోసం ఆ పనులన్నీ చేస్తుంది.
మాటల నుండి చేతలకు
కాబట్టి, మన అప్లికేషన్ను రెండు వర్చువల్ మెషీన్లకు డిప్లాయ్ చేసి, ఒక సాధారణ టోపాలజీని ఏర్పాటు చేద్దాం:
- రెప్లికాసెట్
app-1పాత్రను అమలు చేస్తుందిapi, ఇందులో పాత్ర కూడా ఉందిvshard-routerఇక్కడ ఒకే ఒక్క సందర్భం ఉంటుంది. - రెప్లికాసెట్
storage-1పాత్రను గ్రహిస్తుందిstorage(మరియు అదే సమయంలో)vshard-storage), మనం ఇక్కడ వేర్వేరు మెషీన్ల నుండి రెండు ఇన్స్టాన్స్లను జోడిస్తాము.

ఉదాహరణను అమలు చేయడానికి మనకు అవసరం అవుతుంది и (వెర్షన్ 2.8 లేదా ఆ తర్వాత).
పాత్ర స్వయంగా ఇది మీ అభివృద్ధిని పంచుకోవడానికి మరియు సిద్ధంగా ఉన్న పాత్రలను ఉపయోగించుకోవడానికి మిమ్మల్ని అనుమతించే ఒక రిపోజిటరీ.
ఉదాహరణ రిపోజిటరీని క్లోన్ చేద్దాం:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0మేము వర్చువల్ మెషీన్లను పెంచుతాము:
$ vagrant upటరాన్టూల్ కార్ట్రిడ్జ్ ఆన్సిబుల్ రోల్ను ఇన్స్టాల్ చేయండి:
$ ansible-galaxy install tarantool.cartridge,1.0.1ఇన్స్టాల్ చేసిన రోల్ను ప్రారంభిద్దాం:
$ ansible-playbook -i hosts.yml playbook.ymlమేము ప్లేబుక్ పూర్తయ్యే వరకు వేచి ఉంటాము, ఆ తర్వాత వెళ్తాము మరియు ఫలితాన్ని ఆస్వాదించండి:

మీరు డేటాను కుమ్మరించవచ్చు. బాగుంది కదూ?
ఇప్పుడు దీనితో ఎలా పని చేయాలో తెలుసుకుందాం, అదే సమయంలో టోపాలజీకి మరొక రెప్లికా సెట్ను కూడా జోడిద్దాం.
దాన్ని కనుక్కోవడం ప్రారంభిద్దాం
మరి ఏం జరిగింది?
మేము రెండు వర్చువల్ మెషీన్లను ఏర్పాటు చేసి, మా క్లస్టర్ను కాన్ఫిగర్ చేసిన ఆన్సిబుల్ ప్లేబుక్ను రన్ చేశాము. ఇప్పుడు ఫైల్లోని విషయాలను చూద్దాం. 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ఇక్కడ ఆసక్తికరమైనదేమీ జరగదు, మేము అనే ఆన్సిబుల్ రోల్ను ప్రారంభిస్తాము tarantool.cartridge.
అన్ని అత్యంత ముఖ్యమైన విషయాలు (అంటే, క్లస్టర్ కాన్ఫిగరేషన్) ఇందులో ఉన్నాయి -ఫైల్ 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:ఈ ఫైల్లోని విషయాలను మార్చడం ద్వారా ఇన్స్టాన్సులు మరియు రెప్లికా సెట్లను ఎలా నిర్వహించాలో నేర్చుకుంటే సరిపోతుంది. మనం తర్వాత దీనికి కొత్త విభాగాలను జోడిస్తాము. వాటిని ఎక్కడ జోడించాలనే గందరగోళాన్ని నివారించడానికి, మీరు ఈ ఫైల్ యొక్క తుది రూపాన్ని చూడవచ్చు. hosts.updated.ymlఇది ఉదాహరణ రిపోజిటరీలో ఉంది.
ఉదాహరణ నిర్వహణ
యాన్సిబుల్ పరిభాషలో, ప్రతి ఇన్స్టాన్స్ ఒక హోస్ట్ (హార్డ్వేర్ సర్వర్తో గందరగోళం చెందకూడదు), అంటే, యాన్సిబుల్ నిర్వహించే ఒక ఇన్ఫ్రాస్ట్రక్చర్ నోడ్. ప్రతి హోస్ట్ కోసం, మనం కనెక్షన్ పారామీటర్లను (ఉదాహరణకు) పేర్కొనవచ్చు. ansible_host и ansible_user), అలాగే ఇన్స్టాన్స్ కాన్ఫిగరేషన్. ఇన్స్టాన్స్ల వివరణలు విభాగంలో ఉన్నాయి hosts.
ఇన్స్టాన్స్ కాన్ఫిగరేషన్ను పరిశీలిద్దాం storage-1:
all:
vars:
...
# INSTANCES
hosts:
storage-1:
config:
advertise_uri: '172.19.0.2:3301'
http_port: 8181
...వేరియబుల్ లో config మేము ఇన్స్టాన్స్ పారామితులను నిర్దేశించాము - advertise URI и HTTP port.
దిగువన ఇన్స్టాన్స్ పారామీటర్లు ఉన్నాయి app-1 и storage-1-replica.
మనం ప్రతి ఇన్స్టాన్స్ కోసం కనెక్షన్ పారామీటర్లను ఆన్సిబుల్కు తెలియజేయాలి. ఇన్స్టాన్స్లను వర్చువల్ మెషీన్ వారీగా సమూహపరచడం తార్కికంగా అనిపిస్తుంది. ఈ ప్రయోజనం కోసం, ఇన్స్టాన్స్లు సమూహపరచబడతాయి. host1 и host2మరియు విభాగంలోని ప్రతి సమూహంలో vars విలువలు సూచించబడ్డాయి ansible_host и ansible_user ఒక వర్చువల్ మెషీన్ కోసం. మరియు ఆ విభాగంలో hosts ఈ సమూహంలో భాగమైన హోస్ట్లు (ఇన్స్టాన్స్లు అని కూడా పిలుస్తారు):
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:మనం మారడం ప్రారంభిస్తాము hosts.ymlమనం మరో రెండు సందర్భాలను జోడిద్దాం, storage-2-replica మొదటి వర్చువల్ మెషీన్లో మరియు storage-2 రెండవ దానిపై:
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 -i hosts.yml
--limit storage-2,storage-2-replica
playbook.ymlదయచేసి ఎంపికను గమనించండి --limitఆన్సిబుల్ పరిభాషలో ప్రతి క్లస్టర్ ఇన్స్టాన్స్ ఒక హోస్ట్ కాబట్టి, ప్లేబుక్ను అమలు చేసేటప్పుడు ఏ ఇన్స్టాన్స్లను కాన్ఫిగర్ చేయాలో మనం స్పష్టంగా పేర్కొనవచ్చు.
వెబ్ UI కి తిరిగి వెళ్దాం మరియు మన కొత్త సందర్భాలను చూస్తాము:

అంతటితో ఆగకుండా టోపాలజీ నిర్వహణలో నైపుణ్యం సాధిద్దాం.
టోపాలజీ నిర్వహణ
మన కొత్త ఇన్స్టాన్సులను ఒక రెప్లికా సెట్గా కలుపుదాం storage-2కొత్త గ్రూపును చేర్చుదాం. replicaset_storage_2 మరియు మనం రెప్లికా సెట్ యొక్క పారామితులను దాని వేరియబుల్స్లో సారూప్యత ద్వారా వివరిస్తాము replicaset_storage_1. విభాగంలో hosts ఈ సమూహంలో (అంటే, మన రెప్లికా సెట్లో) ఏయే ఇన్స్టాన్సులు చేర్చబడతాయో నిర్దేశిద్దాం:
---
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:వ్యూహాన్ని మళ్ళీ అమలు చేద్దాం:
$ ansible-playbook -i hosts.yml
--limit replicaset_storage_2
--tags cartridge-replicasets
playbook.ymlపరామితిలో --limit ఈసారి మేము మా రెప్లికా సెట్కు సంబంధించిన గ్రూప్ పేరును పంపించాము.
ఎంపికను పరిశీలిద్దాం tags.
మా పాత్ర కింది ట్యాగ్లతో గుర్తించబడిన వివిధ పనులను క్రమబద్ధంగా నిర్వహిస్తుంది:
cartridge-instances: ఇన్స్టాన్స్ నిర్వహణ (కాన్ఫిగరేషన్, సభ్యత్వానికి కనెక్షన్);cartridge-replicasets: టోపాలజీ నిర్వహణ (రెప్లికా సెట్ల నిర్వహణ మరియు క్లస్టర్ నుండి ఇన్స్టాన్స్లను శాశ్వతంగా తొలగించడం (ఎక్స్పెల్));cartridge-config: ఇతర క్లస్టర్ పారామీటర్లను నిర్వహించడం (vshard బూట్స్ట్రాపింగ్, ఆటోమేటిక్ ఫెయిలోవర్ మోడ్, ఆథరైజేషన్ పారామీటర్లు మరియు అప్లికేషన్ కాన్ఫిగరేషన్).
పనిలో ఏ భాగాన్ని మనం చేయాలనుకుంటున్నామో స్పష్టంగా పేర్కొనవచ్చు, అప్పుడు ఆ రోల్ మిగిలిన పనులను దాటవేస్తుంది. మా విషయంలో, మేము కేవలం టోపాలజీతో మాత్రమే పని చేయాలనుకుంటున్నాము, కాబట్టి మేము పేర్కొన్నాము cartridge-replicasets.
మన ప్రయత్నాల ఫలితాలను విశ్లేషిద్దాం. మేము ఒక కొత్త ప్రతిరూప సెట్ను కనుగొంటున్నాము .

హుర్రే!
ఇన్స్టాన్స్ మరియు రెప్లికా సెట్ కాన్ఫిగరేషన్లను మారుస్తూ ప్రయోగాలు చేసి, క్లస్టర్ టోపాలజీ ఎలా మారుతుందో చూడండి. మీరు ఈ క్రింది వాటి వంటి వివిధ ఆపరేషనల్ దృశ్యాలను ప్రయత్నించవచ్చు: లేదా పెంచండి memtx_memoryమీ అప్లికేషన్కు సంభావ్య అంతరాయం కలగకుండా ఉండేందుకు, ఈ రోల్ ఇన్స్టాన్స్ను పునఃప్రారంభించకుండానే దీన్ని చేయడానికి ప్రయత్నిస్తుంది.
పరుగెత్తడం మర్చిపోవద్దు vagrant haltవర్చువల్ మెషీన్లతో పని పూర్తయినప్పుడు వాటిని ఆపడానికి.
లోపల ఏముంది?
మా ప్రయోగాల సమయంలో ఆన్సిబుల్ రోల్ అంతర్గతంగా ఏమి జరుగుతుందో ఇక్కడ నేను మరింత వివరంగా వివరిస్తాను.
కార్ట్రిడ్జ్ అప్లికేషన్ను డిప్లాయ్ చేసే దశలను చూద్దాం.
ప్యాకేజీని ఇన్స్టాల్ చేసి, ఇన్స్టాన్స్లను ప్రారంభించడం
మొదట, మీరు ప్యాకేజీని సర్వర్కు పంపి, దానిని ఇన్స్టాల్ చేయాలి. ప్రస్తుతం, ఈ రోల్ RPM మరియు DEB ప్యాకేజీలతో పని చేయగలదు.
తరువాత, మనం ఇన్స్టాన్స్లను లాంచ్ చేస్తాము. ఇదంతా చాలా సులభం: ప్రతి ఇన్స్టాన్స్ ఒక ప్రత్యేకమైనది. systemd-సేవ. నేను ఒక ఉదాహరణతో వివరిస్తాను:
$ systemctl start myapp@storage-1ఈ ఆదేశం ఇన్స్టాన్స్ను ప్రారంభిస్తుంది. storage-1 అనువర్తనాలు myappప్రారంభించబడిన ఇన్స్టాన్స్ దాని కోసం శోధిస్తుంది в /etc/tarantool/conf.d/ఇన్స్టాన్స్ లాగ్లను ఉపయోగించి వీక్షించవచ్చు. journald.
యూనిట్ ఫైల్ /etc/systemd/system/myapp@.sevice సిస్టమ్డి సేవ ప్యాకేజీతో పాటు అందించబడుతుంది.
ప్యాకేజీలను ఇన్స్టాల్ చేయడానికి మరియు systemd సేవలను నిర్వహించడానికి ఆన్సిబుల్లో అంతర్నిర్మిత మాడ్యూల్స్ ఉన్నాయి, కానీ మేము ఇక్కడ కొత్తగా ఏమీ కనుగొనలేదు.
క్లస్టర్ టోపోలాజీని కాన్ఫిగర్ చేయడం
ఇక్కడే అసలు విషయం మొదలవుతుంది. ప్యాకేజీలను ఇన్స్టాల్ చేయడానికి మరియు రన్ చేయడానికి ఒక ప్రత్యేకమైన ఆన్సిబుల్ రోల్తో శ్రమపడటం వింతగా ఉంటుందని మీరు ఒప్పుకుంటారు. systemd-సేవలు.
మీరు క్లస్టర్ను మాన్యువల్గా కాన్ఫిగర్ చేయవచ్చు:
- మొదటి ఎంపిక: వెబ్ UIని తెరిచి బటన్లను క్లిక్ చేయండి. అనేక ఇన్స్టాన్స్లను ఒకేసారి ప్రారంభించడానికి ఇది సరిపోతుంది.
- రెండవ ఎంపిక గ్రాఫ్క్యూఎల్ ఏపీఐని ఉపయోగించడం. ఇది పైథాన్ స్క్రిప్ట్ రాయడం వంటి ఆటోమేషన్కు వీలు కల్పిస్తుంది.
- మూడవ ఎంపిక (దృఢ సంకల్పం ఉన్నవారి కోసం): సర్వర్కు వెళ్లి, ఇన్స్టాన్స్లలో ఒకదానికి కనెక్ట్ అవ్వండి
tarantoolctl connectమరియు మేము Lua మాడ్యూల్తో అవసరమైన అన్ని మార్పులను నిర్వహిస్తాముcartridge.
ఈ పనిలో అత్యంత కష్టమైన భాగాన్ని మీ కోసం పూర్తి చేయడమే మా ఆవిష్కరణ యొక్క ప్రధాన లక్ష్యం.
ఆన్సిబుల్ మీ స్వంత మాడ్యూళ్లను వ్రాసి, వాటిని ఒక రోల్లో ఉపయోగించుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది. మా రోల్ వివిధ క్లస్టర్ భాగాలను నిర్వహించడానికి ఈ మాడ్యూళ్లను ఉపయోగిస్తుంది.
ఇది ఎలా పనిచేస్తుంది? మీరు కోరుకున్న క్లస్టర్ స్థితిని ఒక డిక్లరేటివ్ కాన్ఫిగరేషన్లో వివరిస్తారు, మరియు ఆ రోల్ దాని కాన్ఫిగరేషన్ విభాగాన్ని ప్రతి మాడ్యూల్కు ఇన్పుట్గా పంపుతుంది. మాడ్యూల్ ప్రస్తుత క్లస్టర్ స్థితిని స్వీకరించి, దానిని ఇన్పుట్తో పోలుస్తుంది. ఆ తర్వాత, ఇన్స్టాన్స్లలో ఒకదానిపై సాకెట్ ద్వారా కోడ్ అమలు చేయబడుతుంది, ఇది క్లస్టర్ను కోరుకున్న స్థితికి తీసుకువస్తుంది.
ఫలితాలు
ఈ రోజు మేము మీ అప్లికేషన్ను టరాన్టూల్ కార్ట్రిడ్జ్కు ఎలా డిప్లాయ్ చేయాలో మరియు ఒక సాధారణ టోపాలజీని ఎలా సెటప్ చేయాలో వివరించి, ప్రదర్శించాము. దీని కోసం, మేము ఆన్సిబుల్ను ఉపయోగించాము. ఇది ఒక శక్తివంతమైన, సులభంగా ఉపయోగించగల సాధనం, ఇది ఒకేసారి బహుళ ఇన్ఫ్రాస్ట్రక్చర్ నోడ్లను (మా విషయంలో, క్లస్టర్ ఇన్స్టాన్స్లను) కాన్ఫిగర్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.
పైన, ఆన్సిబుల్ ఉపయోగించి క్లస్టర్ కాన్ఫిగరేషన్ను వివరించడానికి గల అనేక మార్గాలలో ఒకదానిని మేము చర్చించాము. మీరు ముందుకు వెళ్లడానికి సిద్ధంగా ఉన్నప్పుడు, అన్వేషించండి. ప్లేబుక్లను వ్రాయడానికి. టోపాలజీని ఉపయోగించి నిర్వహించడం మీకు మరింత సౌకర్యవంతంగా అనిపించవచ్చు group_vars и host_vars.
త్వరలోనే, టోపాలజీ నుండి ఇన్స్టాన్స్లను శాశ్వతంగా తొలగించడం (ఎక్స్పెల్ చేయడం), vshardను బూట్స్ట్రాప్ చేయడం, ఆటోమేటిక్ ఫెయిల్ఓవర్ మోడ్ను నిర్వహించడం, ఆథరైజేషన్ను కాన్ఫిగర్ చేయడం మరియు క్లస్టర్ కాన్ఫిగరేషన్ను ప్యాచ్ చేయడం ఎలాగో మేము వివరిస్తాము. ఈలోగా, మీరు మీ స్వంతంగా అన్వేషించవచ్చు. మరియు క్లస్టర్ పారామితులను మార్చడంతో ప్రయోగాలు చేయండి.
ఒకవేళ ఏదైనా పని చేయకపోతే, తప్పకుండా సమస్య గురించి మాకు చెప్పండి. మేము దాన్ని త్వరగా పరిష్కరిస్తాము!
మూలం: www.habr.com
