Біз бұған дейін айтқанбыз
Қызықты? Олай болса, кесудің астында біз сізге бәрін айтып, көрсетеміз.
Мысалдан бастайық
Біз рөліміздің функционалдығының бір бөлігін ғана қарастырамыз. Сіз әрқашан оның барлық мүмкіндіктері мен енгізу параметрлерінің толық сипаттамасын таба аласыз
Tarantool картриджі бар api
и storage
, ол даналарға тағайындалуы мүмкін.
Картридждің өзі процестерді іске қосу туралы ештеңе айтпайды, ол тек іске қосылған даналарды конфигурациялау мүмкіндігін береді. Қалғанын пайдаланушы өзі орындауы керек: конфигурация файлдарын реттеу, қызметтерді іске қосу және топологияны конфигурациялау. Бірақ біз мұның бәрін жасамаймыз; Ansible мұны біз үшін жасайды.
Сөзден іске
Сонымен, қосымшаны екі виртуалды машинаға орналастырып, қарапайым топологияны орнатайық:
- Репликасет
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
Tarantool картриджінің маңызды рөлін орнатыңыз:
$ 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 терминдерінде әрбір данасы хост (аппараттық сервермен шатастырмау керек), яғни. Ansible басқаратын инфрақұрылымдық түйін. Әрбір хост үшін біз қосылым параметрлерін көрсете аламыз (мысалы 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
.
Біз Ansible-ге әрбір данаға қосылым параметрлерін айтуымыз керек. Даналарды виртуалды машина топтарына топтау қисынды болып көрінеді. Осы мақсатта мысалдар топтарға біріктіріледі 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
. Әрбір кластер данасы Ansible терминдерінде хост болғандықтан, оқу кітабын орындау кезінде қандай даналарды конфигурациялау керектігін нақты көрсете аламыз.
Web 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
.
Еңбегіміздің нәтижесін бағалайық. Жаңа көшірме жиынын табамыз
Hooray!
Даналардың және реплика жиындарының конфигурациясын өзгертумен тәжірибе жасап, кластер топологиясының қалай өзгеретінін көріңіз. Сіз әртүрлі операциялық сценарийлерді сынап көре аласыз, мысалы: 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 қызметі пакетпен бірге жеткізіледі.
Ansible пакеттерін орнатуға және жүйелік қызметтерді басқаруға арналған кірістірілген модульдерге ие; біз мұнда жаңа ештеңе ойлап тапқан жоқпыз.
Кластер топологиясын орнату
Қызық осы жерден басталады. Келісемін, пакеттерді орнату және іске қосу үшін арнайы Ansible рөлімен алаңдау таңқаларлық болар еді systemd
-қызметтер.
Кластерді қолмен конфигурациялауға болады:
- Бірінші опция: Web UI ашыңыз және түймелерді басыңыз. Бұл бірнеше даналарды бір реттік бастау үшін өте қолайлы.
- Екінші нұсқа: GraphQl API пайдалануға болады. Мұнда сіз әлдеқашан бір нәрсені автоматтандыруға болады, мысалы, Python тілінде сценарий жазу.
- Үшінші нұсқа (еріксіздер үшін): серверге өтіңіз, пайдаланып даналардың біріне қосылыңыз
tarantoolctl connect
және Lua модулімен барлық қажетті манипуляцияларды орындаңызcartridge
.
Біздің өнертабыстың басты міндеті - дәл осы, сіз үшін жұмыстың ең қиын бөлігі.
Ansible өзіңіздің модуліңізді жазуға және оны рөлде пайдалануға мүмкіндік береді. Біздің рөліміз әртүрлі кластер құрамдастарын басқару үшін осындай модульдерді пайдаланады.
Бұл қалай жұмыс істейді? Декларативті конфигурацияда кластердің қалаған күйін сипаттайсыз және рөл әрбір модульді кіріс ретінде конфигурация бөлімімен қамтамасыз етеді. Модуль кластердің ағымдағы күйін алады және оны кіріс ретінде алынғанмен салыстырады. Әрі қарай, кластерді қажетті күйге әкелетін даналардың бірінің ұясы арқылы код іске қосылады.
Нәтижелері
Бүгін біз Tarantool картриджіне қосымшаңызды қалай орналастыру керектігін және қарапайым топологияны орнатуды айттық және көрсеттік. Мұны істеу үшін біз Ansible-ді қолдандық - пайдалану оңай және бір уақытта көптеген инфрақұрылым түйіндерін (біздің жағдайда кластер даналары) конфигурациялауға мүмкіндік беретін қуатты құрал.
Жоғарыда біз Ansible көмегімен кластер конфигурациясын сипаттаудың көптеген тәсілдерінің бірін қарастырдық. Жалғастыруға дайын сезінген кезде, зерттеңіз group_vars
и host_vars
.
Жақында біз сізге топологиядан даналарды біржола жою (шығарып тастау), vshard жүктеуді, автоматты ауыстырып қосу режимін басқаруды, авторизацияны конфигурациялауды және кластер конфигурациясын түзетуді айтамыз. Әзірше өз бетінше оқуға болады
Егер бірдеңе жұмыс істемесе, міндетті түрде орындаңыз
Ақпарат көзі: www.habr.com