ہم پہلے ہی کے بارے میں بات کر چکے ہیں۔
دلچسپ؟ پھر براہ کرم، کٹ کے نیچے، ہم آپ کو بتائیں گے اور آپ کو سب کچھ دکھائیں گے۔
آئیے ایک مثال سے شروع کرتے ہیں۔
ہم صرف اپنے کردار کی فعالیت کا حصہ دیکھیں گے۔ آپ ہمیشہ اس کی تمام صلاحیتوں اور ان پٹ پیرامیٹرز کی مکمل تفصیل تلاش کر سکتے ہیں۔
Tarantool کارتوس ہے 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 پیرامیٹرز کو تشبیہ کے ساتھ بیان کریں۔ 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]
سسٹمڈ سروس کے لیے پیکج کے ساتھ ڈیلیور کیا جائے گا۔
Ansible میں پیکجز کو انسٹال کرنے اور سسٹمڈ سروسز کا انتظام کرنے کے لیے بلٹ ان ماڈیولز ہیں؛ ہم نے یہاں کوئی نئی ایجاد نہیں کی ہے۔
کلسٹر ٹوپولوجی کا قیام
یہیں سے مزہ شروع ہوتا ہے۔ متفق ہوں، پیکجز کو انسٹال کرنے اور چلانے کے لیے ایک خاص جواب دہ کردار سے پریشان ہونا عجیب ہوگا۔ systemd
خدمات
آپ کلسٹر کو دستی طور پر ترتیب دے سکتے ہیں:
- پہلا آپشن: ویب UI کھولیں اور بٹنوں پر کلک کریں۔ یہ متعدد مثالوں کے ایک وقتی آغاز کے لیے کافی موزوں ہے۔
- دوسرا آپشن: آپ GraphQl API استعمال کر سکتے ہیں۔ یہاں آپ پہلے سے ہی کسی چیز کو خودکار کر سکتے ہیں، مثال کے طور پر، ازگر میں اسکرپٹ لکھیں۔
- تیسرا آپشن (مضبوط خواہش کے لیے): سرور پر جائیں، استعمال کرتے ہوئے کسی ایک مثال سے جڑیں۔
tarantoolctl connect
اور Lua ماڈیول کے ساتھ تمام ضروری ہیرا پھیری انجام دیں۔cartridge
.
ہماری ایجاد کا بنیادی کام بالکل ایسا کرنا ہے، آپ کے لیے کام کا سب سے مشکل حصہ۔
Ansible آپ کو اپنا ماڈیول لکھنے اور اسے کردار میں استعمال کرنے کی اجازت دیتا ہے۔ ہمارا کردار مختلف کلسٹر اجزاء کو منظم کرنے کے لیے ایسے ماڈیولز کا استعمال کرتا ہے۔
یہ کیسے کام کرتا ہے؟ آپ کلسٹر کی مطلوبہ حالت کو اعلانیہ ترتیب میں بیان کرتے ہیں، اور کردار ہر ماڈیول کو اس کے کنفیگریشن سیکشن کے ساتھ بطور ان پٹ فراہم کرتا ہے۔ ماڈیول کلسٹر کی موجودہ حالت حاصل کرتا ہے اور اس کا موازنہ ان پٹ کے طور پر کیا گیا تھا۔ اگلا، ایک مثال کے ساکٹ کے ذریعے ایک کوڈ لانچ کیا جاتا ہے، جو کلسٹر کو مطلوبہ حالت میں لاتا ہے۔
کے نتائج
آج ہم نے بتایا اور دکھایا کہ آپ کی درخواست کو Tarantool Cartridge پر کیسے لگایا جائے اور ایک سادہ ٹوپولوجی ترتیب دی جائے۔ ایسا کرنے کے لیے، ہم نے Ansible کا استعمال کیا - ایک طاقتور ٹول جو استعمال میں آسان ہے اور آپ کو بیک وقت بہت سے انفراسٹرکچر نوڈس (ہمارے معاملے میں، کلسٹر مثالوں میں) ترتیب دینے کی اجازت دیتا ہے۔
اوپر ہم نے Ansible کا استعمال کرتے ہوئے کلسٹر کنفیگریشن کو بیان کرنے کے بہت سے طریقوں میں سے ایک کو دیکھا۔ ایک بار جب آپ آگے بڑھنے کے لیے تیار محسوس کریں تو دریافت کریں۔ group_vars
и host_vars
.
بہت جلد ہم آپ کو بتائیں گے کہ ٹوپولوجی، بوٹسٹریپ ویشارڈ، آٹومیٹک فیل اوور موڈ کو مینیج کرنے، اجازت کو کنفیگر کرنے اور کلسٹر کنفیگریشن کو پیچ سے کیسے مستقل طور پر ڈیلیٹ کرنا ہے۔ اس دوران، آپ خود پڑھ سکتے ہیں۔
اگر کچھ کام نہیں کرتا ہے، تو یقینی بنائیں
ماخذ: www.habr.com