ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

ہم پہلے ہی کے بارے میں بات کر چکے ہیں۔ ٹرانٹول کارتوس، جو آپ کو تقسیم شدہ ایپلیکیشنز تیار کرنے اور انہیں پیک کرنے کی اجازت دیتا ہے۔ بس یہ سیکھنا ہے کہ ان ایپلی کیشنز کو کیسے تعینات کیا جائے اور ان کا نظم کیا جائے۔ پریشان نہ ہوں، ہمارے پاس یہ سب کچھ شامل ہے! ہم نے Tarantool Cartridge کے ساتھ کام کرنے کے لیے تمام بہترین طریقوں کو اکٹھا کیا اور لکھا جوابدہ کردار، جو پیکج کو سرورز میں تقسیم کرے گا، مثالیں لانچ کرے گا، انہیں کلسٹر میں متحد کرے گا، اجازت کو ترتیب دے گا، بوٹسٹریپ vshard، خودکار فیل اوور کو فعال کرے گا اور کلسٹر کی تشکیل کو پیچ کرے گا۔

دلچسپ؟ پھر براہ کرم، کٹ کے نیچے، ہم آپ کو بتائیں گے اور آپ کو سب کچھ دکھائیں گے۔

آئیے ایک مثال سے شروع کرتے ہیں۔

ہم صرف اپنے کردار کی فعالیت کا حصہ دیکھیں گے۔ آپ ہمیشہ اس کی تمام صلاحیتوں اور ان پٹ پیرامیٹرز کی مکمل تفصیل تلاش کر سکتے ہیں۔ دستاویزات. لیکن اسے سو بار دیکھنے کے بجائے ایک بار آزمانا بہتر ہے، تو آئیے ایک چھوٹی ایپلیکیشن لگائیں۔

Tarantool کارتوس ہے سبق ایک چھوٹی کارٹریج ایپلی کیشن بنانے کے لیے جو بینک کلائنٹس اور ان کے اکاؤنٹس کے بارے میں معلومات کو ذخیرہ کرتی ہے، اور HTTP کے ذریعے ڈیٹا مینجمنٹ کے لیے ایک API بھی فراہم کرتی ہے۔ اس کو حاصل کرنے کے لیے، ضمیمہ دو ممکنہ کرداروں کی وضاحت کرتا ہے: api и storage، جو مثالوں کو تفویض کیا جاسکتا ہے۔

کارٹریج خود اس بارے میں کچھ نہیں کہتا کہ عمل کیسے شروع کیا جائے، یہ صرف پہلے سے چل رہی مثالوں کو ترتیب دینے کی صلاحیت فراہم کرتا ہے۔ صارف کو باقی کام خود کرنا ہوگا: کنفیگریشن فائلوں کو ترتیب دیں، خدمات شروع کریں اور ٹاپولوجی کو ترتیب دیں۔ لیکن ہم یہ سب نہیں کریں گے؛ جوابدہ ہمارے لیے کریں گے۔

الفاظ سے عمل تک

تو، آئیے اپنی ایپلیکیشن کو دو ورچوئل مشینوں پر لگائیں اور ایک سادہ ٹوپولوجی ترتیب دیں:

  • نقل سیٹ app-1 کردار کو نافذ کریں گے۔ api، جس میں کردار شامل ہے۔ vshard-router. یہاں صرف ایک مثال ہو گی۔
  • نقل سیٹ storage-1 کردار کو نافذ کرتا ہے۔ storage (اور ایک ہی وقت میں vshard-storage)، یہاں ہم مختلف مشینوں سے دو مثالیں شامل کریں گے۔

ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

ہمیں جس مثال کی ضرورت ہے اسے چلانے کے لیے واگرانٹ۔ и ناممکن (ورژن 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

ہم پلے بک کے مکمل ہونے کا انتظار کرتے ہیں، پر جائیں۔ http://localhost:8181/admin/cluster/dashboard اور نتیجہ کا لطف اٹھائیں:

ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

آپ ڈیٹا اپ لوڈ کر سکتے ہیں۔ ٹھنڈا، ٹھیک ہے؟

اب آئیے اس کے ساتھ کام کرنے کا طریقہ معلوم کرتے ہیں، اور ساتھ ہی ٹوپولوجی میں ایک اور ریپلیکا سیٹ شامل کریں۔

آئیے اس کا پتہ لگانا شروع کریں۔

تو کیا ہوا؟

ہم نے دو ورچوئل مشینیں ترتیب دیں اور ایک قابل جواب پلے بک لانچ کی جس نے ہمارے کلسٹر کو ترتیب دیا۔ آئیے فائل کے مواد کو دیکھتے ہیں۔ 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 پر واپس جا رہے ہیں۔ http://localhost:8181/admin/cluster/dashboard اور ہماری نئی مثالیں دیکھیں:

ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

آئیے وہیں نہ رکیں اور ٹاپولوجی مینجمنٹ میں مہارت حاصل کریں۔

ٹوپولوجی مینجمنٹ

آئیے اپنی نئی مثالوں کو ایک ریپلیکا سیٹ میں جوڑتے ہیں۔ 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.

آئیے اپنی کوششوں کے نتیجہ کا جائزہ لیں۔ ہم پر ایک نئی نقل تلاش کرتے ہیں۔ http://localhost:8181/admin/cluster/dashboard.

ٹرانٹول کارٹریج پر آسانی سے اور قدرتی طور پر ایپلیکیشنز تعینات کریں (حصہ 1)

ہورے!

مثالوں اور نقل سیٹوں کی ترتیب کو تبدیل کرنے کے ساتھ تجربہ کریں اور دیکھیں کہ کلسٹر ٹوپولوجی کیسے بدلتی ہے۔ آپ مختلف آپریشنل منظرنامے آزما سکتے ہیں، جیسے رولنگ اپ ڈیٹ یا اضافہ 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

نیا تبصرہ شامل کریں