Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рд╡рд╛рдврддреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд, рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рдЦрд╛рд▓реАрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдд рдЖрд╣реЗрдд: тАЬрдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ Amazon RDS рд╕рд╛рд░рдЦреЗ рд╣рд╡реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕реНрд╡рд╕реНрддтАЭ; "рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ RDS рд╕рд╛рд░рдЦреЗ рд╣рд╡реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡рддреНрд░, рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ." Kubernetes рд╡рд░ рдЕрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА PostgreSQL (Stolon, Crunchy Data рдЖрдгрд┐ Zalando рдЪреЗ рдСрдкрд░реЗрдЯрд░) рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдкрд░реЗрдЯрд░реНрд╕рдЪреА рд╕рджреНрдпрд╕реНрдерд┐рддреА рдкрд╛рд╣рд┐рд▓реА рдЖрдгрд┐ рдЖрдордЪреА рдирд┐рд╡рдб рдХреЗрд▓реА.

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

RDS рдореНрд╣рдгрдЬреЗ рдХрд╛рдп

рдЬреЗрд╡реНрд╣рд╛ рд▓реЛрдХ RDS рдмрджреНрджрд▓ рдмреЛрд▓рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рдЖрдордЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдиреБрд╕рд╛рд░, рддреНрдпрд╛рдВрдЪрд╛ рдЕрд░реНрде рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд DBMS рд╕реЗрд╡рд╛ рдореНрд╣рдгрдЬреЗ:

  1. рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ;
  2. рд╕реНрдиреЕрдкрд╢реЙрдЯреНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреВрди рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ (рд╢рдХреНрдпрддреЛ рд╕рдорд░реНрдердирд╛рд╕рд╣ PITR);
  3. рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╕реНрдЯрд░-рд╕реНрд▓реЗрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ;
  4. рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрдЪреА рд╕рдореГрджреНрдз рдпрд╛рджреА рдЖрд╣реЗ;
  5. рдСрдбрд┐рдЯрд┐рдВрдЧ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддрд╛/рдкреНрд░рд╡реЗрд╢ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рд╣рд╛рддрд╛рдд рдЕрд╕рд▓реЗрд▓реЗ рдХрд╛рд░реНрдп рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреЗ рджреГрд╖реНрдЯрд┐рдХреЛрди рдЦреВрдк рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рд╕рд╢рд░реНрдд рдЙрддреНрддрд░реЗрдЪрд╛ рдорд╛рд░реНрдЧ рдЖрдкрд▓реНрдпрд╛ рдЬрд╡рд│ рдирд╛рд╣реА. (2GIS рдордзреАрд▓ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдиреА рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рд╕рдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврд▓рд╛ рддреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди "рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕-рдЖрдзрд╛рд░рд┐рдд рдлреЗрд▓рдУрд╡реНрд╣рд░ рдХреНрд▓рд╕реНрдЯрд░ рджреНрд░реБрддрдкрдгреЗ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрди рддрдпрд╛рд░ рдХрд░рд╛.")

Kubernetes рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордордзреАрд▓ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рд╣рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯреАрдХреЛрди рдЖрд╣реЗ. "рдлреНрд▓рд╛рдВрдЯрд╛" рдЪреНрдпрд╛ рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдВрдЪрд╛рд▓рдХрд╛рдиреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд╛рдд рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдмреЛрд▓рд▓реЗ рдЖрд╣реЗ. рдбрд┐рд╕реНрдЯреЙрд▓, рдордзреНрдпреЗ рддреНрдпрд╛рдЪрд╛ рдПрдХ рдЕрд╣рд╡рд╛рд▓.

NB: рд╕рд╛рдзреЗ рдСрдкрд░реЗрдЯрд░ рджреНрд░реБрддрдкрдгреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдЙрдкрдпреБрдХреНрддрддреЗрдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░. рддреЗ рд╡рд╛рдкрд░реВрди, рддреБрдореНрд╣реА рдЧреЛ рдЪреНрдпрд╛ рдЬреНрдЮрд╛рдирд╛рд╢рд┐рд╡рд╛рдп рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХрд╛рдВрдирд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдорд╛рд░реНрдЧрд╛рдВрдиреА: рдмреЕрд╢, рдкрд╛рдпрдерди рдЗ.

PostgreSQL рд╕рд╛рдареА рдЕрдиреЗрдХ рд▓реЛрдХрдкреНрд░рд┐рдп K8s рдСрдкрд░реЗрдЯрд░ рдЖрд╣реЗрдд:

  • рд╕реНрдЯреЛрд▓реЙрди;
  • рдХреБрд░рдХреБрд░реАрдд рдбреЗрдЯрд╛ PostgreSQL рдСрдкрд░реЗрдЯрд░;
  • рдЭрд╛рд▓рдБрдбреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░.

рдЪрд▓рд╛ рддреНрдпрд╛рдВрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рд░рдХрд╛рдИрдиреЗ рдкрд╛рд╣реВрдпрд╛.

рдСрдкрд░реЗрдЯрд░ рдирд┐рд╡рдб

рд╡рд░ рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдСрдкрд░реЗрд╢рдиреНрд╕ рдЕрднрд┐рдпрдВрддрд╛ рдпрд╛ рдирд╛рддреНрдпрд╛рдиреЗ - рдСрдкрд░реЗрдЯрд░рдХрдбреВрди рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗрд▓реА рдЖрд╣реЗ:

  • Git рдЖрдгрд┐ рд╕рд╣ рдЙрдкрдпреЛрдЬрди рд╕рд╛рдиреБрдХреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ;
  • рдкреЙрдб рд╡рд┐рд░реЛрдзреА рдЖрддреНрдореАрдпрддрд╛ рд╕рдорд░реНрдерди;
  • рдиреЛрдб рдЕреЕрдлрд┐рдирд┐рдЯреА рдХрд┐рдВрд╡рд╛ рдиреЛрдб рд╕рд┐рд▓реЗрдХреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ;
  • рд╕рд╣рдирд╢реАрд▓рддреЗрдЪреА рд╕реНрдерд╛рдкрдирд╛;
  • рдЯреНрдпреВрдирд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдВрдЪреА рдЙрдкрд▓рдмреНрдзрддрд╛;
  • рд╕рдордЬрдгреНрдпрд╛рдпреЛрдЧреНрдп рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдЖрдгрд┐ рдЕрдЧрджреА рдЖрджреЗрд╢.

рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреВрдЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╛рдд рди рдЬрд╛рддрд╛ (рд╕рдВрдкреВрд░реНрдг рд▓реЗрдЦ рд╡рд╛рдЪрд▓реНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрджреНрдпрд╛рдк рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдкреНрд░рд╢реНрди рдЕрд╕рд▓реНрдпрд╛рд╕ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛), рдореА рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдИрди рдХреА рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕рдЪреНрдпрд╛ рд╕реНрдкреЗрд╢рд▓рд╛рдпрдЭреЗрд╢рдирдЪреЗ рдЕрдзрд┐рдХ рдЕрдЪреВрдХрдкрдгреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рдСрд░реНрдбрд░ рдХрд░рд╛. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА рдХрд╛рдордЧрд┐рд░реА рдЖрдгрд┐ рдЦрд░реНрдЪрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЗрд╖реНрдЯрддрдо рд╕рдВрддреБрд▓рди рд╕рд╛рдзреВ рд╢рдХрддреЛ.

рдЖрддрд╛ рд╕реНрд╡рддрдГ PostgreSQL рдСрдкрд░реЗрдЯрд░реНрд╕рдХрдбреЗ рд╡рд│реВ.

1. рд╕реНрдЯреЛрд▓реЙрди

рд╕реНрдЯреЛрд▓реЙрди рдордзреНрдпреЗ рдЗрдЯрд╛рд▓рд┐рдпрди рдХрдВрдкрдиреА Sorint.lab рдХрдбреВрди рдЖрдзреАрдЪ рдирдореВрдж рдХреЗрд▓реЗрд▓рд╛ рдЕрд╣рд╡рд╛рд▓ DBMS рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░реНрд╕рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪреЗ рдорд╛рдирдХ рдорд╛рдирд▓реЗ рдЬрд╛рдд рдЕрд╕реЗ. рд╣рд╛ рдЦреВрдк рдЬреБрдирд╛ рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗ: рддреНрдпрд╛рдЪреЗ рдкрд╣рд┐рд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рдХрд╛рд╢рди рдиреЛрд╡реНрд╣реЗрдВрдмрд░ 2015 (!) рдордзреНрдпреЗ рдЭрд╛рд▓реЗ рдЖрдгрд┐ GitHub рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЬрд╡рд│рдЬрд╡рд│ 3000 рддрд╛рд░реЗ рдЖрдгрд┐ 40+ рдпреЛрдЧрджрд╛рдирдХрд░реНрддреЗ рдЖрд╣реЗрдд.

рдЦрд░рдВрдЪ, рд╕реНрдЯреЛрд▓рди рд╣реЗ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:

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

рддрдерд╛рдкрд┐, рд╕реНрдЯреЛрд▓рди рд╕рд╛рдиреБрдХреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ рдирд╛рд╣реАрдд, рдореНрд╣рдгреВрдирдЪ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рдбреАрдмреАрдПрдордПрд╕ рдЙрджрд╛рд╣рд░рдгреЗ рддрдпрд╛рд░ рдХрд░рдгреЗ - тАЬрд╣реЙрдЯ рдХреЗрдХрд╕рд╛рд░рдЦреЗтАЭ тАУ рд╕реЛрдкреЗ рдЖрдгрд┐ рджреНрд░реБрдд рдЖрд╣реЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рддреЗ рддреИрдирд╛рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдпреБрдЯрд┐рд▓рд┐рдЯреАрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ stolonctl, рдЙрдкрдпреЛрдЬрди рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ рд╕рд╛рдиреБрдХреВрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдордзреНрдпреЗ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.

рдПрдХреАрдХрдбреЗ, рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдСрдкрд░реЗрдЯрд░ рдЦрд░реЛрдЦрд░ рдСрдкрд░реЗрдЯрд░ рдирд╛рд╣реА (рддрд░реАрд╣реА, рддреЛ CRD рд╡рд╛рдкрд░рдд рдирд╛рд╣реА). рдкрд░рдВрддреБ рджреБрд╕рд░реАрдХрдбреЗ, рд╣реА рдПрдХ рд▓рд╡рдЪрд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЛрдЧреНрдп рд╡рд╛рдЯреЗрд▓ рддрд╕реЗ K8s рдордзреНрдпреЗ рд╕рдВрд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рдереЛрдбрдХреНрдпрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рдЪрд╛рд░реНрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╡рд╛рдЯрд▓реЗ рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдкрд░реНрдпрд╛рдп рд╢реЛрдзреВ рд▓рд╛рдЧрд▓реЛ.

2. рдХреБрд░рдХреБрд░реАрдд рдбреЗрдЯрд╛ PostgreSQL рдСрдкрд░реЗрдЯрд░

Crunchy рдбреЗрдЯрд╛ рдкрд╛рд╕реВрди рдСрдкрд░реЗрдЯрд░, рдПрдХ рддрд░реБрдг рдЕрдореЗрд░рд┐рдХрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк, рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкрд░реНрдпрд╛рдп рд╡рд╛рдЯрд▓рд╛. рддреНрдпрд╛рдЪрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрддрд┐рд╣рд╛рд╕ рдорд╛рд░реНрдЪ 2017 рдордзреНрдпреЗ рдкрд╣рд┐рд▓реНрдпрд╛ рд░рд┐рд▓реАрдЭрд╕рд╣ рд╕реБрд░реВ рд╣реЛрддреЛ, рддреЗрд╡реНрд╣рд╛рдкрд╛рд╕реВрди GitHub рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрд▓рд╛ рдлрдХреНрдд 1300 рддрд╛рд░реЗ рдЖрдгрд┐ 50+ рдпреЛрдЧрджрд╛рдирдХрд░реНрддреЗ рдорд┐рд│рд╛рд▓реЗ рдЖрд╣реЗрдд. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ 1.15-1.18, OpenShift 3.11+ рдЖрдгрд┐ 4.4+, GKE рдЖрдгрд┐ VMware Enterprise PKS 1.3+ рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдкреНрдЯреЗрдВрдмрд░рдордзреАрд▓ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЭрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рдд рдЖрд▓реА.

Crunchy Data PostgreSQL рдСрдкрд░реЗрдЯрд░рдЪреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреЗрдЦреАрд▓ рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рддреЗ:

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдпреБрдЯрд┐рд▓рд┐рдЯреАрджреНрд╡рд╛рд░реЗ рд╣реЛрддреЗ pgoрддрдерд╛рдкрд┐, рддреЗ рдХреБрдмреЗрд░рдиреЗрдЯрд╕рд╛рдареА рд╕рд╛рдиреБрдХреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рддреЗ. рдореНрд╣рдгреВрди, рдСрдкрд░реЗрдЯрд░рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрднрд╛рд╡реНрдп рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдореНрд╣рдгреВрди рдЖрдирдВрдж рджрд┐рд▓рд╛:

  • CRD рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдг рдЖрд╣реЗ;
  • рд╕реЛрдпреАрд╕реНрдХрд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди (рд╕реАрдЖрд░рдбреА рджреНрд╡рд╛рд░реЗ рджреЗрдЦреАрд▓);
  • рдЗрддрд░ рдШрдЯрдХрд╛рдВрд╕рд╣ рдПрдХрддреНрд░реАрдХрд░рдг рдХреБрд░рдХреБрд░реАрдд рдбреЗрдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╕реВрдЯ тАФ PostgreSQL рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐рдорд╛рдВрдЪрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдЧреНрд░рд╣ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрддрддрд╛ (pgBackRest, pgAudit, рдпреЛрдЧрджрд╛рдирд╛рддреАрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдЗ. рд╕рдорд╛рд╡реЗрд╢).

рддрдерд╛рдкрд┐, рдХреНрд░рдиреНрдЪреА рдбреЗрдЯрд╛рд╡рд░реВрди рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рдгреЗ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдВрдореБрд│реЗ рдЕрдиреЗрдХ рд╕рдорд╕реНрдпрд╛ рд╕рдореЛрд░ рдЖрд▓реНрдпрд╛:

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

рд╢реЗрд╡рдЯрдЪреА рдХрдорддрд░рддрд╛ рдордЬреЗрджрд╛рд░ рдХреНрд╖рдгрд╛рдВрдирд╛ рдХрд╛рд░рдгреАрднреВрдд рдард░рддреЗ: рдЪрд╛рдЪрдгреА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЖрдореНрд╣реА рдПрдХрд╛ рдбрд┐рд╕реНрдХрд╕рд╣ 3 рдкреНрд░рддрд┐рдХреГрддреА рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдЯреЛрд░реЗрдЬ, рдЬреНрдпрд╛рдореБрд│реЗ рдСрдкрд░реЗрдЯрд░рдиреЗ рдЕрд╣рд╡рд╛рд▓ рджрд┐рд▓рд╛ рдХреА 3 рдкреНрд░рддрд┐рдХреГрддреА рдХрд╛рд░реНрдпрд░рдд рдЖрд╣реЗрдд (рдЬрд░реА рддреНрдпрд╛ рдирд╕рд▓реНрдпрд╛ рддрд░реА).

рдпрд╛ рдСрдкрд░реЗрдЯрд░рдЪреЗ рдЖрдгрдЦреА рдПрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреЗ рд╡рд┐рд╡рд┐рдз рд╕рдорд░реНрдерди рдкреНрд░рдгрд╛рд▓реАрдВрд╕рд╣ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдПрдХрддреНрд░реАрдХрд░рдг. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, pgAdmin рдЖрдгрд┐ pgBounce, рдЖрдгрд┐ рдордзреНрдпреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реЗ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдЖрдгрд┐ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдорд╛рдирд▓реЗ рдЬрд╛рддрд╛рдд. рдЕрд▓реАрдХрдбрдЪреНрдпрд╛ рдХрд╛рд│рд╛рдд 4.5.0-beta1 рд░рд┐рд▓реАрдЬ рдХрд░рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╣ рд╕реБрдзрд╛рд░рд┐рдд рдПрдХреАрдХрд░рдг рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдиреЛрдВрджрд╡рд▓реЗ рдЬрд╛рддреЗ pgрдореЙрдирд┐рдЯрд░, рдЬреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ PgSQL рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рд╕реНрдкрд╖реНрдЯ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдСрдлрд░ рдХрд░рддреЛ.

рддрдерд╛рдкрд┐, Kubernetes-рд╡реНрдпреБрддреНрдкрдиреНрди рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдЪрд┐рддреНрд░ рдирд┐рд╡рдбреАрдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд│реЗ рдЙрдкрд╛рдп рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реА.

3. рдЭрд╛рд▓рдБрдбреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░

рдЖрдореНтАНрд╣реА рдЭрд╛рд▓реЕрдВрдбреЛрдЪреА рдЙрддреНтАНрдкрд╛рджрдиреЗ рдмрд░реНтАНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдУрд│рдЦрддреЛ: рдЖрдореНтАНрд╣рд╛рд▓рд╛ рдЭрд╛рд▓реЗрдирд┐рдпрдо рд╡рд╛рдкрд░рдгреНтАНрдпрд╛рдЪрд╛ рдЕрдиреБрднрд╡ рдЖрд╣реЗ рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ, рдЖрдореНрд╣реА рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рд╕рдВрд░рдХреНрд╖рдХ PostgreSQL рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреЗ рд▓реЛрдХрдкреНрд░рд┐рдп HA рд╕рдорд╛рдзрд╛рди рдЖрд╣реЗ. рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрдВрдкрдиреАрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдмрджреНрджрд▓ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рд▓реЗрдЦрдХрд╛рдВрдкреИрдХреА рдПрдХ, рдЕрд▓реЗрдХреНрд╕реА рдХреНрд▓реНрдпреБрдХрд┐рди рдпрд╛рдВрдиреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕-рдордВрдЧрд│рд╡рд╛рд░ #5, рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ рдЖрд╡рдбрд▓реЗ.

рд▓реЗрдЦрд╛рдд рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗрд▓рд╛ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рддрд░реБрдг рдЙрдкрд╛рдп рдЖрд╣реЗ: рдкрд╣рд┐рд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдСрдЧрд╕реНрдЯ 2018 рдордзреНрдпреЗ рдЭрд╛рд▓реЗ. рддрдерд╛рдкрд┐, рдФрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдЕрд╕реВрдирд╣реА, рдкреНрд░рдХрд▓реНрдкрд╛рдиреЗ рдЦреВрдк рдореЛрдард╛ рдкрд▓реНрд▓рд╛ рдЧрд╛рдард▓рд╛ рдЖрд╣реЗ, GitHub рд╡рд░ 1300+ рддрд╛рд░реЗ рдЖрдгрд┐ рдпреЛрдЧрджрд╛рдирдХрд░реНрддреНрдпрд╛рдВрдЪреА рдХрдорд╛рд▓ рд╕рдВрдЦреНрдпрд╛ (70+) рд╕рд╣ рдХреНрд░рдиреНрдЪреА рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирд▓рд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддреЗрдордзреНрдпреЗ рдорд╛рдЧреЗ рдЯрд╛рдХрд▓реЗ рдЖрд╣реЗ.

тАЬрдЕрдВрдбрд░ рдж рд╣реБрдбтАЭ рд╣рд╛ рдСрдкрд░реЗрдЯрд░ рд╡реЗрд│-рдЪрд╛рдЪрдгреА рдЙрдкрд╛рдп рд╡рд╛рдкрд░рддреЛ:

  • рд╕рдВрд░рдХреНрд╖рдХ рдЖрдгрд┐ рд╕реНрдкрд┐рд▓реЛ рдбреНрд░рд╛рдпрд╡реНрд╣рд┐рдВрдЧрд╕рд╛рдареА,
  • рд╡рд╛рд▓-рдИ - рдмреЕрдХрдЕрдкрд╕рд╛рдареА,
  • PgBouncer - рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдореНрд╣рдгреВрди.

Zalando рдордзреАрд▓ рдСрдкрд░реЗрдЯрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ:

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рдСрдкрд░реЗрдЯрд░ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╕реНрдЯрдо рд░рд┐рд╕реЛрд░реНрд╕реЗрд╕рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдХрдВрдЯреЗрдирд░рдордзреВрди рдЖрдкреЛрдЖрдк рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░рддреЛ, рдЬреЛ рдирдВрддрд░ рдкреЙрдбрдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рд╕рд╛рдЗрдбрдХрд╛рд░ рдЬреЛрдбреВрди рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдХреНрд░рдВрдЪреА рдбреЗрдЯрд╛рдордзреАрд▓ рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рд╣реЗ рд╕рд░реНрд╡ рдПрдХ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдлрд╛рдпрджрд╛ рдЖрд╣реЗ.

рдЖрдореНрд╣реА рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди 3 рдкрд░реНрдпрд╛рдпрд╛рдВрдкреИрдХреА Zalando рдордзреАрд▓ рдЙрдкрд╛рдп рдирд┐рд╡рдбрд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЕрд░реНрдЬрд╛рдЪреНрдпрд╛ рд╕рд░рд╛рд╡рд╛рд╕рд╣, рддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреЗ рдкреБрдвреАрд▓ рд╡рд░реНрдгрди рдЦрд╛рд▓реА рд╕рд╛рджрд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

рдЭрд╛рд▓рдБрдбреЛ рдпреЗрдереАрд▓ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░рд╕рд╣ рд╕рд░рд╛рд╡ рдХрд░рд╛

рдСрдкрд░реЗрдЯрд░ рддреИрдирд╛рдд рдХрд░рдгреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ: рдлрдХреНрдд GitHub рд╡рд░реВрди рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреВрди YAML рдлрд╛рдпрд▓реА рд▓рд╛рдЧреВ рдХрд░рд╛ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ. рд╡реИрдХрд▓реНрдкрд┐рдХрд░рд┐рддреНрдпрд╛, рдЖрдкрдг рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рдСрдкрд░реЗрдЯрд░рд╣рдм.

рд╕реНрдерд╛рдкрдиреЗрдирдВрддрд░, рдЖрдкрдг рд╕реЗрдЯрдЕрдкрдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рд╛рд╡реА рд▓реЙрдЧ рдЖрдгрд┐ рдмреЕрдХрдЕрдкрд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ. рд╣реЗ ConfigMap рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ postgres-operator рддреБрдореНрд╣реА рдСрдкрд░реЗрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ. рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рд╡рд░, рддреБрдореНрд╣реА рддреБрдордЪреЗ рдкрд╣рд┐рд▓реЗ PostgreSQL рдХреНрд▓рд╕реНрдЯрд░ рддреИрдирд╛рдд рдХрд░реВ рд╢рдХрддрд╛.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдордЪреЗ рдорд╛рдирдХ рдЙрдкрдпреЛрдЬрди рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
 name: staging-db
spec:
 numberOfInstances: 3
 patroni:
   synchronous_mode: true
 postgresql:
   version: "12"
 resources:
   limits:
     cpu: 100m
     memory: 1Gi
   requests:
     cpu: 100m
     memory: 1Gi
 sidecars:
 - env:
   - name: DATA_SOURCE_URI
     value: 127.0.0.1:5432
   - name: DATA_SOURCE_PASS
     valueFrom:
       secretKeyRef:
         key: password
         name: postgres.staging-db.credentials
   - name: DATA_SOURCE_USER
     value: postgres
   image: wrouesnel/postgres_exporter
   name: prometheus-exporter
   resources:
     limits:
       cpu: 500m
       memory: 100Mi
     requests:
       cpu: 100m
       memory: 100Mi
 teamId: staging
 volume:
   size: 2Gi

рд╣рд╛ рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдлреЙрд░реНрдордордзреНрдпреЗ рд╕рд╛рдЗрдбрдХрд╛рд░рд╕рд╣ 3 рдЙрджрд╛рд╣рд░рдгрд╛рдВрдЪрд╛ рдХреНрд▓рд╕реНрдЯрд░ рддреИрдирд╛рдд рдХрд░рддреЛ postgres_exporter, рдЬреНрдпрд╛рд╡рд░реВрди рдЖрдореНрд╣реА рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдШреЗрддреЛ. рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдкрд▓реА рдЗрдЪреНрдЫрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдкрдг рдЕрдХреНрд╖рд░рд╢рдГ рдЕрдорд░реНрдпрд╛рджрд┐рдд рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛.

рдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ рд╡реЗрдм рдкреНрд░рд╢рд╛рд╕рди рдкреЕрдиреЗрд▓ - postgres-operator-ui. рд╣реЗ рдСрдкрд░реЗрдЯрд░рд╕рд╣ рдпреЗрддреЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рд╣рдЯрд╡рд┐рдгреНрдпрд╛рд╕ рддрд╕реЗрдЪ рдСрдкрд░реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рдмрдирд╡рд┐рд▓реЗрд▓реНрдпрд╛ рдмреЕрдХрдЕрдкрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди
PostgreSQL рдХреНрд▓рд╕реНрдЯрд░рдЪреА рдпрд╛рджреА

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди
рдмреЕрдХрдЕрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

рдЖрдгрдЦреА рдПрдХ рдордиреЛрд░рдВрдЬрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╕рдорд░реНрдерди рдЖрд╣реЗ рдЯреАрдо API. рд╣реА рдпрдВрддреНрд░рдгрд╛ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рд╣реЛрддреЗ PostgreSQL рдордзреНрдпреЗ рднреВрдорд┐рдХрд╛, рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡рд╛рдВрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд. API рдирдВрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреА рд╕реВрдЪреА рдкрд░рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рднреВрдорд┐рдХрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

рд╕рдорд╕реНрдпрд╛ рдЖрдгрд┐ рдЙрдкрд╛рдп

рддрдерд╛рдкрд┐, рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдореБрд│реЗ рд▓рд╡рдХрд░рдЪ рдЕрдиреЗрдХ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрдорддрд░рддрд╛ рджрд┐рд╕реВрди рдЖрд▓реНрдпрд╛:

  1. nodeSelector рд╕рдорд░реНрдердирд╛рдЪрд╛ рдЕрднрд╛рд╡;
  2. рдмреЕрдХрдЕрдк рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдд рдЕрдХреНрд╖рдорддрд╛;
  3. рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд┐рддреА рдХрд╛рд░реНрдп рд╡рд╛рдкрд░рддрд╛рдирд╛, рдбреАрдлреЙрд▓реНрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджрд┐рд╕рдд рдирд╛рд╣реАрдд;
  4. рдХрдзреАрдХрдзреА рдХрд╛рдЧрджрдкрддреНрд░реЗ рдЧрд╣рд╛рд│ рдЕрд╕рддрд╛рдд рдХрд┐рдВрд╡рд╛ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЕрд╕рддрд╛рдд.

рд╕реБрджреИрд╡рд╛рдиреЗ, рддреНрдпрд╛рдкреИрдХреА рдмрд░реЗрдЪ рдирд┐рд░рд╛рдХрд░рдг рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдЪрд▓рд╛ рд╢реЗрд╡рдЯрдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛ - рдпрд╛рд╕рд╣ рд╕рдорд╕реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

рдмрд╣реБрдзрд╛, рдЖрдкрдгрд╛рд╕ рд╣реЗ рддрдереНрдп рдЖрдврд│реЗрд▓ рдХреА рдмреЕрдХрдЕрдкрдЪреА рдиреЛрдВрджрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА рдЖрдгрд┐ рдмреЕрдХрдЕрдк рдмрдХреЗрдЯрд▓рд╛ рдСрдкрд░реЗрдЯрд░ UI рд╢реА рдХрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рд╛рд╡реЗ рд╣реЗ рдиреЗрд╣рдореАрдЪ рд╕реНрдкрд╖реНрдЯ рдирд╕рддреЗ. рдХрд╛рдЧрджрдкрддреНрд░реЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рддрд╛рдд, рдкрд░рдВрддреБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдгрди рддреНрдпрд╛рдд рдЖрд╣реЗ PR:

  1. рдЧреБрдкреНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ;
  2. рдкреЕрд░рд╛рдореАрдЯрд░ рдореНрд╣рдгреВрди рдСрдкрд░реЗрдЯрд░рд▓рд╛ рдкрд╛рд╕ рдХрд░рд╛ pod_environment_secret_name рдСрдкрд░реЗрдЯрд░ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╕рд╣ CRD рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдордзреНрдпреЗ (рдЖрдкрдг рдСрдкрд░реЗрдЯрд░ рдХрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди).

рддрдерд╛рдкрд┐, рд╣реЗ рдмрд╛рд╣реЗрд░ рд╡рд│рддреЗ рдореНрд╣рдгреВрди, рд╣реЗ рд╕рдзреНрдпрд╛ рдЕрд╢рдХреНрдп рдЖрд╣реЗ. рдореНрд╣рдгреВрдирдЪ рдЖрдореНрд╣реА рдЧреЛрд│рд╛ рдХреЗрд▓реЗ рдСрдкрд░реЗрдЯрд░рдЪреА рддреБрдордЪреА рдЖрд╡реГрддреНрддреА рдХрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╣. рддреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рдЦрд╛рд▓реА рдкрд╣рд╛.

рдЖрдкрдг рдСрдкрд░реЗрдЯрд░рд▓рд╛ рдмреЕрдХрдЕрдкрд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХреЗрд▓реНрдпрд╛рд╕, рдореНрд╣рдгрдЬреЗ - wal_s3_bucket рдЖрдгрд┐ AWS S3 рдордзреНрдпреЗ рдНрдХреНрд╕реЗрд╕ рдХреА, рдирдВрддрд░ рддреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдмреЕрдХрдЕрдк рдШреЗрдИрд▓: рдХреЗрд╡рд│ рдЙрддреНрдкрд╛рджрдирд╛рддрдЪ рдирд╛рд╣реА рддрд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рджреЗрдЦреАрд▓. рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╢реЛрднрдд рдирд╡реНрд╣рддреЗ.

рд╕реНрдкрд┐рд▓реЛрдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рдд, рдЬреЗ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рддрд╛рдирд╛ PgSQL рд╕рд╛рдареА рдореВрд▓рднреВрдд рдбреЙрдХрд░ рд░реЕрдкрд░ рдЖрд╣реЗ, рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ: рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реВ рд╢рдХрддрд╛ WAL_S3_BUCKET рд░рд┐рдХреНрдд, рддреНрдпрд╛рдореБрд│реЗ рдмреЕрдХрдЕрдк рдЕрдХреНрд╖рдо рдХрд░рдгреЗ. рд╢рд┐рд╡рд╛рдп, рдорд▓рд╛ рдЦреВрдк рдЖрдирдВрдж рдЭрд╛рд▓рд╛ рддрдпрд╛рд░ рдкреАрдЖрд░, рдЬреЗ рдЖрдореНрд╣реА рд▓рдЧреЗрдЪ рдЖрдордЪреНрдпрд╛ рдХрд╛рдЯреНрдпрд╛рдд рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ. рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ enableWALArchiving: false PostgreSQL рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрд╕рд╛рдзрдирд╛рд╕рд╛рдареА.

рд╣реЛрдп, 2 рдСрдкрд░реЗрдЯрд░ рдЪрд╛рд▓рд╡реВрди рддреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рд╣реЛрддреА: рдПрдХ рд╕реНрдЯреЗрдЬрд┐рдВрдЧрд╕рд╛рдареА (рдмреЕрдХрдЕрдкрд╢рд┐рд╡рд╛рдп), рдЖрдгрд┐ рджреБрд╕рд░рд╛ рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА. рдкрдг рдЖрдореНрд╣реА рдПрдХ рдХрд░реВ рд╢рдХрд▓реЛ.

рдареАрдХ рдЖрд╣реЗ, рдЖрдореНрд╣реА S3 рд╕рд╛рдареА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд╕рд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛ рддреЗ рд╢рд┐рдХрд▓реЛ рдЖрдгрд┐ рдмреЕрдХрдЕрдк рд╕реНрдЯреЛрд░реЗрдЬрдордзреНрдпреЗ рдпреЗрдК рд▓рд╛рдЧрд▓реЗ. рдСрдкрд░реЗрдЯрд░ UI рдордзреНрдпреЗ рдмреЕрдХрдЕрдк рдкреГрд╖реНрда рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ?

Kubernetes рд╕рд╛рдареА PostgreSQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рдЖрдордЪреНрдпрд╛ рдирд┐рд╡рдбреА рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рддреБрдореНрд╣рд╛рд▓рд╛ рдСрдкрд░реЗрдЯрд░ UI рдордзреНрдпреЗ 3 рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  • SPILO_S3_BACKUP_BUCKET
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

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

рдЯреАрдореНрд╕ рдПрдкреАрдЖрдп рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреЗ рдЖрдгрд┐ рдСрдкрд░реЗрдЯрд░ рдЯреВрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рднреВрдорд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рднрд░рдкреВрд░ рд╕рдВрдзреА рд╣рд╛ рдЖрдгрдЦреА рдПрдХ рдлрд╛рдпрджрд╛ рд╣реЛрддрд╛. рддрдерд╛рдкрд┐, рддрдпрд╛рд░ рдХреЗрд▓реЗ рднреВрдорд┐рдХрд╛рдВрдирд╛ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдХреЛрдгрддреЗрд╣реА рдЕрдзрд┐рдХрд╛рд░ рдирд╡реНрд╣рддреЗ. рддреНрдпрд╛рдиреБрд╕рд╛рд░, рд╡рд╛рдЪрди рдЕрдзрд┐рдХрд╛рд░ рдЕрд╕рд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд╡реАрди рддрдХреНрддреЗ рд╡рд╛рдЪреВ рд╢рдХрдд рдирд╛рд╣реА.

рдЕрд╕ рдХрд╛? рдХреЛрдбрдордзреНрдпреЗ рддрдереНрдп рдЕрд╕реВрдирд╣реА рдЖрд╣реЗ рдЖрд╡рд╢реНрдпрдХ GRANT, рддреЗ рдиреЗрд╣рдореА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдд рдирд╛рд╣реАрдд. 2 рдкрджреНрдзрддреА рдЖрд╣реЗрдд: syncPreparedDatabases ╨╕ syncDatabases. рдж syncPreparedDatabases - рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╕реВрдирд╣реА preparedDatabases рдЖрд╣реЗ рдПрдХ рдЕрдЯ рдЖрд╣реЗ defaultRoles ╨╕ defaultUsers рднреВрдорд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдбреАрдлреЙрд▓реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реАрдд. рдЖрдореНрд╣реА рдкреЕрдЪ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЖрд╣реЛрдд рдЬреЗрдгреЗрдХрд░реВрди рд╣реЗ рдЕрдзрд┐рдХрд╛рд░ рдЖрдкреЛрдЖрдк рд▓рд╛рдЧреВ рд╣реЛрддреАрд▓.

рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реБрдзрд╛рд░рдгрд╛рдВрдордзреАрд▓ рд╢реЗрд╡рдЯрдЪрд╛ рдореБрджреНрджрд╛ - рдкреЕрдЪ, рдЬреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╕реЗрдЯрдордзреНрдпреЗ рдиреЛрдб рдЕреЕрдлрд┐рдирд┐рдЯреА рдЬреЛрдбрддреЗ. рдЖрдордЪреЗ рдХреНрд▓рд╛рдпрдВрдЯ рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рд╕реНрдкреЙрдЯ рдЙрджрд╛рд╣рд░рдгреЗ рд╡рд╛рдкрд░реВрди рдЦрд░реНрдЪ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрддрд╛рдд рдЖрдгрд┐ рддреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрд╡рд╛ рд╣реЛрд╕реНрдЯ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдирд╛рд╣реАрдд. рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рд╕рд╣рд┐рд╖реНрдгреБрддреЗрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдиреЛрдб рдЕреЕрдлрд┐рдирд┐рдЯреАрдЪреА рдЙрдкрд╕реНрдерд┐рддреА рдЕрдзрд┐рдХ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рджреЗрддреЗ.

рдХрд╛рдп рдЭрд╛рд▓рдВ?

рд╡рд░реАрд▓ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдореНрд╣реА рдЭрд╛рд▓рдБрдбреЛ рдпреЗрдереАрд▓ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░рд▓рд╛ рдЖрдкрд▓реЗ рднрд╛рдВрдбрд╛рд░, рдЬреЗрдереЗ рддреЗ рдЕрд╢рд╛ рдЙрдкрдпреБрдХреНрдд рдкреЕрдЪрд╕рд╣ рдЧреЛрд│рд╛ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдЖрдгрд┐ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕рд╛рдареА, рдЖрдореНрд╣реА рджреЗрдЦреАрд▓ рдЧреЛрд│рд╛ рдХреЗрд▓реЗ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛.

рдлреЛрд░реНрдХрдордзреНрдпреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗрд▓реНрдпрд╛ PR рдЪреА рдпрд╛рджреА:

рд╕рдореБрджрд╛рдпрд╛рдиреЗ рдпрд╛ PR рд▓рд╛ рд╕рдорд░реНрдерди рджрд┐рд▓реНрдпрд╛рд╕ рддреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рдЖрд╡реГрддреНрддреАрд╕рд╣ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдорд┐рд│рддреАрд▓ (1.6).

рдмреЛрдирд╕! рдЙрддреНрдкрд╛рджрди рд╕реНрдерд▓рд╛рдВрддрд░ рдпрд╢реЛрдЧрд╛рдерд╛

рдЬрд░ рддреБрдореНрд╣реА Patroni рд╡рд╛рдкрд░рдд рдЕрд╕рд╛рд▓, рддрд░ рдереЗрдЯ рдЙрддреНрдкрд╛рджрди рдХрдореАрдд рдХрдореА рдбрд╛рдЙрдирдЯрд╛рдЗрдорд╕рд╣ рдСрдкрд░реЗрдЯрд░рдХрдбреЗ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рд╕реНрдкрд┐рд▓реЛ рддреБрдореНрд╣рд╛рд▓рд╛ S3 рд╕реНрдЯреЛрд░реЗрдЬ рджреНрд╡рд╛рд░реЗ рд╕реНрдЯрдБрдбрдмрд╛рдп рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рд╡рд╛рд▓-рдИ, рдЬреЗрд╡реНрд╣рд╛ PgSQL рдмрд╛рдпрдирд░реА рд▓реЙрдЧ рдкреНрд░рдердо S3 рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рдкреНрд░рддрд┐рдХреГрддреАрджреНрд╡рд╛рд░реЗ рдкрдВрдк рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдкрдг рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЕрд╕рд▓реНрдпрд╛рд╕ рдХрд╛рдп рдХрд░рд╛рд╡реЗ рдирд╛рд╣реА рдЬреБрдиреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╡рд░ Wal-E рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ? рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдЖрдзреАрдЪ рдЖрд╣реЗ рд╣реЗ рд╕реБрдЪрд╡рд▓реЗ рд╣реЛрддреЗ рд╣рдм рд╡рд░.

PostgreSQL рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддреА рдмрдЪрд╛рд╡рд╛рд╕рд╛рдареА рдпреЗрддреЗ. рддрдерд╛рдкрд┐, рдЖрдореНрд╣реА рдкреНрд░рдХрд╛рд╢рдиреЗ рдЖрдгрд┐ рд╕рджрд╕реНрдпрддреНрд╡реЗ рдХрд╢реА рддрдпрд╛рд░ рдХрд░рд╛рд╡реА рдпрд╛рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг... рдЖрдордЪреА рдпреЛрдЬрдирд╛ рдлрд╕рд▓реА рд╣реЛрддреА.

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

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

рд╕реНрдерд▓рд╛рдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдкреБрдвреАрд▓ рдЖрдЬреНрдЮрд╛ рдЦрд╛рд▓реАрд▓ рд╣реЛрд╕реНрдЯ рдиреЛрдЯреЗрд╢рдиреНрд╕ рд╡рд╛рдкрд░рддреАрд▓:

  1. рдорд╛рд╕реНрдЯрд░ - рд╕реНрддреНрд░реЛрдд рд╕рд░реНрд╡реНрд╣рд░;
  2. рдкреНрд░рддрд┐рдХреГрддреА1 тАФ рдЬреБрдиреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рд╡рд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддреА;
  3. рдкреНрд░рддрд┐рдХреГрддреА2 - рдирд╡реАрди рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддреА.

рд╕реНрдерд▓рд╛рдВрддрд░ рдпреЛрдЬрдирд╛

1. рд╕реНрдХреАрдорд╛рдордзреАрд▓ рд╕рд░реНрд╡ рд╕рд╛рд░рдгреНрдпрд╛рдВрд╕рд╛рдареА рдорд╛рд╕реНрдЯрд░рд╡рд░ рд╕рджрд╕реНрдпрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛ public рдкрд╛рдпрд╛ dbname:

psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"

2. рдорд╛рд╕реНрдЯрд░рд╡рд░ рдкреНрд░рддрд┐рдХреГрддреА рд╕реНрд▓реЙрдЯ рддрдпрд╛рд░ рдХрд░рд╛:

psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"

3. рдЬреБрдиреНрдпрд╛ рдкреНрд░рддрд┐рдХреГрддреАрд╡рд░реАрд▓ рдкреНрд░рддрд┐рдХреГрддреА рдерд╛рдВрдмрд╡рд╛:

psql -h replica1 -c "select pg_wal_replay_pause();"

4. рдорд╛рд╕реНрдЯрд░рдХрдбреВрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрд░рдорд╛рдВрдХ рдорд┐рд│рд╡рд╛:

psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"

5. рдЬреБрдиреНрдпрд╛ рдкреНрд░рддрд┐рдХреГрддреАрддреВрди рдбрдВрдк рдХрд╛рдврд╛. рдЖрдореНрд╣реА рд╣реЗ рдЕрдиреЗрдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рдХрд░реВ, рдЬреЗ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рдЧрддреА рджреЗрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реЗрд▓:

pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname

6. рдирд╡реАрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдбрдВрдк рдЕрдкрд▓реЛрдб рдХрд░рд╛:

pg_restore -h replica2 -F d -j 8 -d dbname dump/

7. рдбрдВрдк рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддреАрд╡рд░ рдкреНрд░рддрд┐рдХреГрддреА рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛:

psql -h replica1 -c "select pg_wal_replay_resume();"

рен. рдирд╡реАрди рд▓реЙрдЬрд┐рдХрд▓ рдкреНрд░рддрд┐рдХреГрддреАрд╡рд░ рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

psql -h replica2 -c "create subscription oldprod connection 'host=replica1 port=5432 user=postgres password=secret dbname=dbname' publication dbname with (enabled = false, create_slot = false, copy_data = false, slot_name='repl');"

8. рдЪрд▓рд╛ рдорд┐рд│рд╡реВрдпрд╛ oid рд╕рджрд╕реНрдпрддрд╛:

psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"

9. рд╕рдордЬрд╛ рддреЗ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ oid=1000. рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рдирд╡рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрд░рдорд╛рдВрдХ рд▓рд╛рдЧреВ рдХрд░реВрдпрд╛:

psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"

10. рдкреНрд░рддрд┐рдХреГрддреА рд╕реБрд░реВ рдХрд░реВрдпрд╛:

psql -h replica2 -d dbname -c "alter subscription oldprod enable;"

11. рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рд╛, рдкреНрд░рддрд┐рдХреГрддреА рдХрд╛рд░реНрдп рдХрд░реЗрд▓:

psql -h replica2 -d dbname -c "select * from pg_replication_origin_status;"
psql -h master -d dbname -c "select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;"

12. рдкреНрд░рддрд┐рдХреГрддреА рд╕реБрд░реВ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рдмрджрд▓реВ рд╢рдХрддрд╛.

13. рдкреНрд░рддрд┐рдХреГрддреА рдЕрдХреНрд╖рдо рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдиреБрдХреНрд░рдо рджреБрд░реБрд╕реНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ wiki.postgresql.org рд╡рд░реАрд▓ рд▓реЗрдЦрд╛рдд.

рдпрд╛ рдпреЛрдЬрдиреЗрдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрд╡рд┐рдЪрдУрд╡реНрд╣рд░ рдХрдореАрддрдХрдореА рд╡рд┐рд▓рдВрдмрд╛рдиреЗ рдЭрд╛рд▓рд╛.

рдирд┐рд╖реНрдХрд░реНрд╖

Kubernetes рдСрдкрд░реЗрдЯрд░ рддреБрдореНрд╣рд╛рд▓рд╛ K8s рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рдирд┐рд░реНрдорд┐рддреАрдордзреНрдпреЗ рдХрдореА рдХрд░реВрди рд╡рд┐рд╡рд┐рдз рдХреНрд░рд┐рдпрд╛ рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рддрдерд╛рдкрд┐, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдорджрддреАрдиреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдСрдЯреЛрдореЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рддреЗ рдЕрдиреЗрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдмрд╛рд░рдХрд╛рд╡реЗ рджреЗрдЦреАрд▓ рдЖрдгреВ рд╢рдХрддрд╛рдд, рдореНрд╣рдгреВрди рдЖрдкрд▓реЗ рдСрдкрд░реЗрдЯрд░ рд╣реБрд╢рд╛рд░реАрдиреЗ рдирд┐рд╡рдбрд╛.

PostgreSQL рд╕рд╛рдареА рддреАрди рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп Kubernetes рдСрдкрд░реЗрдЯрд░ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА Zalando рдордзреАрд▓ рдкреНрд░рдХрд▓реНрдк рдирд┐рд╡рдбрд▓рд╛. рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рдЕрдбрдЪрдгреАрдВрд╡рд░ рдорд╛рдд рдХрд░рд╛рд╡реА рд▓рд╛рдЧрд▓реА, рдкрд░рдВрддреБ рдкрд░рд┐рдгрд╛рдо рдЦрд░реЛрдЦрд░рдЪ рдЖрдирдВрджрджрд╛рдпреА рд╣реЛрддрд╛, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рд╣рд╛ рдЕрдиреБрднрд╡ рдХрд╛рд╣реА рдЗрддрд░ PgSQL рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдиреНрд╕рдордзреНрдпреЗ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрдд рдЖрд╣реЛрдд. рддреБрдореНрд╣рд╛рд▓рд╛ рддрддреНрд╕рдо рдЙрдкрд╛рдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдЕрдиреБрднрд╡ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреАрд▓ рддрдкрд╢реАрд▓ рдкрд╛рд╣реВрди рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓!

PS

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

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

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