መተግበሪያዎችን በቀላሉ እና በተፈጥሮ በ Tarantool Cartridge ላይ ማሰማራት (ክፍል 1)

መተግበሪያዎችን በቀላሉ እና በተፈጥሮ በ Tarantool Cartridge ላይ ማሰማራት (ክፍል 1)

አስቀድመን ተናግረናል Tarantool Cartridge, ይህም የተከፋፈሉ አፕሊኬሽኖችን ለማዘጋጀት እና ለማሸግ ያስችልዎታል. ምንም የቀረ ነገር የለም፡ እነዚህን መተግበሪያዎች እንዴት ማሰማራት እና ማስተዳደር እንደሚችሉ ይወቁ። አይጨነቁ ፣ ሁሉንም ነገር አስበናል! ከTarantool Cartridge ጋር ለመስራት ሁሉንም ምርጥ ልምዶችን አሰባስበን ጽፈናል። ሊቻል የሚችል-ሚና, ጥቅሉን ወደ ሰርቨሮች የሚበሰብሰው፣ አጋጣሚዎችን ያስጀምራል፣ ወደ ክላስተር ያዋህዳል፣ ፈቃድን ያዋቅራል፣ ቡትስትራፕ vshard፣ አውቶማቲክ አለመሳካቱን የሚያነቃ እና የክላስተር ውቅረትን ያስተካክላል።

የሚስብ? ከዚያም በቆራጩ ስር እጠይቃለሁ, ሁሉንም ነገር እንናገራለን እና እናሳያለን.

በምሳሌ እንጀምር

የእኛን ሚና ተግባራዊነት በከፊል ብቻ እንሸፍናለን። የሁሉም ባህሪያቱ እና የግቤት ግቤቶች የተሟላ መግለጫ ሁልጊዜ ማግኘት ይችላሉ። ሰነድ. ግን መቶ ጊዜ ከመመልከት አንድ ጊዜ መሞከር የተሻለ ነው, ስለዚህ ትንሽ መተግበሪያን እናሰማራ.

Tarantool Cartridge አለው። አጋዥ ስልጠና ስለ ባንክ ደንበኞች እና ሂሳቦቻቸው መረጃ የሚያከማች እና እንዲሁም በኤችቲቲፒ በኩል መረጃን ለማስተዳደር ኤፒአይ የሚሰጥ ትንሽ የካርትሪጅ መተግበሪያ ለመፍጠር። ይህንን ለማድረግ አፕሊኬሽኑ ሁለት ሊሆኑ የሚችሉ ሚናዎችን ይገልፃል። api и storageለአብነት ሊመደብ የሚችል።

Cartridge ራሱ ሂደቶችን እንዴት እንደሚጀምሩ ምንም ነገር አይናገርም, ቀድሞውኑ እየሰሩ ያሉ ሁኔታዎችን የማዋቀር ችሎታ ብቻ ይሰጣል. ተጠቃሚው የቀረውን እራሱ ማድረግ አለበት: የውቅረት ፋይሎችን መበስበስ, አገልግሎቶቹን መጀመር እና ቶፖሎጂን ማዘጋጀት. እኛ ግን ይህን ሁሉ አናደርግም, Ansible ያደርግልናል.

ከቃላት ወደ ተግባር

ስለዚህ የእኛን መተግበሪያ ወደ ሁለት ምናባዊ ማሽኖች እናሰማራ እና ቀላል ቶፖሎጂን እናዋቅር፡

  • Replicaset app-1 ሚና ይጫወታል apiሚናውን የሚያካትት vshard-router. እዚህ አንድ ምሳሌ ብቻ ይሆናል.
  • replicaset 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 Cartridgeን ሊቻል የሚችል ሚና ይጫኑ፡-

$ 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:

እኛ የሚያስፈልገን የዚህን ፋይል ይዘቶች በመቀየር ምሳሌዎችን እና ቅጂዎችን እንዴት ማስተዳደር እንዳለብን መማር ነው። በመቀጠል, አዳዲስ ክፍሎችን በእሱ ላይ እንጨምራለን. የት እንደሚታከሉ ግራ ላለመጋባት፣ የዚህን ፋይል የመጨረሻ ስሪት ማየት ይችላሉ፣ hosts.updated.yml, ይህም በምሳሌው ማከማቻ ውስጥ ነው.

የምሳሌ አስተዳደር

ከሚቻል አንፃር፣ እያንዳንዱ ምሳሌ አስተናጋጅ ነው (ከብረት አገልጋይ ጋር መምታታት የለበትም)፣ ማለትም። Ansible የሚያስተዳድረው የመሠረተ ልማት መስቀለኛ መንገድ. ለእያንዳንዱ አስተናጋጅ የግንኙነት መለኪያዎችን (እንደ 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)

በአቅማችን አናርፍ እና የቶፖሎጂ ቁጥጥርን እንለማመዳለን።

ቶፖሎጂ አስተዳደር

አዲሶቹን አጋጣሚዎች ወደ ቅጂ ስብስብ እናዋህዳቸው 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: ቶፖሎጂ አስተዳደር (replicaset አስተዳደር እና ቋሚ ማስወገድ (ማባረር) ከጥቅሉ ውስጥ አጋጣሚዎች;
  • cartridge-configሌሎች የክላስተር መለኪያዎችን ያቀናብሩ (vshard bootstrapping፣ auto failover mode፣ የፍቃድ መለኪያዎች እና የመተግበሪያ ውቅር)።

የምንፈልገውን የሥራውን ክፍል በግልፅ ልንገልጽ እንችላለን, ከዚያም ሚናው የተቀሩትን ስራዎች ይዘልላል. በእኛ ሁኔታ, ከቶፖሎጂ ጋር ብቻ መስራት እንፈልጋለን, ስለዚህ ገለጽን cartridge-replicasets.

የጥረታችንን ውጤት እንመዝን። አዲስ የተባዛ ስብስብ በማግኘት ላይ 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] ለስርዓት አገልግሎት ከጥቅሉ ጋር ይቀርባል.

Ansible ፓኬጆችን ለመጫን እና ስልታዊ አገልግሎቶችን ለማስተዳደር አብሮ የተሰሩ ሞጁሎች አሉት፣ እዚህ ምንም አዲስ ነገር አልፈጠርንም።

የክላስተር ቶፖሎጂን በማዋቀር ላይ

እና እዚህ በጣም አስደሳችው ይጀምራል. እስማማለሁ፣ ፓኬጆችን ለመጫን እና ለመሮጥ ልዩ ሚና በሚጫወትበት ጊዜ መጨነቅ እንግዳ ነገር ነው። systemd- አገልግሎቶች.

ክላስተርን በእጅ ማዋቀር ይችላሉ፡-

  • የመጀመሪያው አማራጭ: የድር UI ን ይክፈቱ እና ቁልፎቹን ጠቅ ያድርጉ. ለብዙ አጋጣሚዎች ለአንድ ጊዜ ጅምር በጣም ተስማሚ ነው።
  • ሁለተኛ አማራጭ፡ GraphQl API መጠቀም ትችላለህ። እዚህ የሆነ ነገር በራስ-ሰር ማድረግ ይችላሉ፣ ለምሳሌ፣ በ Python ውስጥ ስክሪፕት ይፃፉ።
  • ሦስተኛው አማራጭ (በመንፈስ ለጠንካራ ሰዎች): ወደ አገልጋዩ ይሂዱ, ከተጠቀሙባቸው አጋጣሚዎች አንዱን ያገናኙ tarantoolctl connect እና ሁሉንም አስፈላጊ ማጭበርበሮችን በሉአ ሞጁል ያከናውኑ cartridge.

የእኛ ፈጠራ ዋና ተግባር ለእርስዎ በጣም አስቸጋሪ የሆነውን ይህን ማድረግ ነው.

ሊነበብ የሚችል የራስዎን ሞጁል እንዲጽፉ እና በአንድ ሚና ውስጥ እንዲጠቀሙበት ይፈቅድልዎታል. የእኛ ሚና እነዚህን ሞጁሎች በመጠቀም የክላስተርን የተለያዩ ክፍሎች ለማስተዳደር ይጠቀማል።

እንዴት እንደሚሰራ? የሚፈለገውን የክላስተር ሁኔታ ገላጭ ውቅረት ውስጥ ይገልፃሉ፣ እና ሚናው ለእያንዳንዱ ሞጁል የውቅር ክፍሉን እንደ ግብአት ይሰጣል። ሞጁሉ የክላስተር ወቅታዊ ሁኔታን ይቀበላል እና ከመግቢያው ጋር ያወዳድራል. በመቀጠል, አንድ ኮድ በአንዱ አጋጣሚዎች ሶኬት ውስጥ ይካሄዳል, ይህም ክላስተር ወደ ተፈላጊው ሁኔታ ያመጣል.

ውጤቶች

ዛሬ ማመልከቻዎን በ Tarantool Cartridge ላይ እንዴት እንደሚያሰማሩ እና ቀላል ቶፖሎጂን እንደሚያዘጋጁ ነግረን እና አሳይተናል። ይህንን ለማድረግ በቀላሉ ለመጠቀም ቀላል የሆነ እና ብዙ የመሠረተ ልማት ኖዶችን በአንድ ጊዜ እንዲያዋቅሩ የሚያስችል ኃይለኛ መሳሪያ Ansible ተጠቀምን (በእኛ ሁኔታ እነዚህ ክላስተር ምሳሌዎች ናቸው)።

ከዚህ በላይ፣ አንሲብልን በመጠቀም የክላስተር ውቅርን ከሚገልጹት ከብዙ መንገዶች አንዱን አነጋግረናል። ለመቀጠል ዝግጁ መሆንዎን ካወቁ በኋላ ይማሩ ምርጥ ልምዶች የመጫወቻ መጽሐፍትን ለመጻፍ. በቶፖሎጂን ለማስተዳደር የበለጠ አመቺ ሆኖ ሊያገኙት ይችላሉ። group_vars и host_vars.

በጣም በቅርብ ጊዜ ምሳሌዎችን ከቶፖሎጂ እንዴት በቋሚነት ማስወገድ (ማባረር) እንደሚችሉ እንነግርዎታለን ፣ bootstrap vshard ፣ አውቶማቲክ ውድቀት ሁነታን ያስተዳድሩ ፣ ፈቃድን ማዋቀር እና የክላስተር ውቅረትን ማስተካከል። እስከዚያው ድረስ, በራስዎ ማጥናት ይችላሉ ሰነዶች እና የክላስተር መለኪያዎችን በመቀየር ሙከራ ያድርጉ።

የሆነ ነገር ካልሰራ እርግጠኛ ይሁኑ ማሳወቅ እኛ ስለ ችግሩ ። በፍጥነት እናፈርሳለን!

ምንጭ: hab.com

አስተያየት ያክሉ