நாங்கள் ஏற்கனவே பேசியுள்ளோம்
சுவாரஸ்யமானதா? பின்னர், வெட்டுக்கு கீழ், நாங்கள் உங்களுக்குச் சொல்வோம், எல்லாவற்றையும் உங்களுக்குக் காண்பிப்போம்.
ஒரு உதாரணத்துடன் ஆரம்பிக்கலாம்
எங்கள் பங்கின் செயல்பாட்டின் ஒரு பகுதியை மட்டுமே நாங்கள் பார்ப்போம். அதன் அனைத்து திறன்கள் மற்றும் உள்ளீட்டு அளவுருக்கள் பற்றிய முழுமையான விளக்கத்தை நீங்கள் எப்போதும் காணலாம்
டரான்டூல் கார்ட்ரிட்ஜ் உள்ளது api
и storage
, இது நிகழ்வுகளுக்கு ஒதுக்கப்படலாம்.
கார்ட்ரிட்ஜ் செயல்முறைகளை எவ்வாறு தொடங்குவது என்பது பற்றி எதுவும் கூறவில்லை, இது ஏற்கனவே இயங்கும் நிகழ்வுகளை உள்ளமைக்கும் திறனை மட்டுமே வழங்குகிறது. மீதமுள்ளவற்றை பயனர் தானே செய்ய வேண்டும்: உள்ளமைவு கோப்புகளை ஒழுங்கமைக்கவும், சேவைகளைத் தொடங்கவும் மற்றும் இடவியலை உள்ளமைக்கவும். ஆனால் இதையெல்லாம் நாங்கள் செய்ய மாட்டோம்; அன்சிபிள் நமக்காகச் செய்வார்.
வார்த்தைகளிலிருந்து செயல்கள் வரை
எனவே, எங்கள் பயன்பாட்டை இரண்டு மெய்நிகர் இயந்திரங்களில் வரிசைப்படுத்துவோம் மற்றும் ஒரு எளிய இடவியல் அமைப்போம்:
- பிரதி தொகுப்பு
app-1
பாத்திரத்தை செயல்படுத்துவார்கள்api
, இதில் பங்கு அடங்கும்vshard-router
. இங்கே ஒரே ஒரு நிகழ்வு மட்டுமே இருக்கும். - பிரதி தொகுப்பு
storage-1
பாத்திரத்தை செயல்படுத்துகிறதுstorage
(மற்றும் அதே நேரத்தில்vshard-storage
), இங்கே நாம் வெவ்வேறு இயந்திரங்களிலிருந்து இரண்டு நிகழ்வுகளைச் சேர்ப்போம்.
நமக்கு தேவையான உதாரணத்தை இயக்க
பாத்திரம் தானே உள்ளது
ஒரு உதாரணத்துடன் களஞ்சியத்தை குளோன் செய்வோம்:
$ 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/[email protected]
systemd சேவைக்கான தொகுப்புடன் சேர்த்து வழங்கப்படும்.
பொதிகளை நிறுவுவதற்கும் systemd சேவைகளை நிர்வகிப்பதற்கும் அன்சிபில் உள்ளமைக்கப்பட்ட தொகுதிகள் உள்ளன; நாங்கள் இங்கு புதிதாக எதையும் கண்டுபிடிக்கவில்லை.
ஒரு கிளஸ்டர் டோபாலஜியை அமைத்தல்
இங்குதான் வேடிக்கை தொடங்குகிறது. ஒப்புக்கொள்கிறேன், தொகுப்புகளை நிறுவுவதற்கும் இயக்குவதற்கும் ஒரு சிறப்பு அன்சிபிள் பாத்திரத்தை தொந்தரவு செய்வது விசித்திரமாக இருக்கும் systemd
சேவைகள்.
நீங்கள் கிளஸ்டரை கைமுறையாக கட்டமைக்கலாம்:
- முதல் விருப்பம்: Web UI ஐத் திறந்து பொத்தான்களைக் கிளிக் செய்யவும். பல நிகழ்வுகளை ஒரு முறை தொடங்குவதற்கு இது மிகவும் பொருத்தமானது.
- இரண்டாவது விருப்பம்: நீங்கள் GraphQl API ஐப் பயன்படுத்தலாம். இங்கே நீங்கள் ஏற்கனவே எதையாவது தானியங்குபடுத்தலாம், எடுத்துக்காட்டாக, பைத்தானில் ஒரு ஸ்கிரிப்டை எழுதுங்கள்.
- மூன்றாவது விருப்பம் (வலிமையான விருப்பமுள்ளவர்களுக்கு): சேவையகத்திற்குச் சென்று, பயன்படுத்தி நிகழ்வுகளில் ஒன்றை இணைக்கவும்
tarantoolctl connect
லுவா தொகுதியுடன் தேவையான அனைத்து கையாளுதல்களையும் செய்யவும்cartridge
.
எங்கள் கண்டுபிடிப்பின் முக்கிய பணி இதைச் செய்வதுதான், உங்களுக்கான வேலையின் மிகவும் கடினமான பகுதியாகும்.
அன்சிபிள் உங்கள் சொந்த தொகுதியை எழுதவும் அதை ஒரு பாத்திரத்தில் பயன்படுத்தவும் அனுமதிக்கிறது. பல்வேறு கிளஸ்டர் கூறுகளை நிர்வகிக்க எங்கள் பங்கு அத்தகைய தொகுதிகளைப் பயன்படுத்துகிறது.
எப்படி இது செயல்படுகிறது? ஒரு அறிவிப்பு கட்டமைப்பில் கிளஸ்டரின் விரும்பிய நிலையை நீங்கள் விவரிக்கிறீர்கள், மேலும் பங்கு ஒவ்வொரு தொகுதிக்கும் அதன் உள்ளமைவு பகுதியை உள்ளீடாக வழங்குகிறது. தொகுதியானது கிளஸ்டரின் தற்போதைய நிலையைப் பெறுகிறது மற்றும் உள்ளீடாகப் பெறப்பட்டவற்றுடன் ஒப்பிடுகிறது. அடுத்து, ஒரு நிகழ்வுகளின் சாக்கெட் மூலம் ஒரு குறியீடு தொடங்கப்படுகிறது, இது கிளஸ்டரை விரும்பிய நிலைக்கு கொண்டு வருகிறது.
முடிவுகளை
இன்று நாங்கள் உங்கள் விண்ணப்பத்தை டரான்டூல் கார்ட்ரிட்ஜில் எவ்வாறு வரிசைப்படுத்துவது மற்றும் எளிமையான இடவியல் அமைப்பது எப்படி என்பதைச் சொல்லி காண்பித்தோம். இதைச் செய்ய, நாங்கள் அன்சிபிள் - ஒரு சக்திவாய்ந்த கருவியைப் பயன்படுத்தினோம், இது பயன்படுத்த எளிதானது மற்றும் ஒரே நேரத்தில் பல உள்கட்டமைப்பு முனைகளை உள்ளமைக்க உங்களை அனுமதிக்கிறது (எங்கள் விஷயத்தில், கிளஸ்டர் நிகழ்வுகள்).
Ansible ஐப் பயன்படுத்தி ஒரு கிளஸ்டர் கட்டமைப்பை விவரிக்கும் பல வழிகளில் ஒன்றை மேலே பார்த்தோம். நீங்கள் முன்னேறத் தயாராக உணர்ந்தவுடன், ஆராயுங்கள் group_vars
и host_vars
.
மிக விரைவில், இடவியலில் இருந்து நிகழ்வுகளை நிரந்தரமாக நீக்குவது (வெளியேற்றுவது), பூட்ஸ்ட்ராப் vshard, தானியங்கி தோல்வி பயன்முறையை நிர்வகித்தல், அங்கீகாரத்தை உள்ளமைத்தல் மற்றும் கிளஸ்டர் கட்டமைப்பை எவ்வாறு இணைப்பது என்பதை நாங்கள் உங்களுக்குச் சொல்வோம். இதற்கிடையில், நீங்கள் சொந்தமாக படிக்கலாம்
ஏதாவது வேலை செய்யவில்லை என்றால், உறுதியாக இருங்கள்
ஆதாரம்: www.habr.com