په اسانۍ او طبیعي ډول د ټرانټول کارتریج ته غوښتنلیکونه ځای په ځای کړئ (1 برخه)

په اسانۍ او طبیعي ډول د ټرانټول کارتریج ته غوښتنلیکونه ځای په ځای کړئ (1 برخه)

موږ لا دمخه په اړه خبرې کړې دي د ترنتول کارتوس، کوم چې تاسو ته اجازه درکوي توزیع شوي غوښتنلیکونه رامینځته کړئ او بسته یې کړئ. ټول هغه څه چې پاتې دي د دې غوښتنلیکونو پلي کولو او اداره کولو څرنګوالي زده کول دي. اندیښنه مه کوئ، موږ دا ټول پوښلي دي! موږ د Tarantool Cartridge سره د کار کولو لپاره ټول غوره تمرینونه یوځای کړل او لیکلي یې ځواب ورکوونکی رول، کوم چې به بسته سرورونو ته توزیع کړي ، مثالونه به یې پیل کړي ، په کلستر کې به یې سره متحد کړي ، واک تنظیم کړي ، د بوټسټریپ vshard ، اتوماتیک ناکامي فعاله کړي او د کلستر ترتیب پیچ کړي.

په زړه پورې؟ بیا مهرباني وکړئ ، د کټ لاندې ، موږ به تاسو ته ووایو او تاسو ته به هرڅه وښیو.

راځئ چې د یو مثال سره پیل وکړو

موږ به یوازې د خپل رول د فعالیت برخه وګورو. تاسو کولی شئ تل د دې د ټولو وړتیاو بشپړ توضیحات ومومئ او د ننوتلو پیرامیټونو کې اسناد. مګر دا غوره ده چې یو ځل هڅه وکړئ چې سل ځله یې وګورئ، نو راځئ چې یو کوچنی غوښتنلیک ځای په ځای کړو.

د ترنتول کارتریج لري ښوونه د کوچني کارتریج غوښتنلیک رامینځته کول چې د بانک پیرودونکو او د دوی حسابونو په اړه معلومات ذخیره کوي ، او همدارنګه د 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_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.

راځئ چې د خپلو هڅو پایله و ارزوو. موږ په دې کې یو نوی نقل پیدا کوو 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] د سیسټم شوي خدمت لپاره به د کڅوړې سره وړاندې شي.

انسیبل د کڅوړو نصبولو او سیسټم شوي خدماتو اداره کولو لپاره جوړ شوي ماډلونه لري؛ موږ دلته هیڅ نوي ندي اختراع کړي.

د کلستر ټوپولوژي تنظیم کول

دا هغه ځای دی چې تفریح ​​​​پیل کیږي. موافقه وکړئ، دا به عجيب وي چې د کڅوړو نصبولو او چلولو لپاره د ځانګړي ځواب ورکوونکي رول سره زحمت وکړئ systemd- خدمتونه.

تاسو کولی شئ په لاسي ډول کلستر تنظیم کړئ:

  • لومړی اختیار: د ویب UI خلاص کړئ او په بټونو کلیک وکړئ. دا د څو مثالونو د یو ځل پیل لپاره خورا مناسب دی.
  • دوهم اختیار: تاسو کولی شئ د GraphQl API وکاروئ. دلته تاسو کولی شئ دمخه یو څه اتومات کړئ، د بیلګې په توګه، په Python کې سکریپټ ولیکئ.
  • دریم اختیار (د قوي ارادې لپاره): سرور ته لاړ شئ، په کارولو سره یو له مثالونو سره وصل کړئ tarantoolctl connect او د لوا ماډل سره ټول اړین لاسوهنې ترسره کړئ cartridge.

زموږ د اختراع اصلي دنده دا ده چې دا په سمه توګه ترسره کړئ، ستاسو لپاره د کار ترټولو ستونزمن برخه.

ځواب تاسو ته اجازه درکوي خپل ماډل ولیکئ او په رول کې یې وکاروئ. زموږ رول د مختلف کلستر برخو اداره کولو لپاره دا ډول ماډلونه کاروي.

څنګه کار کوي؟ تاسو د کلستر مطلوب حالت په اعالمیه ترتیب کې بیان کړئ، او رول هر ماډل د خپل ترتیب برخې سره د ان پټ په توګه چمتو کوي. ماډل د کلستر اوسنی حالت ترلاسه کوي او د هغه څه سره پرتله کوي چې د ان پټ په توګه ترلاسه شوي. بیا، یو کوډ د یوې بیلګې د ساکټ له لارې پیل کیږي، کوم چې کلستر مطلوب حالت ته راوړي.

پایلې

نن ورځ موږ وویل او وښودله چې څنګه خپل غوښتنلیک ټرینټول کارټریج ته ځای په ځای کړئ او یو ساده ټوپولوژي تنظیم کړئ. د دې کولو لپاره، موږ ځواب ورکوو - یو پیاوړی وسیله چې کارول یې اسانه دي او تاسو ته اجازه درکوي په ورته وخت کې ډیری زیربنا نوډونه تنظیم کړئ (زموږ په قضیه کې، د کلستر مثالونه).

پورته موږ د Ansible په کارولو سره د کلستر ترتیب تشریح کولو لپاره ډیری لارو څخه یوه ته کتنه وکړه. یوځل چې تاسو د حرکت کولو لپاره چمتو احساس کوئ ، وپلټئ غوره تمرینونه د لوبو کتابونو لیکلو په اړه. تاسو ممکن د دې په کارولو سره د خپل ټوپولوژي اداره کول اسانه ومومئ group_vars и host_vars.

ډیر ژر به موږ تاسو ته ووایو چې څنګه د ټاپولوژي څخه د تل لپاره (ایستل) مثالونه حذف کړئ ، د بوټسټریپ vshard ، د اتوماتیک ناکامي حالت اداره کړئ ، اختیار تنظیم کړئ او د کلستر ترتیب پیچ کړئ. په ورته وخت کې، تاسو کولی شئ پخپله مطالعه وکړئ اسناد او د کلستر پیرامیټونو بدلولو سره تجربه وکړئ.

که یو څه کار نه کوي، ډاډ ترلاسه کړئ ما خبر کړی موږ د ستونزې په اړه. موږ به هرڅه ژر تر ژره تنظیم کړو!

سرچینه: www.habr.com

Add a comment