рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬрд╡рд░ рд╕рд╣рдЬ рдЖрдгрд┐ рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рд╛ (рднрд╛рдЧ 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 рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрд▓. рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯрд╕рд╛рдареА рдЖрдореНрд╣реА рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ (рдЬрд╕реЗ рдХреА 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.

рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА Ansible рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕рд╛рдВрдЧрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЧрдЯрд╛рдВрдордзреНрдпреЗ рдЧрдЯрдмрджреНрдз рдХрд░рдгреЗ рддрд░реНрдХрд╕рдВрдЧрдд рд╡рд╛рдЯрддреЗ. рдпрд╛ рдЙрджреНрджреЗрд╢рд╛рд╕рд╛рдареА, рдЙрджрд╛рд╣рд░рдгреЗ рдЧрдЯрд╛рдВрдордзреНрдпреЗ рдПрдХрддреНрд░ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд 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 рдмреВрдЯрд╕реНрдЯреНрд░реЕрдкрд┐рдВрдЧ, рдСрдЯреЛрдореЕрдЯрд┐рдХ рдлреЗрд▓рдУрд╡реНрд╣рд░ рдореЛрдб, рдСрдереЛрд░рд╛рдпрдЭреЗрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрдгрд┐ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди).

рдЖрдореНрд╣реА рдХрд╛рдорд╛рдЪрд╛ рдХреЛрдгрддрд╛ рднрд╛рдЧ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ рд╣реЗ рдЖрдореНрд╣реА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ, рдирдВрддрд░ рднреВрдорд┐рдХрд╛ рдЙрд░реНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпреЗ рд╡рдЧрд│реЗрд▓. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдЯреЛрдкреЛрд▓реЙрдЬреАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ 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 рдЖрдгрд┐ рд▓реБрдЖ рдореЙрдбреНрдпреВрд▓рд╕рд╣ тАЛтАЛрд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рд╣рд╛рддрд╛рд│рдгреА рдХрд░рд╛ cartridge.

рдЖрдордЪреНрдпрд╛ рд╢реЛрдзрд╛рдЪреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реЗ рдирдХреНрдХреА рдХрд░рдгреЗ рдЖрд╣реЗ, рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдХрд╛рдорд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдХрдареАрдг рднрд╛рдЧ.

Ansible рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рднреВрдорд┐рдХреЗрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдЖрдордЪреА рднреВрдорд┐рдХрд╛ рд╡рд┐рд╡рд┐рдз рдХреНрд▓рд╕реНрдЯрд░ рдШрдЯрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╢рд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЗ.

рд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ? рддреБрдореНрд╣реА рдХреНрд▓рд╕реНрдЯрд░рдЪреНрдпрд╛ рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд┐рддреАрдЪреЗ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рдЖрдгрд┐ рднреВрдорд┐рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓рд▓рд╛ рддреНрдпрд╛рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡рд┐рднрд╛рдЧ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдореЙрдбреНрдпреБрд▓ рдХреНрд▓рд╕реНрдЯрд░рдЪреА рд╕рджреНрдпрд╕реНрдерд┐рддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╢реА рддреНрдпрд╛рдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЗ. рдкреБрдвреЗ, рдПрдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреНрдпрд╛ рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдХреЛрдб рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛ рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд┐рддреАрдд рдЖрдгрддреЛ.

рдкрд░рд┐рдгрд╛рдо

рдЖрдЬ рдЖрдореНрд╣реА рддреБрдордЪрд╛ рдЕрд░реНрдЬ Tarantool Cartridge рд╡рд░ рдХрд╕рд╛ рддреИрдирд╛рдд рдХрд░рд╛рдпрдЪрд╛ рдЖрдгрд┐ рдПрдХ рд╕рд╛рдзреА рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╢реА рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреА рддреЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЖрдгрд┐ рджрд╛рдЦрд╡рд▓реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрдБрд╕рд┐рдмрд▓ рд╡рд╛рдкрд░рд▓реЗ - рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрди рдЬреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реЛрдкреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдиреЛрдбреНрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ (рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдХреНрд▓рд╕реНрдЯрд░ рдЙрджрд╛рд╣рд░рдгреЗ).

рд╡рд░ рдЖрдореНрд╣реА Ansible рд╡рд╛рдкрд░реВрди рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧрд╛рдВрдкреИрдХреА рдПрдХ рдкрд╛рд╣рд┐рд▓рд╛. рдПрдХрджрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрдвреЗ рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рд╡рд╛рдЯрд▓реЗ рдХреА, рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрджреНрдзрддреА рдкреНрд▓реЗрдмреБрдХ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╡рд░. рд╡рд╛рдкрд░реВрди рддреБрдордЪреА рдЯреЛрдкреЛрд▓реЙрдЬреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реЛрдкреЗ рд╡рд╛рдЯреВ рд╢рдХрддреЗ group_vars ╨╕ host_vars.

рдЯреЛрдкреЛрд▓реЙрдЬреА, рдмреВрдЯрд╕реНрдЯреНрд░реЕрдк рд╡реНрд╣реАрд╢рд╛рд░реНрдб, рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдлреЗрд▓рдУрд╡реНрд╣рд░ рдореЛрдб рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ, рдЕрдзрд┐рдХреГрддрддрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ рдкреЕрдЪ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рд▓рд╡рдХрд░рдЪ рдХрд╕реЗ рд╣рдЯрд╡рд╛рдпрдЪреЗ (рд╣рдХрд▓реВрди рд▓рд╛рд╡рд╛рдпрдЪреЗ) рд╕рд╛рдВрдЧреВ. рджрд░рдореНрдпрд╛рди, рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рдЕрднреНрдпрд╛рд╕ рдХрд░реВ рд╢рдХрддрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛.

рдХрд╛рд╣реАрддрд░реА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╕рд▓реНрдпрд╛рд╕, рдЦрд╛рддреНрд░реА рдХрд░рд╛ рдорд▓рд╛ рдХрд│рд╡рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╕реНрдпреЗрдмрджреНрджрд▓. рдЖрдореНрд╣реА рддреНрд╡рд░реАрдд рд╕рд░реНрд╡рдХрд╛рд╣реА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡реВ!

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛