آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 1)

آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 1)

اسان اڳ ۾ ئي ڳالهايو آهي Tarantool ڪارٽريج، جيڪو توهان کي ورهايل ايپليڪيشنون ٺاهڻ ۽ انهن کي پيڪيج ڪرڻ جي اجازت ڏئي ٿو. اهو سڀ ڪجهه رهجي ويو آهي سکو ته ڪيئن انهن ايپليڪيشنن کي ترتيب ڏيڻ ۽ انهن کي منظم ڪرڻ. پريشان نه ٿيو، اسان اهو سڀ ڪجهه ڍڪي ڇڏيو آهي! اسان Tarantool Cartridge سان ڪم ڪرڻ لاءِ تمام بهترين طريقا گڏ ڪيا ۽ لکيو جواب ڏيڻ وارو ڪردار، جيڪو پيڪيج کي سرور ۾ ورهائيندو، مثالن کي لانچ ڪندو، انهن کي ڪلستر ۾ متحد ڪندو، اختيار کي ترتيب ڏيندو، بوٽ اسٽريپ ويشارڊ، خودڪار ناڪامي کي فعال ڪندو ۽ ڪلستر جي ترتيب کي پيچ ڪندو.

دلچسپ؟ پوءِ مھرباني ڪري، کٽ جي ھيٺان، اسين توھان کي ٻڌائينداسين ۽ توھان کي سڀ ڪجھ ڏيکارينداسين.

اچو ته هڪ مثال سان شروع ڪريون

اسان صرف پنهنجي ڪردار جي ڪارڪردگيءَ جو حصو ڏسنداسين. توھان ھميشه ڳولي سگھوٿا ان جي سڀني صلاحيتن جي مڪمل وضاحت ۽ ان پٽ پيٽرولن ۾ دستاويز. پر اھو بھتر آھي ته ھڪ ڀيرو ڪوشش ڪرڻ بجاءِ ان کي سؤ ڀيرا ڏسڻ لاءِ، تنھنڪري اچو ھڪ ننڍڙي ايپليڪيشن کي ترتيب ڏيو.

Tarantool Cartridge آهي سبق هڪ ننڍڙي ڪارٽريج ايپليڪيشن ٺاهڻ لاءِ جيڪا بئنڪ ڪلائنٽ ۽ انهن جي اڪائونٽن بابت معلومات محفوظ ڪري ٿي، ۽ HTTP ذريعي ڊيٽا مئنيجمينٽ لاءِ API پڻ مهيا ڪري ٿي. هن کي حاصل ڪرڻ لاء، ضميمه ٻن ممڪن ڪردارن کي بيان ڪري ٿو: api и storage، جنهن کي مثالن سان منسوب ڪري سگهجي ٿو.

ڪارٽريز پاڻ ڪجھ به نه ٿو چوي ته ڪيئن عمل شروع ڪجي، اهو صرف اڳ ۾ ئي هلندڙ مثالن کي ترتيب ڏيڻ جي صلاحيت ڏئي ٿو. استعمال ڪندڙ کي باقي پاڻ کي ڪرڻ گهرجي: ترتيب فائلون ترتيب ڏيو، خدمتون شروع ڪريو ۽ ٽوپولوجي کي ترتيب ڏيو. پر اسان اهو سڀ ڪجهه نه ڪنداسين؛ جواب ڏيڻ وارا اسان لاءِ ڪندا.

لفظن کان عملن تائين

تنهن ڪري، اچو ته اسان جي ايپليڪيشن کي ٻن مجازي مشينن تي ترتيب ڏيو ۽ هڪ سادي ٽوپولوجي قائم ڪريو:

  • نقل app-1 ڪردار تي عمل ڪندو api، جنهن ۾ ڪردار شامل آهي vshard-router. هتي رڳو هڪ مثال ٿيندو.
  • نقل storage-1 ڪردار کي لاڳو ڪري ٿو storage (۽ ساڳئي وقت vshard-storage)، هتي اسان مختلف مشينن مان ٻه مثال شامل ڪنداسين.

آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 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

انسٽال ڪريو Tarantool ڪارٽريج جوابي ڪردار:

$ ansible-galaxy install tarantool.cartridge,1.0.1

انسٽال ٿيل ڪردار شروع ڪريو:

$ ansible-playbook -i hosts.yml playbook.yml

اسان پلي بڪ جي مڪمل ٿيڻ جو انتظار ڪريون ٿا، وڃو http://localhost:8181/admin/cluster/dashboard ۽ نتيجو مزو ڪريو:

آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 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:

اسان کي صرف اهو سکڻ جي ضرورت آهي ته هن فائل جي مواد کي تبديل ڪندي مثالن ۽ replicasets کي ڪيئن منظم ڪجي. اڳتي اسان ان ۾ نوان حصا شامل ڪنداسين. ان لاءِ پريشان نه ٿيڻ لاءِ انهن کي ڪٿي شامل ڪرڻو آهي، توهان هن فائل جي آخري ورزن کي ڏسي سگهو ٿا، 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 ۽ اسان جا نوان مثال ڏسو:

آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 1)

اچو ته اتي نه روڪيون ۽ ماسٽر ٽوپولاجي انتظام.

Topology انتظام

اچو ته اسان جي نئين مثالن کي ريپليڪا سيٽ ۾ گڏ ڪريون 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 bootstrapping, automatic failover mode, authorization parameters and application configuration).

اسان واضح طور تي بيان ڪري سگھون ٿا ته اسان ڪم جي ڪهڙي حصي کي ڪرڻ چاهيون ٿا، پوء ڪردار باقي ڪمن کي ڇڏي ڏيندو. اسان جي حالت ۾، اسان صرف ٽوپولوجي سان ڪم ڪرڻ چاهيون ٿا، تنهنڪري اسان بيان ڪيو آهي cartridge-replicasets.

اچو ته اسان جي ڪوششن جي نتيجي جو اندازو لڳايو. اسان تي هڪ نئون replicaset ڳوليو http://localhost:8181/admin/cluster/dashboard.

آساني سان ۽ قدرتي طور تي ايپليڪيشنن کي ترتيب ڏيو Tarantool Cartridge (حصو 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] سسٽم جي خدمت لاء پيڪيج سان گڏ پهچائي ويندي.

جوابي ۾ پيڪيجز کي انسٽال ڪرڻ ۽ سسٽمڊ سروسز کي منظم ڪرڻ لاءِ ماڊلز ۾ ٺهيل آهن؛ اسان هتي ڪا به نئين ايجاد نه ڪئي آهي.

ڪلستر ٽوپولوجي قائم ڪرڻ

هي آهي جتي مزو شروع ٿئي ٿو. اتفاق ڪريو، اهو عجيب هوندو ته پيڪيجز کي نصب ڪرڻ ۽ هلائڻ لاء هڪ خاص جوابي ڪردار سان systemdخدمتون.

توھان ڪلستر کي دستي طور تي ترتيب ڏئي سگھو ٿا:

  • پهريون اختيار: ويب UI کوليو ۽ بٽڻ تي ڪلڪ ڪريو. اهو ڪيترن ئي مثالن جي هڪ وقت جي شروعات لاءِ ڪافي مناسب آهي.
  • ٻيو اختيار: توھان استعمال ڪري سگھو ٿا GraphQl API. هتي توهان اڳ ۾ ئي ڪجهه خودڪار ڪري سگهو ٿا، مثال طور، پٿون ۾ هڪ اسڪرپٽ لکو.
  • ٽيون اختيار (مضبوط خواهش لاء): سرور ڏانهن وڃو، استعمال ڪندي ھڪڙي مثالن سان ڳنڍيو tarantoolctl connect ۽ لوا ماڊيول سان تمام ضروري ٺاھڻ کي انجام ڏيو cartridge.

اسان جي ايجاد جو بنيادي ڪم بلڪل ائين ڪرڻ آهي، توهان لاء ڪم جو سڀ کان ڏکيو حصو.

جواب ڏيڻ توهان کي توهان جي پنهنجي ماڊل لکڻ جي اجازت ڏئي ٿي ۽ ان کي ڪردار ۾ استعمال ڪريو. اسان جو ڪردار مختلف ڪلستر جي اجزاء کي منظم ڪرڻ لاء اهڙن ماڊلز کي استعمال ڪري ٿو.

اهو ڪيئن ڪم ڪري ٿو؟ توھان بيان ڪريو ٿا ڪلستر جي گھربل حالت بيان ڪندڙ ترتيب ۾، ۽ ڪردار ھر ماڊل کي ان جي ترتيب واري سيڪشن سان گڏ ان پٽ جي طور تي مهيا ڪري ٿو. ماڊل ڪلستر جي موجوده حالت حاصل ڪري ٿو ۽ ان کي ان پٽ جي طور تي حاصل ڪيل سان مقابلو ڪري ٿو. اڳيون، ھڪڙو ڪوڊ ھڪڙي مثال جي ساکٽ ذريعي شروع ڪيو ويو آھي، جيڪو ڪلستر کي مطلوب رياست ڏانھن آڻيندو آھي.

نتيجو

اڄ اسان ٻڌايو ۽ ڏيکاريو ته ڪيئن توهان جي ايپليڪيشن کي ترتيب ڏيو Tarantool Cartridge ۽ هڪ سادي ٽوپولاجي سيٽ اپ ڪريو. هن کي ڪرڻ لاء، اسان استعمال ڪيو جوابي - هڪ طاقتور اوزار جيڪو استعمال ڪرڻ آسان آهي ۽ توهان کي هڪ ئي وقت ڪيترن ئي انفراسٽرڪچر نوڊس کي ترتيب ڏيڻ جي اجازت ڏئي ٿو (اسان جي صورت ۾، ڪلستر مثالن ۾).

مٿي اسان ڏٺو ته ڪيترن ئي طريقن مان هڪ کي بيان ڪرڻ لاءِ ڪلسٽر ترتيب ڏيڻ جو جواب استعمال ڪندي. هڪ دفعو توهان اڳتي وڌڻ لاءِ تيار محسوس ڪيو، ڳولا ڪريو بهترين عمل راند ڪتاب لکڻ تي. توهان شايد اهو آسان بڻائي سگهو ٿا توهان جي ٽوپولوجي کي استعمال ڪندي منظم ڪرڻ group_vars и host_vars.

تمام جلد اسان توهان کي ٻڌائينداسين ته ڪيئن مستقل طور تي ٽوپيالوجي مان مثالن کي حذف ڪرڻ (خارج ڪرڻ)، بوٽ اسٽريپ ويشارڊ، خودڪار ناڪامي موڊ کي منظم ڪرڻ، اختيار کي ترتيب ڏيڻ ۽ ڪلستر جي ترتيب کي پيچ ڪرڻ. ساڳئي وقت ۾، توهان پنهنجي پاڻ تي پڙهي سگهو ٿا دستاويز ۽ ڪلستر پيٽرولر کي تبديل ڪرڻ سان تجربو ڪريو.

جيڪڏهن ڪجهه ڪم نٿو ڪري، پڪ ڪريو مونکي ٻڌايو اسان کي مسئلي جي باري ۾. اسان جلدي هر شيء کي ترتيب ڏينداسين!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو