Kubernetes рдорд╛ HA рдореЛрдбрдорд╛ рдХреАрдХреНрд▓реЛрдХ рдЪрд▓рд╛рдЙрдБрджреИ

Kubernetes рдорд╛ HA рдореЛрдбрдорд╛ рдХреАрдХреНрд▓реЛрдХ рдЪрд▓рд╛рдЙрдБрджреИ

TL; рдб: рддреНрдпрд╣рд╛рдБ рдХреАрдХреНрд▓реЛрдХрдХреЛ рд╡рд┐рд╡рд░рдг рд╣реБрдиреЗрдЫ, рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд╣реБрдБрдЪ рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА, рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡рд┐рд╡рд░рдгрд╣рд░реВред

рдкрд░рд┐рдЪрдп рд░ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░рд╣рд░реВ

рдпрд╕ рд▓реЗрдЦрдорд╛, рд╣рд╛рдореА Kubernetes рдХреЛ рд╢реАрд░реНрд╖рдорд╛ Keycloak рдХреНрд▓рд╕реНрдЯрд░ рддреИрдирд╛рдд рдЧрд░реНрджрд╛ рджрд┐рдорд╛рдЧрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░рднреВрдд рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рджреЗрдЦреНрдиреЗрдЫреМрдВред

рдпрджрд┐ рддрдкрд╛рдЗрдБ Keycloak рдмрд╛рд░реЗ рдердк рдЬрд╛рдиреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд▓реЗрдЦрдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред рдЕрднреНрдпрд╛рд╕рдорд╛ рдердк рдбреБрдмреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБ рдЕрдзреНрдпрдпрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╣рд╛рдореНрд░реЛ рднрдгреНрдбрд╛рд░ рдпрд╕ рд▓реЗрдЦрдХреЛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдореЛрдбреНрдпреБрд▓рдХреЛ рд╕рд╛рде (рд▓рдиреНрдЪ рдЧрд╛рдЗрдб рддреНрдпрд╣рд╛рдБ рдЫ, рдпрд╕ рд▓реЗрдЦрд▓реЗ рдЙрдкрдХрд░рдг рд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рдПрдХ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫ, рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ).

Keycloak рдЬрд╛рднрд╛ рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реЛ рд░ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрднрд░ рдХреЛ рд╢реАрд░реНрд╖ рдорд╛ рдирд┐рд░реНрдорд┐рдд рд╡рдирдлреНрд▓рд╛рдЗред рдЫреЛрдЯрдХрд░реАрдорд╛, рдпреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдврд╛рдБрдЪрд╛ рд╣реЛ рдЬрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдорд╣рд╛рд╕рдВрдШ рд░ SSO (рдПрдХрд▓ рд╕рд╛рдЗрди-рдЕрди) рдХреНрд╖рдорддрд╛рд╣рд░реВ рджрд┐рдиреНрдЫред

рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрдвреНрди рдЖрдордиреНрддреНрд░рд┐рдд рдЧрд░реНрджрдЫреМрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд╛ рд╡рд┐рдХрд┐рдкрд┐рдбрд┐рдпрд╛ рд╡рд┐рд╕реНрддреГрдд рдмреБрдЭрд╛рдЗрдХреЛ рд▓рд╛рдЧрд┐ред

рдХреАрдХреНрд▓реЛрдХ рд╕реБрд░реБ рдЧрд░реНрджреИ

Keycloak рд▓рд╛рдИ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рджреБрдИ рдирд┐рд░рдиреНрддрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ:

  • рд╕реНрдерд╛рдкрд┐рдд рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдбрд╛рдЯрд╛рдмреЗрд╕, рдЬрд╕реНрддреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА
  • Datagrid рдХреНрдпрд╛рд╕, рдЬреБрди рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдХреНрдпрд╛рд╕ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд╕рд╛рдереИ рдХреЗрд╣реА рдЕрд▓реНрдкрдХрд╛рд▓реАрди рд░ рдмрд╛рд░рдореНрдмрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, рдЬрд╕реНрддреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░рд╣рд░реВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрдПрдХреЛ рдЫ Infinispan, рдЬреБрди рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рднрдиреНрджрд╛ рдзреЗрд░реИ рдЫрд┐рдЯреЛ рд╣реБрдиреНрдЫред рддрд░ рдХреБрдиреИ рдкрдирд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛, Infinispan рдорд╛ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рдХреНрд╖рдгрд┐рдХ рд╣реБрдиреНрдЫ - рд░ рдХреНрд▓рд╕реНрдЯрд░ рдкреБрди: рд╕реБрд░реБ рд╣реБрдБрджрд╛ рдпрд╕рд▓рд╛рдИ рдХрд╣реАрдВ рдкрдирд┐ рдмрдЪрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

рдХреАрдХреНрд▓реЛрдХрд▓реЗ рдЪрд╛рд░ рдлрд░рдХ рдореЛрдбрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ:

  • рд╕рд╛рдзрд╛рд░рдг - рдПрдХ рд░ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдлрд╛рдЗрд▓ рдорд╛рд░реНрдлрдд рдХрдиреНрдлрд┐рдЧрд░ standalone.xml
  • рдирд┐рдпрдорд┐рдд рдХреНрд▓рд╕реНрдЯрд░ (рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╡рд┐рдХрд▓реНрдк) - рд╕рдмреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓реЗ рд╕рдорд╛рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬреБрди рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рд╣реБрдиреБрдкрд░реНрдЫред рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдлрд╛рдЗрд▓рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН standalone-ha.xml, рдердк рд░реВрдкрдорд╛ рддрдкрд╛рдИрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рд╛рдЭрд╛ рдкрд╣реБрдБрдЪ рд░ рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░ рдмрдирд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред
  • рдбреЛрдореЗрди рдХреНрд▓рд╕реНрдЯрд░ - рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбрдорд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЪрд╛рдБрдбреИ рдПрдХ рджрд┐рдирдЪрд░реНрдпрд╛ рд░ рдмреЛрд░рд┐рдВрдЧ рдХрд╛рд░реНрдп рд╣реБрдиреНрдЫ рдЬрдм рдХреНрд▓рд╕реНрдЯрд░ рдмрдвреНрджреИ рдЬрд╛рдиреНрдЫ, рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджрд╛, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбрдорд╛ рд╕рдмреИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░рд┐рдиреБрдкрд░реНрдЫред рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдбреЛрдореЗрди рдореЛрдбрд▓реЗ рдХреЗрд╣реА рд╕рд╛рдЭрд╛ рднрдгреНрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╕реЗрдЯрдЕрдк рдЧрд░реЗрд░ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реЗрд░ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдЫред рдпреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдлрд╛рдЗрд▓рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН domain.xml
  • рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪ рдкреНрд░рддрд┐рдХреГрддрд┐ - рдпрджрд┐ рддрдкрд╛рдЗрдБ рдзреЗрд░реИ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ Keycloak рдЪрд▓рд╛рдЙрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдкреНрд░рд╛рдп: рд╡рд┐рднрд┐рдиреНрди рднреМрдЧреЛрд▓рд┐рдХ рд╕реНрдерд╛рдирд╣рд░реВрдорд╛ред рдпрд╕ рд╡рд┐рдХрд▓реНрдкрдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рдорд╛ рдХрд┐рдХреНрд▓реЛрдХ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рдЖрдлреНрдиреИ рдХреНрд▓рд╕реНрдЯрд░ рд╣реБрдиреЗрдЫред

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рджреЛрд╕реНрд░реЛ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ, рддреНрдпреЛ рд╣реЛ рдирд┐рдпрдорд┐рдд рдХреНрд▓рд╕реНрдЯрд░, рд░ рд╣рд╛рдореА рдбреЗрдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдХреЛ рд╡рд┐рд╖рдпрдорд╛ рдкрдирд┐ рдЕрд▓рд┐рдХрддрд┐ рдЫреБрдиреЗрдЫреМрдВ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рдпреА рджреБрдИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ Kubernetes рдорд╛ рдЪрд▓рд╛рдЙрди рдЕрд░реНрдердкреВрд░реНрдг рд╣реБрдиреНрдЫред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, Kubernetes рдорд╛ рдзреЗрд░реИ рдкреЛрдбрд╣рд░реВ (Keycloak рдиреЛрдбрд╣рд░реВ) рдХреЛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рдбреЛрдореЗрди рдХреНрд▓рд╕реНрдЯрд░ рдпреЛ рдЧрд░реНрди рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреЗрдЫреИрдиред

рдпреЛ рд╢рдмреНрджрд▓рд╛рдИ рдкрдирд┐ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХреНрд▓рд╕реНрдЯрд░ рдмрд╛рдБрдХреА рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рд╕рдБрдЧреИ рдХрд╛рдо рдЧрд░реНрдиреЗ Keycloak рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреЗрдЫ, рддреНрдпрд╣рд╛рдБ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛рдИ рд╕рдиреНрджрд░реНрдн рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

рдирд┐рдпрдорд┐рдд рдХреАрдХреНрд▓реЛрдХ рдХреНрд▓рд╕реНрдЯрд░

рдпреЛ рдореЛрдбрдорд╛ рдХреАрдХреНрд▓реЛрдХ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • рдмрд╛рд╣реНрдп рд╕рд╛рдЭрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдЖрдИрдкреА тАЛтАЛрдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рд╕рдорд░реНрдерди рд╕рдВрдЧ рдПрдХ рдЖрдиреНрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдЫ

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

рдлреЗрд▓рдУрднрд░ (HA) рдХреНрд▓рд╕реНрдЯрд░рдорд╛ Keycloak рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рд╕рдмреИ Wildfly рдХреЛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдЩ рдХреНрд╖рдорддрд╛рд╣рд░реВрдорд╛ рдХрддрд┐ рдирд┐рд░реНрднрд░ рдЫ рднрдиреЗрд░ рдЬрд╛рдиреНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред

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

  • mod_cluster: HTTP рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░рдХреЛ рд░реВрдкрдорд╛ Apache рд╕рдБрдЧ рд╕рдВрдпреЛрдЬрдирдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╣реЛрд╕реНрдЯрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди TCP рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдмрд╛рд╣реНрдп рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░рдХреЛ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

  • infinispan: рдпрд╛рддрд╛рдпрд╛рдд рддрд╣рдХреЛ рд░реВрдкрдорд╛ JGroups рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдХреНрдпрд╛рд╕ред рдердк рд░реВрдкрдорд╛, рдпрд╕рд▓реЗ рдХреНрдпрд╛рд╕ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рдмрд╛рд╣реНрдп Infinispan рдХреНрд▓рд╕реНрдЯрд░рд╕рдБрдЧ рд╕рдЮреНрдЪрд╛рд░ рдЧрд░реНрди HotRod рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫред

  • jgroups: JGroups рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореВрд╣ рд╕рдВрдЪрд╛рд░ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдирд╛рдорд┐рдд рдкрд╛рдЗрдкрд╣рд░реВрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд▓рд╛рдИ рд╕рдореВрд╣рд╣рд░реВрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рддрд╛рдХрд┐ рд╕рдЮреНрдЪрд╛рд░рдорд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рддрддрд╛, рд░ рд╡рд┐рдлрд▓рддрд╛рд╣рд░реВрдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдЬрд╕реНрддрд╛ рдЧреБрдгрд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред

рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░

Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдиреНрддреНрд░рдХрдХреЛ рд░реВрдкрдорд╛ рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрд╛, рдирд┐рдореНрди рдХреБрд░рд╛рд╣рд░реВрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдиреБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ:

Keycloak рд▓реЗ HTTP рдорд╛рд░реНрдлрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд░реНрднрд░рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреЗ рдХреНрд▓рд╛рдЗрдиреНрдЯрдХреЛ рд░рд┐рдореЛрдЯ рдареЗрдЧрд╛рдирд╛ рдХреНрд▓рд╛рдЗрдиреНрдЯ рдХрдореНрдкреНрдпреБрдЯрд░рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ IP рдареЗрдЧрд╛рдирд╛ рд╣реЛ рднрдиреА рдорд╛рдиреНрджрдЫред рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░ рд░ рдкреНрд░рд╡реЗрд╢ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд▓реЗ HTTP рд╣реЗрдбрд░рд╣рд░реВ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ X-Forwarded-For ╨╕ X-Forwarded-Proto, рд░ рдореВрд▓ рд╢реАрд░реНрд╖рдХ рдкрдирд┐ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН HOSTред рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг ingress-nginx (>реж.реиреи.реж) рдпрд╕рд▓рд╛рдИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫ

рдЭрдгреНрдбрд╛ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрджреИ proxy-address-forwarding рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реЗрд░ PROXY_ADDRESS_FORWARDING ╨▓ true рдХрд┐рдХреНрд▓реЛрдХрд▓реЗ рдпреЛ рдкреНрд░реЛрдХреНрд╕реА рдкрдЫрд╛рдбрд┐ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ рднрдиреНрдиреЗ рдмреБрдЭрд╛рдЙрдБрдЫред

рддрдкрд╛рдИрдВрд▓реЗ рдкрдирд┐ рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЯрд╛рдБрд╕рд┐рдиреЗ рд╕рддреНрд░рд╣рд░реВ рдкреНрд░рд╡реЗрд╢ рдорд╛ред Keycloak рд▓реЗ рд╣рд╛рд▓рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рддреНрд░ рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╡рд┐рддрд░рд┐рдд Infinispan рдХреНрдпрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдХреНрдпрд╛рд╕рд╣рд░реВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдПрдХрд▓ рдорд╛рд▓рд┐рдХрд╕рдБрдЧ рд╕рдЮреНрдЪрд╛рд▓рди рд╣реБрдиреНрдЫрдиреН, рдЕрдиреНрдп рд╢рдмреНрджрд╣рд░реВрдорд╛, рддреНрдпреЛ рд╡рд┐рд╢реЗрд╖ рд╕рддреНрд░ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдХреЗрд╣реА рдиреЛрдбрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдЕрдиреНрдп рдиреЛрдбрд╣рд░реВрд▓реЗ рддреНрдпрд╕ рд╕рддреНрд░рдорд╛ рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗ рдЯрд╛рдврд╛рдмрд╛рдЯ рд╕реЛрдзреНрдиреБ рдкрд░реНрдЫред

рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдХрд╛рдЧрдЬрд╛рддрдХреЛ рд╡рд┐рдкрд░рд┐рдд, рдХреБрдХреА рдирд╛рдордХреЛ рд╕рд╛рде рд╕рддреНрд░ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдирд╛рд▓реЗ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдХрд╛рдо рдЧрд░реЗрди AUTH_SESSION_IDред рдХреАрдХреНрд▓реЛрдХрдорд╛ рд░рд┐рдбрд┐рд░реЗрдХреНрдЯ рд▓реБрдк рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдЯрд╛рдБрд╕рд┐рдиреЗ рд╕рддреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рдлрд░рдХ рдХреБрдХреА рдирд╛рдо рдЫрдиреЛрдЯ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫреМрдВред

Keycloak рд▓реЗ рдиреЛрдбрдХреЛ рдирд╛рдо рдкрдирд┐ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрджрдЫ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдпреЛ AUTH_SESSION_ID, рд░ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрд▓реЗ рд╕рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рд╣реБрдирд╛рд▓реЗ, рддреА рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд╣реБрдиреБрдкрд░реНрдЫ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдиреНрдз рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдЕрд▓рдЧ рд░ рдЕрджреНрд╡рд┐рддреАрдп рдиреЛрдб рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ред рд░рд╛рдЦреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫ JAVA_OPTS рдорд╛рдкрджрдгреНрдбрд╣рд░реВ jboss.node.name ╨╕ jboss.tx.node.id рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдЕрджреНрд╡рд┐рддреАрдп - рддрдкрд╛рдИрд▓реЗ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреЛрдбрдХреЛ рдирд╛рдо рд░рд╛рдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреЛрдб рдирд╛рдо рд░рд╛рдЦреНрдиреБрднрдпреЛ рднрдиреЗ, jboss рдЪрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ 23 рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рд╕реАрдорд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН, рддреНрдпрд╕реИрд▓реЗ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рднрдиреНрджрд╛ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред

рдЕрд░реНрдХреЛ рд░реЗрдХ - рдпрджрд┐ рдкреЛрдб рдореЗрдЯрд╛рдЗрдпреЛ рд╡рд╛ рдкреБрди: рд╕реБрд░реБ рднрдпреЛ рднрдиреЗ, рдпрд╕рдХреЛ рдХреНрдпрд╛рд╕ рд╣рд░рд╛рдПрдХреЛ рдЫред рдпрд╕рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рд╕рдмреИ рдХреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреНрдпрд╛рд╕ рдорд╛рд▓рд┐рдХрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХрдореНрддрд┐рдорд╛ рджреБрдИрдорд╛ рд╕реЗрдЯ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ, рддрд╛рдХрд┐ рдХреНрдпрд╛рд╕рдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд░рд╣рдиреЗрдЫред рдЪрд▓рд╛рдЙрдиреБ рдиреИ рд╕рдорд╛рдзрд╛рди рд╣реЛ Wildfly рдХреЛ рд▓рд╛рдЧрд┐ рд▓рд┐рдкрд┐ рдкреЛрдб рд╕реБрд░реБ рдЧрд░реНрджрд╛, рдпрд╕рд▓рд╛рдИ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рд░рд╛рдЦреНрджреИ /opt/jboss/startup-scripts рдХрдиреНрдЯреЗрдирд░ рдорд╛:

рд▓рд┐рдкрд┐ рд╕рд╛рдордЧреНрд░реА

embed-server --server-config=standalone-ha.xml --std-out=echo
batch

echo * Setting CACHE_OWNERS to "${env.CACHE_OWNERS}" in all cache-containers

/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})

run-batch
stop-embedded-server

рддреНрдпрд╕рдкрдЫрд┐ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдорд╛рди рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН CACHE_OWNERS рдЖрд╡рд╢реНрдпрдХ рдХреЛ рд▓рд╛рдЧреАред

IP рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рд╕рдорд░реНрдерди рд╕рдВрдЧ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХ CNI рдХреЛ рд░реВрдкрдорд╛ Weavenet рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рддреБрд░реБрдиреНрддреИ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫ - рд░ рддрдкрд╛рдЗрдБрдХреЛ рдХреАрдХреНрд▓реЛрдХ рдиреЛрдбрд╣рд░реВ рд╕реБрд░реБ рд╣реБрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ рдПрдХ рдЕрд░реНрдХрд╛рд▓рд╛рдИ рджреЗрдЦреНрдиреЗрдЫрдиреНред

рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рддрдкрд╛рдЗрдБрдХреЛ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ ip multicast рд╕рдорд░реНрдерди рдЫреИрди рднрдиреЗ, рддрдкрд╛рдЗрдБ рдиреЛрдбрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди JGroups рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдкрд╣рд┐рд▓реЛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╣реЛ KUBE_DNSрдЬреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ headless service Keycloak рдиреЛрдбрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ JGroups рд▓рд╛рдИ рдиреЛрдбрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╕реЗрд╡рд╛рдХреЛ рдирд╛рдо рдорд╛рддреНрд░ рдкрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЕрд░реНрдХреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╣реЛ KUBE_PING, рдЬрд╕рд▓реЗ рдиреЛрдбрд╣рд░реВ рдЦреЛрдЬреНрди API рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫ (рддрдкрд╛рдИрдБрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ serviceAccount рдЕрдзрд┐рдХрд╛рд░ рд╕рдВрдЧ list ╨╕ get, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдкреЛрдбрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН serviceAccount).

JGroups рд▓реЗ рдиреЛрдбрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреЗ рддрд░рд┐рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реЗрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ JGROUPS_DISCOVERY_PROTOCOL ╨╕ JGROUPS_DISCOVERY_PROPERTIESред рдХреЛ рд▓рд╛рдЧреА KUBE_PING рддрдкрд╛рдИрдВрд▓реЗ рд╕реЛрдзреЗрд░ рдкреЛрдбрд╣рд░реВ рдЪрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ namespace ╨╕ labels.

я╕П рдпрджрд┐ рддрдкрд╛рдЗрдБ рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рд░ рдПрдЙрдЯрд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рджреБрдИ рд╡рд╛ рдмрдвреА рдХреАрдХреНрд▓реЛрдХ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реБрдиреНрдЫ (рдиреЗрдорд╕реНрдкреЗрд╕рдорд╛ рдПрдЙрдЯрд╛ рднрдиреМрдВред production, рджреЛрд╕реНрд░реЛ - staging) - рдПрдЙрдЯрд╛ рдХреАрдХреНрд▓реЛрдХ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдиреЛрдбрд╣рд░реВ рдЕрд░реНрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╕рд╛рдореЗрд▓ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдЪрд░ рд╕реЗрдЯ рдЧрд░реЗрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рдареЗрдЧрд╛рдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реЛрд╕реНjboss.default.multicast.address ╨╕ jboss.modcluster.multicast.address ╨▓ JAVA_OPTS.

рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪ рдкреНрд░рддрд┐рдХреГрддрд┐

Kubernetes рдорд╛ HA рдореЛрдбрдорд╛ рдХреАрдХреНрд▓реЛрдХ рдЪрд▓рд╛рдЙрдБрджреИ

рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА

Keycloak рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдХреЗрдиреНрджреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЕрд▓рдЧ рдЗрдиреНрдлрд┐рдирд┐рд╕реНрдкреНрдпрд╛рди рдХреНрдпрд╛рд╕ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдЬрд╣рд╛рдБ Keycloak рдиреЛрдбрд╣рд░реВ рдорд┐рд▓реЗрд░ рдмрдиреЗрдХрд╛ Keycloack рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рддрд░ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВрдорд╛ Keycloak рдиреЛрдбрд╣рд░реВ рдмреАрдЪ рдХреБрдиреИ рднрд┐рдиреНрдирддрд╛ рдЫреИрдиред

рдХреАрдХреНрд▓реЛрдХ рдиреЛрдбрд╣рд░реВрд▓реЗ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪ рд╕рдЮреНрдЪрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рд╣реНрдп рдЬрд╛рднрд╛ рдбрд╛рдЯрд╛ рдЧреНрд░рд┐рдб (рдЗрдиреНрдлрд┐рдирд┐рд╕реНрдкрд╛рди рд╕рд░реНрднрд░) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХрд▓ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдЧрд░реНрджрдЫ Infinispan HotRod.

Infinispan рдХреНрдпрд╛рд╕рд╣рд░реВ рд╡рд┐рд╢реЗрд╖рддрд╛рд╕рдБрдЧ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдиреБрдкрд░реНрдЫ remoteStore, рддрд╛рдХрд┐ рдбрд╛рдЯрд╛ рдЯрд╛рдврд╛рдмрд╛рдЯ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рдЕрд░реНрдХреЛ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рдорд╛, рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ) рдХреНрдпрд╛рд╕ред рддреНрдпрд╣рд╛рдБ JDG рд╕рд░реНрднрд░рд╣рд░реВ рдмреАрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдиреНрдлрд┐рдирд┐рд╕реНрдкрди рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЫрдиреН, рддрд╛рдХрд┐ рд╕рд╛рдЗрдЯрдорд╛ JDG1 рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ред site1 рд╕рд╛рдЗрдЯрдорд╛ JDG2 рдорд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЧрд░рд┐рдиреЗрдЫ site2.

рд░ рдЕрдиреНрддрдорд╛, рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ JDG рд╕рд░реНрднрд░рд▓реЗ рдЧреНрд░рд╛рд╣рдХ рдЬрдбрд╛рдирд╣рд░реВ рдорд╛рд░реНрдлрдд рдпрд╕рдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдХреАрдХреНрд▓реЛрдХ рд╕рд░реНрднрд░рд╣рд░реВрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрджрдЫ, рдЬреБрди HotRod рдкреНрд░реЛрдЯреЛрдХрд▓рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛред рдХрд┐рдХреНрд▓реЛрдХ рдиреЛрдбрд╣рд░реВ рд╕рдХреНрд░рд┐рдп рдЫрдиреН site2 рддрд┐рдиреАрд╣рд░реВрдХреЛ Infinispan рдХреНрдпрд╛рд╕рд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ Keycloak рдиреЛрдбрд╣рд░реВрдорд╛ рдкрдирд┐ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреНрдЫ site2.

рдХреЗрд╣рд┐ рдХреНрдпрд╛рд╕рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдмреНрдпрд╛рдХрдЕрдкрд╣рд░реВ рдирдЧрд░реНрди рд░ Infinispan рд╕рд░реНрднрд░ рдорд╛рд░реНрдлрдд рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдирдмрд╛рдЯ рдЬреЛрдЧрд┐рди рдкрдирд┐ рд╕рдореНрднрд╡ рдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕реЗрдЯрд┐рдЩ рд╣рдЯрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ remote-store рд╡рд┐рд╢рд┐рд╖реНрдЯ Infinispan рдХреНрдпрд╛рд╕ (рдлрд╛рдЗрд▓рдорд╛ standalone-ha.xml), рдЬрд╕ рдкрдЫрд┐ рдХреЗрд╣рд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ replicated-cache Infinispan рд╕рд░реНрднрд░ рд╕рд╛рдЗрдбрдорд╛ рдкрдирд┐ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред

рдХреНрдпрд╛рд╕рд╣рд░реВ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

Keycloak рдорд╛ рджреБрдИ рдкреНрд░рдХрд╛рд░рдХрд╛ рдХреНрдпрд╛рд╕рд╣рд░реВ рдЫрдиреН:

  • рд╕реНрдерд╛рдирд┐рдпред рдпреЛ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЫреЗрдЙрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд▓реЛрдб рдХрдо рдЧрд░реНрди, рд╕рд╛рдереИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд▓рдореНрдмрддрд╛ рдХрдо рдЧрд░реНрди рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреНрдпрд╛рд╕рд▓реЗ рдХреНрд╖реЗрддреНрд░, рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ, рднреВрдорд┐рдХрд╛рд╣рд░реВ, рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫред рдХреНрдпрд╛рд╕ рдХрд┐рдХреНрд▓реЛрдХ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдЕрдВрд╢ рднрдП рддрд╛рдкрдирд┐ рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреНрдпрд╛рд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╣реБрдБрджреИрдиред рдпрджрд┐ рдХреНрдпрд╛рд╕рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд░рд┐рд╡рд░реНрддрди рднрдпреЛ рднрдиреЗ, рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдиреНрджреЗрд╢ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдмрд╛рдБрдХреА рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдкрдард╛рдЗрдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреНрдпрд╛рд╕рдмрд╛рдЯ рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реБрдиреНрдЫред рд╡рд┐рд╡рд░рдг рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН work рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдердк рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рддрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

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

Infinispan рдХреНрдпрд╛рд╕рд╣рд░реВ

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

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

рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдХреЛ рдХреНрдпрд╛рд╕рд┐рдЩ рд░ рдПрдЬрд┐рдЩ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рднрд╛рд░ рдХрдо рдЧрд░реНрди рдХрд╛рдо рдЧрд░реНрджрдЫред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреНрдпрд╛рд╕рд┐рдЩрд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕реБрдзрд╛рд░ рдЧрд░реНрдЫ, рддрд░ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдердкреНрдЫред рдпрджрд┐ рдПрдЙрдЯрд╛ рдХрд┐рдХреНрд▓реЛрдХ рд╕рд░реНрднрд░рд▓реЗ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрдЫ рднрдиреЗ, рдЕрдиреНрдп рд╕рд░реНрднрд░рд╣рд░реВрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░рд┐рдиреБрдкрд░реНрдЫ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХреНрдпрд╛рд╕рдорд╛ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрди рд╕рдХреВрдиреНред рдХреАрдХреНрд▓реЛрдХрд▓реЗ рд╕реНрдерд╛рдиреАрдп рдХреНрдпрд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ realms, users ╨╕ authorization рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдХреНрдпрд╛рд╕ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ред

рддреНрдпрд╣рд╛рдБ рдПрдХ рдЕрд▓рдЧ рдХреНрдпрд╛рд╕ рдкрдирд┐ рдЫ work, рдЬреБрди рд╕рдмреИ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВрдорд╛ рджреЛрд╣реЛрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯ рдХреБрдиреИ рдкрдирд┐ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджреИрди, рддрд░ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбрд╣рд░реВрдорд╛ рдбрд╛рдЯрд╛ рдПрдЬрд┐рдВрдЧрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрди рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫред рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рд╣реБрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, Keycloak рдиреЛрдбрд▓реЗ рдпрд╕рдХреЛ рдбрд╛рдЯрд╛ рд╕реЗрдиреНрдЯрд░рдорд╛ рд░рд╣реЗрдХрд╛ рдЕрдиреНрдп рдиреЛрдбрд╣рд░реВ, рд╕рд╛рдереИ рдЕрдиреНрдп рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВрдорд╛ рд░рд╣реЗрдХрд╛ рдиреЛрдбрд╣рд░реВрдорд╛ рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрдЫред рдпрд╕реНрддреЛ рд╕рдиреНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдкрдЫрд┐, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрд▓реЗ рдпрд╕рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХреНрдпрд╛рд╕рд╣рд░реВрдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдбрд╛рдЯрд╛ рдЦрд╛рд▓реА рдЧрд░реНрджрдЫред

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░рд╣рд░реВред рдирд╛рдо рд╕рд╣рд┐рдд рдХреНрдпрд╛рд╕ sessions, clientSessions, offlineSessions ╨╕ offlineClientSessions, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдбрд╛рдЯрд╛ рд╕реЗрдиреНрдЯрд░рд╣рд░реВ рдмреАрдЪ рджреЛрд╣реЛрд░рд┐рдиреНрдЫ рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╕рдХреНрд░рд┐рдп рд╣реБрдБрджрд╛ рд╕рдХреНрд░рд┐рдп рд╣реБрдиреЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫред рдпреА рдХреНрдпрд╛рд╕рд╣рд░реВрд▓реЗ рдЕрдиреНрддрд┐рдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдмрд╛рдЯ HTTP рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫ, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рдЯрд╛рдБрд╕рд┐рдиреЗ рд╕рддреНрд░рд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрдиреН рд░ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╣реБрдиреБрдкрд░реНрдЫред

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

Infinispan рдХреНрд▓рд╕реНрдЯрд░ рд░реЛрд▓ рдЖрдЙрдЯ рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рд╕реЗрдЯрд┐рдЩ рдлрд╛рдЗрд▓рдорд╛ рдХреНрдпрд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

<replicated-cache-configuration name="keycloak-sessions" mode="ASYNC" start="EAGER" batching="false">
</replicated-cache-configuration>

<replicated-cache name="work" configuration="keycloak-sessions" />
<replicated-cache name="sessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineSessions" configuration="keycloak-sessions" />
<replicated-cache name="actionTokens" configuration="keycloak-sessions" />
<replicated-cache name="loginFailures" configuration="keycloak-sessions" />
<replicated-cache name="clientSessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineClientSessions" configuration="keycloak-sessions" />

рддрдкрд╛рдИрдВрд▓реЗ рдХрд┐рдХреНрд▓реЛрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐ Infinispan рдХреНрд▓рд╕реНрдЯрд░ рдХрдиреНрдлрд┐рдЧрд░ рд░ рд╕реБрд░реБ рдЧрд░реНрдиреБрдкрд░реНрдЫ

рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ remoteStore рдХреАрдХреНрд▓реЛрдХ рдХреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рдЬреБрди рдЕрдШрд┐рд▓реНрд▓реЛ рдПрдХ рдЬрд╕реНрддреИ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред CACHE_OWNERS, рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░реНрди рд░ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рд░рд╛рдЦреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ /opt/jboss/startup-scripts:

рд▓рд┐рдкрд┐ рд╕рд╛рдордЧреНрд░реА

embed-server --server-config=standalone-ha.xml --std-out=echo
batch

echo *** Update infinispan subsystem ***
/subsystem=infinispan/cache-container=keycloak:write-attribute(name=module, value=org.keycloak.keycloak-model-infinispan)

echo ** Add remote socket binding to infinispan server **
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-cache:add(host=${remote.cache.host:localhost}, port=${remote.cache.port:11222})

echo ** Update replicated-cache work element **
/subsystem=infinispan/cache-container=keycloak/replicated-cache=work/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=work, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)

/subsystem=infinispan/cache-container=keycloak/replicated-cache=work:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache sessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=sessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache offlineSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=offlineSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache clientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=clientSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache offlineClientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=offlineClientSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache loginFailures element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=loginFailures, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache actionTokens element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    cache=actionTokens, 
    remote-servers=["remote-cache"], 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache authenticationSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=statistics-enabled,value=true)

echo *** Update undertow subsystem ***
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)

run-batch
stop-embedded-server

рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН JAVA_OPTS HotRod рдЪрд▓рд╛рдЙрди рдХреАрдХреНрд▓реЛрдХ рдиреЛрдбрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐: remote.cache.host, remote.cache.port рд░ рд╕реЗрд╡рд╛ рдирд╛рдо jboss.site.name.

рд▓рд┐рдЩреНрдХ рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдЧрдЬрд╛рдд

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди