рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░реЗрдВ (рднрд╛рдЧ 1)

рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░реЗрдВ (рднрд╛рдЧ 1)

рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рддрд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдм рдмрд╕ рдпрд╣ рд╕реАрдЦрдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ! рд╣рдордиреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдФрд░ рд▓рд┐рдЦрд╛ ansible-рднреВрдорд┐рдХрд╛, рдЬреЛ рдкреИрдХреЗрдЬ рдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХрдЬреБрдЯ рдХрд░реЗрдЧрд╛, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдЧрд╛, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк vshard, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреИрдЪ рдХрд░реЗрдЧрд╛ред

рджрд┐рд▓рдЪрд╕реНрдк? рддреЛ рдХреГрдкрдпрд╛, рдХрдЯ рдХреЗ рддрд╣рдд, рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдФрд░ рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рджрд┐рдЦрд╛рдПрдВрдЧреЗред

рдЪрд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рд╣рдо рдЕрдкрдиреА рднреВрдорд┐рдХрд╛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рд╣реА рджреЗрдЦреЗрдВрдЧреЗред рдЖрдк рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреА рд╕рднреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рд▓реЗрдЦрди. рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реМ рдмрд╛рд░ рджреЗрдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рддреЛ рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░реЗрдВред

рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рд╣реИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдПрдХ рдЫреЛрдЯрд╛ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЬреЛ рдмреИрдВрдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЦрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: api ╨╕ storage, рдЬрд┐рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рд╕реНрд╡рдпрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд╛рдХреА рдХрд╛рдо рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛, рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдФрд░ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕рдм рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ; Ansible рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд░реЗрдЧрд╛ред

рд╢рдмреНрджреЛрдВ рд╕реЗ рдХрд░реНрдореЛрдВ рддрдХ

рддреЛ, рдЖрдЗрдП рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рддреИрдирд╛рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕рд░рд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рд╕реЗрдЯ рдХрд░реЗрдВ:

  • рдкреНрд░рддрд┐рдХреГрддрд┐рд╕реЗрдЯ app-1 рднреВрдорд┐рдХрд╛ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ api, рдЬрд┐рд╕рдореЗрдВ рднреВрдорд┐рдХрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ vshard-router. рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛.
  • рдкреНрд░рддрд┐рдХреГрддрд┐рд╕реЗрдЯ storage-1 рднреВрдорд┐рдХрд╛ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ storage (рдФрд░ рдЙрд╕ рд╕рдордп рдкрд░ рд╣реА vshard-storage), рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рд╕реЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░реЗрдВ (рднрд╛рдЧ 1)

рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬрд┐рд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЖрд╡рд╛рд░рд╛ ╨╕ Ansible (рд╕рдВрд╕реНрдХрд░рдг 2.8 рдпрд╛ рдкреБрд░рд╛рдирд╛)ред

рднреВрдорд┐рдХрд╛ рд╕реНрд╡рдпрдВ рдореЗрдВ рд╣реИ Ansible рдЧреИрд▓реЗрдХреНрд╕реА. рдпрд╣ рдПрдХ рднрдВрдбрд╛рд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдФрд░ рддреИрдпрд╛рд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ:

$ 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. рдЪреВрдБрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ Ansible рд╢рдмреНрджреЛрдВ рдореЗрдВ рдПрдХ рд╣реЛрд╕реНрдЯ рд╣реИ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓реЗрдмреБрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреМрди рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдп рдХрд╛ рдХреМрди рд╕рд╛ рднрд╛рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреВрдорд┐рдХрд╛ рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧреАред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ 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 рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдордбреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ; рд╣рдордиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдХреНрд▓рд╕реНрдЯрд░ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреА рд╕реНрдерд╛рдкрдирд╛

рдордЬрд╝рд╛ рдпрд╣рд╛рдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╣рдордд рд╣реВрдБ, рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ Ansible рднреВрдорд┐рдХрд╛ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ systemd-рд╕рд░рдХрд╛рд░реА

рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк: рд╡реЗрдм рдпреВрдЖрдИ рдЦреЛрд▓реЗрдВ рдФрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдПрдХ рдмрд╛рд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
  • рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк: рдЖрдк GraphQl API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВред
  • рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк (рджреГрдврд╝ рдЗрдЪреНрдЫрд╛рд╢рдХреНрддрд┐ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП): рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдПрдВ, рдХрд┐рд╕реА рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ tarantoolctl connect рдФрд░ рд▓реБрдЖ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░реЗрдВ cartridge.

рд╣рдорд╛рд░реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдареАрдХ рдпрд╣реА рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

Ansible рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рднреВрдорд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╕реНрдЯрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

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

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

рдЖрдЬ рд╣рдордиреЗ рдмрддрд╛рдпрд╛ рдФрд░ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдкрд░ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕рд░рд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ Ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдЬреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдиреЛрдбреНрд╕ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╕реНрдЯрд░ рдЙрджрд╛рд╣рд░рдг) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

рдмрд╣реБрдд рдЬрд▓реНрдж рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЯреЛрдкреЛрд▓реЙрдЬреА, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдмрдирд╛рдорд╣рд╛рд░реНрдб рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╣рдЯрд╛рдПрдВ (рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдХрд░реЗрдВ), рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдлреЗрд▓рдУрд╡рд░ рдореЛрдб рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреИрдЪ рдХрд░реЗрдВред рдЗрд╕ рдмреАрдЪ, рдЖрдк рд╕реНрд╡рдпрдВ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдмрддрд╛рдирд╛ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ. рд╣рдо рд╕рдм рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВрдЧреЗ!

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ