موږ لا دمخه په اړه خبرې کړې دي
په زړه پورې؟ بیا مهرباني وکړئ ، د کټ لاندې ، موږ به تاسو ته ووایو او تاسو ته به هرڅه وښیو.
راځئ چې د یو مثال سره پیل وکړو
موږ به یوازې د خپل رول د فعالیت برخه وګورو. تاسو کولی شئ تل د دې د ټولو وړتیاو بشپړ توضیحات ومومئ او د ننوتلو پیرامیټونو کې
د ترنتول کارتریج لري 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 bootstrapping, automatic failover mode, authorization parameters and applicationconfiguration).
موږ کولی شو په واضح ډول مشخص کړو چې د کار کومه برخه چې موږ یې ترسره کول غواړو، نو رول به پاتې کارونه پریږدي. زموږ په قضیه کې، موږ غواړو یوازې د ټوپولوژي سره کار وکړو، نو موږ مشخص کړل 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
- خدمتونه.
تاسو کولی شئ په لاسي ډول کلستر تنظیم کړئ:
- لومړی اختیار: د ویب UI خلاص کړئ او په بټونو کلیک وکړئ. دا د څو مثالونو د یو ځل پیل لپاره خورا مناسب دی.
- دوهم اختیار: تاسو کولی شئ د GraphQl API وکاروئ. دلته تاسو کولی شئ دمخه یو څه اتومات کړئ، د بیلګې په توګه، په Python کې سکریپټ ولیکئ.
- دریم اختیار (د قوي ارادې لپاره): سرور ته لاړ شئ، په کارولو سره یو له مثالونو سره وصل کړئ
tarantoolctl connect
او د لوا ماډل سره ټول اړین لاسوهنې ترسره کړئcartridge
.
زموږ د اختراع اصلي دنده دا ده چې دا په سمه توګه ترسره کړئ، ستاسو لپاره د کار ترټولو ستونزمن برخه.
ځواب تاسو ته اجازه درکوي خپل ماډل ولیکئ او په رول کې یې وکاروئ. زموږ رول د مختلف کلستر برخو اداره کولو لپاره دا ډول ماډلونه کاروي.
څنګه کار کوي؟ تاسو د کلستر مطلوب حالت په اعالمیه ترتیب کې بیان کړئ، او رول هر ماډل د خپل ترتیب برخې سره د ان پټ په توګه چمتو کوي. ماډل د کلستر اوسنی حالت ترلاسه کوي او د هغه څه سره پرتله کوي چې د ان پټ په توګه ترلاسه شوي. بیا، یو کوډ د یوې بیلګې د ساکټ له لارې پیل کیږي، کوم چې کلستر مطلوب حالت ته راوړي.
پایلې
نن ورځ موږ وویل او وښودله چې څنګه خپل غوښتنلیک ټرینټول کارټریج ته ځای په ځای کړئ او یو ساده ټوپولوژي تنظیم کړئ. د دې کولو لپاره، موږ ځواب ورکوو - یو پیاوړی وسیله چې کارول یې اسانه دي او تاسو ته اجازه درکوي په ورته وخت کې ډیری زیربنا نوډونه تنظیم کړئ (زموږ په قضیه کې، د کلستر مثالونه).
پورته موږ د Ansible په کارولو سره د کلستر ترتیب تشریح کولو لپاره ډیری لارو څخه یوه ته کتنه وکړه. یوځل چې تاسو د حرکت کولو لپاره چمتو احساس کوئ ، وپلټئ group_vars
и host_vars
.
ډیر ژر به موږ تاسو ته ووایو چې څنګه د ټاپولوژي څخه د تل لپاره (ایستل) مثالونه حذف کړئ ، د بوټسټریپ vshard ، د اتوماتیک ناکامي حالت اداره کړئ ، اختیار تنظیم کړئ او د کلستر ترتیب پیچ کړئ. په ورته وخت کې، تاسو کولی شئ پخپله مطالعه وکړئ
که یو څه کار نه کوي، ډاډ ترلاسه کړئ
سرچینه: www.habr.com