TL; DR: เบเบฐเบกเบตเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเปเบฝเบงเบเบฑเบ Keycloak, เบฅเบฐเบเบปเบเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเปเบซเบผเปเบเปเบเบตเบ, เบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบชเปเบฒเบเบเบฒเบเปเบ, เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒ.
เบเบฒเบเปเบเบฐเบเปเบฒเปเบฅเบฐเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบตเปเบชเปเบฒเบเบฑเบ
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบทเปเบเบเบฒเบเบเบตเปเบเปเบญเบเบเบทเปเปเบงเปเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเปเบเปเบเบธเปเบก Keycloak เบขเบนเปเปเบเบดเบ Kubernetes.
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบฎเบนเปเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบ Keycloak, เบญเปเบฒเบเบญเบตเบเปเบชเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบปเบเบเบงเบฒเบก. เปเบเบทเปเบญเบเบฒเบเปเบเบฑเบ immersed เบซเบผเบฒเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบถเบเบชเบฒ
Keycloak เปเบกเปเบเบฅเบฐเบเบปเบเบเบตเปเบชเบปเบกเบเบนเบเปเบเบเบเบตเปเบเบฝเบเปเบ Java เปเบฅเบฐเบชเปเบฒเบเบขเบนเปเปเบเบดเบเบชเบธเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ
เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเปเบฒเบเบญเปเบฒเบเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ
เบเบฒเบเปเบเบตเบเบเบปเบง Keycloak
Keycloak เบเปเบญเบเบเบฒเบเบชเบญเบเปเบซเบผเปเบเบเปเปเบกเบนเบเบเบตเปเบเบปเบเบเปเบฒเบเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบ:
- เบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเปเปเบเบทเปเบญเปเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเบฑเปเบเปเบงเป เปเบเบฑเปเบ: เบเปเปเบกเบนเบเบเบนเปเปเบเป
- Datagrid cache, เปเบเบดเปเบเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญ cache เบเปเปเบกเบนเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบ metadata เบชเบฑเปเบเปเบฅเบฐเบเบฒเบเบเปเบฝเบเปเบเบเปเบฅเบทเปเบญเบเป, เปเบเบฑเปเบ: เบเบญเบเบเบฐเบเบธเบกเบเบนเปเปเบเป. เบเบฐเบเบดเบเบฑเบ
Infinispan , เปเบเบดเปเบเบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบกเปเบเปเบงเบเบงเปเบฒเบเบฒเบเบเปเปเบกเบนเบ. เปเบเปเปเบเบเปเบฅเบฐเบเบตเปเบเบเปเปเบเบฒเบก, เบเปเปเบกเบนเบเบเบตเปเบเบฑเบเบเบถเบเปเบงเปเปเบ Infinispan เปเบกเปเบ ephemeral - เปเบฅเบฐเบกเบฑเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเบเบธเบเบเปเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบธเปเบกเบเบทเบเปเบฅเบตเปเบกเบเบปเปเบเปเบซเบกเป.
Keycloak เปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบชเบตเปเปเบซเบกเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ:
- เบเปเบฒเบกเบฐเบเบฒ - เบซเบเบถเปเบโเปเบฅเบฐโเบเบฝเบโเปเบเปโเบซเบเบถเปเบโเบเบฐโเบเบงเบโเบเบฒเบโ, configured เบเปเบฒเบโเปเบเบฅโเปโ standalone.xml
- เบเบธเปเบกเบเบปเบเบเบฐเบเบด (เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบกเบตเบชเบนเบ) - เบเบฐเบเบงเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเปเบญเบเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฝเบงเบเบฑเบ, เปเบเบดเปเบเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบ synchronized เบเปเบงเบเบเบปเบเปเบญเบ. เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบทเบเปเบเบฑเบเปเบงเปเปเบเปเบเบฅเป standalone-ha.xml, เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบเปเบเบเบฑเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐ load balancer.
- เบเบธเปเบกเปเบเปเบกเบ โ เบเบฒเบเปเบฅเบตเปเบกเบเบธเปเบกเบขเบนเปเปเบเปเปเบเบเบปเบเบเบฐเบเบดเบขเปเบฒเบเบงเปเบญเบเปเบงเบเบฐเบเบฒเบเปเบเบฑเบเบงเบฝเบเบเบฐเบเบณ เปเบฅเบฐเปเปเบฒเปเบเบทเปเบญเปเบกเบทเปเบญเบเบธเปเบกเปเบเบตเบเปเบซเบเปเบเบถเปเบ, เปเบเบฒเบฐเบงเปเบฒเบเบธเบเปเบเบฑเปเบเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒ, เบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเบเปเบปเบเบเบฐเบเปเบญเบเบเบทเบเปเบฎเบฑเบเบขเบนเปเปเบเปเบเปเบฅเบฐ node เบเบญเบเบเบธเปเบก. เบฎเบนเบเปเบเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเปเบเปเบกเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบตเปเปเบเปเบเบเบฑเบ เปเบฅเบฐเปเบเบตเบเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒ. เบเบฒเบเบเบฑเปเบเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเบเบทเบเปเบเบฑเบเปเบงเปเปเบเปเบเบฅเป domain.xml
- เบเบฒเบเบเปเบฒเบฅเบญเบเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ โ เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเปเบฒเบโเบเปเบญเบโเบเบฒเบโเบเบตเปโเบเบฐโเบเปเบฒโเปเบเบตเบโเบเบฒเบ Keycloak เปเบโเบเบธเปเบกโเบเบญเบโเบชเบนเบโเบเปเปโเบกเบนเบโเบเปเบฒโเบเบงเบโเบซเบเบถเปเบโ, เบชเปเบงเบโเบซเบผเบฒเบโเบกเบฑเบโเบเบฐโเบขเบนเปโเปเบโเบเบตเปโเบเบฑเปเบโเบเบนเบกโเบชเบฒเบโเบเบตเปโเปเบเบโเบเปเบฒเบโเบเบฑเบโ. เปเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเป, เปเบเปเบฅเบฐเบชเบนเบเบเปเปเบกเบนเบเบเบฐเบกเบตเบเบธเปเบกเบเบญเบเบเบปเบเปเบญเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบ Keycloak.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเบชเบญเบ, เบเบฑเปเบเปเบกเปเบ เบเบธเปเบกเบเบปเบเบเบฐเบเบด, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเปเบเบฐเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบญเบเบเบฒเบเบเปเบฒเบฅเบญเบเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบชเบปเบกเปเบซเบเบชเบปเบกเบเบปเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบชเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบ Kubernetes. เปเบเบเบเบต, เปเบ Kubernetes เบเปเปเบกเบตเบเบฑเบเบซเบฒเบเบฑเบ synchronizing เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบซเบผเบฒเบ pods (Keycloak nodes), เบเบฑเปเบเบเบฑเปเบ. เบเบธเปเบกเปเบเปเบกเบ เบกเบฑเบเบเบฐเบเปเปเบเบฒเบเบซเบผเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบฐเบฅเบธเบเบฒเบชเบฑเบเปเบเบเบงเปเบฒเบเปเบฒเบชเบฑเบ เบเบธเปเบกเบเปเบฒเบ เบชเปเบฒเบฅเบฑเบเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบฐเบเปเบฒเปเบเปเบเบฑเบเบเบธเปเบกเบเบญเบ Keycloak nodes เบเบตเปเปเบฎเบฑเบเบงเบฝเบเบฎเปเบงเบกเบเบฑเบ, เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบญเปเบฒเบเบญเบตเบเปเบเบดเบเบเบธเปเบก Kubernetes.
เบเบธเปเบก Keycloak เบเบปเบเบเบฐเบเบด
เปเบเบทเปเบญเปเบเบตเบเปเบเป Keycloak เปเบเปเบซเบกเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบ:
- เบเบฑเปเบเบเปเบฒเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเปเบเบเบฑเบเบเบฒเบเบเบญเบ
- เบเบดเบเบเบฑเปเบ load balancer
- เบกเบตเปเบเบทเบญเบเปเบฒเบเบเบฒเบเปเบเบเบตเปเบฎเบญเบเบฎเบฑเบ IP multicast
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเบเบถเบเบชเบฒเบซเบฒเบฅเบทเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเปเบฒเบเบเบฑเปเบเบเบฒเบเบเปเปเบกเบนเบเบเบฒเบเบเบญเบ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเปเปเปเบกเปเบเบเบธเบเบเบฐเบชเบปเบเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบตเป. เปเบซเปเบชเบปเบกเบกเบธเบเบงเปเบฒเบกเบตเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเบเปเบญเบเปเบเบซเบเบถเปเบ - เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบธเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบกเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเบเปเปเบกเบนเบเบเบตเปเปเบชเปเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก.
เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบเบตเบเบถเปเบเบงเปเบฒ Keycloak เปเบฎเบฑเบเบงเบฝเบเปเบเบงเปเบเปเบเบเบธเปเบกเบเบตเปเบฅเบปเปเบกเปเบซเบฅเบง (HA), เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบเบตเปเบเบฐเบฎเบนเปเบงเปเบฒเบกเบฑเบเบซเบผเบฒเบเบเบฒเบเปเบเปเบกเปเบเบเบถเปเบเบเบฑเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบเบธเปเบก Wildfly.
Wildfly เปเบเปเบฅเบฐเบเบปเบเบเปเบญเบเบซเบผเบฒเบ, เบเบฒเบเบชเปเบงเบเบเบญเบเบเบงเบเบกเบฑเบเบเบทเบเปเบเปเปเบเบฑเบเบเบปเบงเบเบธเปเบเบเปเบฝเบเบเบฒเบเปเบซเบผเบ, เบเบฒเบเบญเบฑเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบเบปเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบ. เบเบปเบงเบเบธเปเบเบเปเบฝเบเบเบฒเบเปเบซเบผเบเบเบฐเบฎเบฑเบเบเบฐเบเบฑเบเบเบงเบฒเบกเบเปเบญเบกเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ เปเบกเบทเปเบญ node cluster เปเบซเบผเบเปเบเบตเบ, เปเบฅเบฐเบเบงเบฒเบกเบเบปเบเบเบฒเบเบเบงเบฒเบกเบเบดเบ เบฎเบฑเบเบเบฐเบเบฑเบเบเบงเบฒเบกเบเปเบญเบกเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบ node cluster เบฅเบปเปเบกเปเบซเบฅเบง. เบเบฒเบเบฅเบฐเบเบปเบเบเปเบญเบเปเบซเบผเบปเปเบฒเบเบตเป:
-
mod_cluster
: เปเบฎเบฑเบเบงเบฝเบเบฎเปเบงเบกเบเบฑเบเบเบฑเบ Apache เปเบเบฑเบ HTTP load balancer, เบเบถเปเบเบเบฑเบ TCP multicast เปเบเบทเปเบญเบเบญเบเบซเบฒเปเบเบปเปเบฒเบเบฒเบเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ. เบชเบฒเบกเบฒเบเบเบทเบเปเบเบเบเบตเปเบเปเบงเบเบเบปเบงเบเบธเปเบเบเปเบฝเบเบเบฒเบเบเบญเบ. -
infinispan
: เปเบเบชเบเบตเปเปเบเบเบขเบฒเบเปเบเบเปเบเปเบเปเบญเบ JGroups เปเบเบฑเบเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเบเบญเบ HotRod เปเบเบทเปเบญเบเบดเบเบเปเปเบชเบทเปเบชเบฒเบเบเบฑเบเบเบธเปเบก Infinispan เบเบฒเบเบเบญเบเปเบเบทเปเบญ synchronize เปเบเบทเปเบญเปเบ cache. -
jgroups
: เบชเบฐเบซเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบชเบทเปเบชเบฒเบเบเบธเปเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเบกเบตเบชเบนเบเปเบเบเบญเบตเบเปเบชเปเบเปเบญเบเบเบฒเบ JGroups. เบเปเปเบเบตเปเบกเบตเบเบทเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบธเปเบกเปเบเบทเปเบญเบกเบเปเปเปเบเบปเปเบฒเปเบเปเบเบเบธเปเบกเปเบเบทเปเบญเปเบซเปเบเบฒเบเบชเบทเปเบชเบฒเบเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเปเบเบฑเปเบ: เบเบงเบฒเบกเบซเบเปเบฒเปเบเบทเปเบญเบเบท, เบเบงเบฒเบกเปเบเบฑเบเบฅเบฐเบเบฝเบเบฎเบฝเบเบฎเปเบญเบ, เปเบฅเบฐเบเบงเบฒเบกเบญเปเบญเบเปเบซเบงเบเปเปเบเบฑเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบฅเบง.
Load Balancer
เปเบกเบทเปเบญเบเบดเบเบเบฑเปเบเปเบเบทเปเบญเบเบเบธเปเบเบเปเบฝเบเปเบเบฑเบเบเบปเบงเบเบงเบเบเบธเบก ingress เปเบเบเบธเปเบก Kubernetes, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบเบตเปเบเบฐเบฎเบฑเบเบชเบฒเบชเบดเปเบเบเปเปเปเบเบเบตเปเบขเบนเปเปเบเปเบ:
Keycloak เบชเบปเบกเบกเบธเบเบงเปเบฒเบเบตเปเบขเบนเปเบซเปเบฒเบเปเบเบชเบญเบเบซเบผเบตเบเบเบญเบเบฅเบนเบเบเปเบฒเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบ HTTP เบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบเบเบงเบเบชเบญเบเปเบกเปเบเบเบตเปเบขเบนเป IP เบเบตเปเปเบเปเบเบดเบเบเบญเบเบเบญเบกเบเบดเบงเปเบเบตเบฅเบนเบเบเปเบฒ. เบเบฒเบเบเบฑเปเบเบเปเบฒ Balancer เปเบฅเบฐ ingress เบเบงเบเบเบฑเปเบเบชเปเบงเบเบซเบปเบง HTTP เบขเปเบฒเบเบเบทเบเบเปเบญเบ X-Forwarded-For
ะธ X-Forwarded-Proto
, เปเบฅเบฐเบเบฑเบเบเบฑเบเบเบถเบเบเบทเปเบเบปเปเบเบชเบฐเบเบฑเบ HOST
. เบชเบฐโเบเบฑเบโเบซเบฅเปเบฒโเบชเบธเบ ingress-nginx
(>0.22.0)
เบเบฒเบเปเบเบตเบเปเบเปเบเบธเบ proxy-address-forwarding
เปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก PROXY_ADDRESS_FORWARDING
ะฒ true
เปเบซเป Keycloak เปเบเบปเปเบฒเปเบเบงเปเบฒเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบทเปเบญเบเบซเบผเบฑเบเบเบปเบงเปเบเบ.
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบเบตเบเปเบเป เปเบเบเบเบฑเบเบซเบเบฝเบง เปเบ ingress. Keycloak เปเบเปเปเบเบ Infinispan เบเบตเปเปเบเบเบขเบฒเบเปเบเบทเปเบญเปเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเปเบเบเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบเบเบฐเบเบธเบเบฑเบเปเบฅเบฐเปเบเบเบเบฑเบเบเบนเปเปเบเป. Caches เบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเปเบเบปเปเบฒเบเบญเบเบเบฝเบงเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เปเบเบเปเบฒเบชเบฑเบเบเปเบฒเบเปเบญเบทเปเบเป, เปเบเบเบเบฑเบเบชเบฐเปเบเบฒเบฐเบเบฑเปเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบเบฒเบ node เปเบ cluster, เปเบฅเบฐ nodes เบญเบทเปเบเปเบเปเบญเบเบชเบญเบเบเบฒเบกเบกเบฑเบเบซเปเบฒเบเปเบเบชเบญเบเบซเบผเบตเบเบเปเบฒเบเบงเบเปเบเบปเบฒเบเปเบญเบเบเบฒเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบญเบเบเบฐเบเบธเบกเบเบฑเปเบ.
เปเบเบเบชเบฐเปเบเบฒเบฐ, เบเบปเบเบเบฑเบเบเปเบฒเบกเบเบฑเบเปเบญเบเบฐเบชเบฒเบ, เบเบฒเบเบเบฑเบเบเบดเบเบเบญเบเบเบฐเบเบธเบกเบเบตเปเบกเบตเบเบทเปเบเบธเบเบเบตเบเปเปเปเบเปเปเบฎเบฑเบเบงเบฝเบเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒ
AUTH_SESSION_ID
. Keycloak เบกเบตเบงเบปเบเบเบฒเบเบเปเบฝเบเปเบชเบฑเปเบเบเบฒเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเบฐเบเปเบฒเปเบซเปเปเบฅเบทเบญเบเบเบทเปเบเบธเบเบเบตเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบญเบเบเบฐเบเบธเบกเบซเบเบฝเบง.
Keycloak เบเบฑเบเปเบญเบปเบฒเบเบทเปเบเบญเบ node เบเบตเปเบเบญเบเบชเบฐเบซเบเบญเบเบเปเบญเบ AUTH_SESSION_ID
, เปเบฅเบฐเบเบฑเบเบเบฑเปเบเปเบเปเปเบเปเบฅเบฐ node เปเบเบชเบฐเบเบฑเบเบเบตเปเบกเบตเบชเบนเบเปเบเปเบเบฒเบเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบ, เปเบเปเบฅเบฐเบเบปเบ JAVA_OPTS
เบเบฒเบเปเบฅเบทเบญเบ jboss.node.name
ะธ jboss.tx.node.id
เปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐ node - เบเปเบฒเบเบชเบฒเบกเบฒเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เปเบชเปเบเบทเปเบเบญเบเบเบฑเบเปเบเป. เบเปเบฒเบเปเบฒเบเปเบชเปเบเบทเป pod, เบขเปเบฒเบฅเบทเบกเบเปเบฝเบงเบเบฑเบเบเบญเบเปเบเบเบเปเบฒเบเบฑเบ 23 เบเบปเบงเบญเบฑเบเบชเบญเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเปเบ jboss, เบเบฑเปเบเบเบฑเปเบเบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเปเบเป StatefulSet เปเบเบเบเบตเปเบเบฐเปเบเบฑเบ Deployment.
rake เบญเบทเปเบ - เบเปเบฒเบเบฑเบเบเบทเบเบฅเบถเบเบซเบผเบท restarted, cache เบเบญเบเบกเบฑเบเบเบฐเบชเบนเบเปเบชเบ. เบเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบตเป, เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเบเปเบฒเบเบปเบเบเปเบฒเบเบงเบเปเบเบปเปเบฒเบเบญเบ cache เบชเปเบฒเบฅเบฑเบ cache เบเบฑเบเบซเบกเบปเบเบขเปเบฒเบเบซเบเปเบญเบเบชเบญเบ, เบเบฑเปเบเบเบฑเปเบเบชเปเบฒเปเบเบปเบฒเบเบญเบ cache เบเบฐเบเบฑเบเบเบปเบเบขเบนเป. เบเบฒเบเปเบเปเปเบเปเบกเปเบเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบ /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 multicast
เบเปเบฒเบเปเบฒเบเปเบเป Weavenet เปเบเบฑเบ CNI, multicast เบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบต - เปเบฅเบฐเบเปเปเบเบญเบ Keycloak เบเปเบฒเบเบเบฐเปเบซเบฑเบเบเบฑเบเปเบฅเบฐเบเบฑเบเบเบฑเบเบเบตเบเบตเปเบเบงเบเบกเบฑเบเบเบทเบเปเบเบตเบเบเบปเบง.
เบเปเบฒเบเปเบฒเบเบเปเปเบกเบตเบเบฒเบเบฎเบญเบเบฎเบฑเบ ip multicast เปเบเบเบธเปเบก Kubernetes เบเบญเบเบเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเปเบเบเปเบฒ JGroups เปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบฃเปเบเบเปเบญเบทเปเบเปเปเบเบทเปเบญเบเบญเบเบซเบฒ nodes.
เบเบฒเบเปเบฅเบทเบญเบเบเปเบฒเบญเบดเบเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเป KUBE_DNS
เปเบเบดเปเบเปเบเป headless service
เปเบเบทเปเบญเบเบญเบเบซเบฒ Keycloak nodes, เบเปเบฒเบเบเบฝเบเปเบเปเบเปเบฒเบ JGroups เบเบทเปเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบญเบเบซเบฒ nodes เปเบเป.
เบเบฒเบเปเบฅเบทเบญเบเบญเบทเปเบเปเบกเปเบเปเบเปเบงเบดเบเบตเบเบฒเบ KUBE_PING
, เปเบเบดเปเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ API เปเบเบทเปเบญเบเบญเบเบซเบฒ nodes (เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบ configure serviceAccount
เบเปเบงเบโเบชเบดเบ list
ะธ get
, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ configure pods เปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบตเป serviceAccount
).
เบงเบดเบเบตเบเบตเป JGroups เบเบญเบเบซเบฒ nodes เบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก JGROUPS_DISCOVERY_PROTOCOL
ะธ JGROUPS_DISCOVERY_PROPERTIES
. เบชเบณ เบฅเบฑเบ KUBE_PING
เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเบเบฑเบเปเบเบเบเบฒเบเบเบฒเบก namespace
ะธ labels
.
๏ธ เบเปเบฒเบเปเบฒเบเปเบเป multicast เปเบฅเบฐเปเบฅเปเบเบชเบญเบเบซเบผเบทเบซเบผเบฒเบเบเบงเปเบฒเบเบธเปเบก Keycloak เปเบเบเบธเปเบก Kubernetes เบเบฝเบง (เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบซเบเบถเปเบเปเบ namespace.
production
, เบเบตเปโเบชเบญเบ -staging
) - nodes เบเบญเบเบซเบเบถเปเบเบเบธเปเบก Keycloak เบชเบฒเบกเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบธเปเบกเบญเบทเปเบ. เปเบซเปเปเบเปเปเบเบงเปเบฒเปเบเปเบเบตเปเบขเบนเป multicast เปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐ cluster เปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเปเบjboss.default.multicast.address
ะธjboss.modcluster.multicast.address
ะฒJAVA_OPTS
.
เบเบฒเบเบเปเบฒเบฅเบญเบเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ
เบเบฒเบเปเบเบทเปเบญเบกเบเปเป
Keycloak เปเบเปเบซเบผเบฒเบเบเบธเปเบกเปเบเบ Infinispan เปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบชเบนเบเบเปเปเบกเบนเบเบเปเบญเบเบเบตเปเบเบธเปเบก Keycloack เบเบตเปเบเบฐเบเบญเบเบเปเบงเบเบเปเป Keycloak เบเบฑเปเบเบขเบนเป. เปเบเปเบเปเปเบกเบตเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบฅเบฐเบซเบงเปเบฒเบ Keycloak nodes เปเบเบชเบนเบเบเปเปเบกเบนเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ.
Keycloak nodes เปเบเป Java Data Grid เบเบฒเบเบเบญเบ (เปเบเบตเบเปเบงเบต Infinispan) เบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบทเปเบชเบฒเบเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ. เบเบฒเบเบชเบทเปเบชเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฒเบกเบเบดเบเบตเบเบฒเบ
เปเบเบช Infinispan เบเปเบญเบเบเบทเบเบเบฑเปเบเบเปเบฒเบเปเบงเบเบเบธเบเบชเบปเบกเบเบฑเบ remoteStore
, เปเบเบทเปเบญโเปเบซเปโเบเปเปโเบกเบนเบโเบเบตเปโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเปเบเบฑเบโเบฎเบฑเบโเบชเบฒโเปเบงเปโเบซเปเบฒเบโเปเบโเบชเบญเบโเบซเบผเบตเบ (เปเบโเบชเบนเบโเบเปเปโเบกเบนเบโเบญเบทเปเบโ, เบเบฐเบกเบฒเบ เบเบฑเบเปเบ) เบเบฒเบโเบเบงเบฒเบกโเบเปเบฒโ. เบกเบตเบเบธเปเบก infinispan เปเบเบเบเปเบฒเบเบซเบฒเบเปเบเบเบฑเบเบเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ JDG, เบเบฑเปเบเบเบฑเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบ JDG1 เบขเบนเปเปเบเปเบงเบฑเบเปเบเบเป site1
เบเบฐเบเบทเบเบเปเบฒเบฅเบญเบเปเบเบฑเบ JDG2 เบขเบนเปเปเบเปเบงเบฑเบเปเบ site2
.
เปเบฅเบฐเบชเบธเบเบเปเบฒเบ, เปเบเบตเบเปเบงเบต JDG เบเบตเปเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบซเปเปเบเบตเบเปเบงเบต Keycloak เบเบญเบเบเบธเปเบกเบเบญเบเบกเบฑเบเบเปเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบฅเบนเบเบเปเบฒ, เปเบเบดเปเบเปเบเบฑเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเปเบเปเบเบเบญเบ HotRod. เปเบเบตเบ nodes Keycloak site2
เบเบฑเบเบเบธเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒ Infinispan เบเบญเบเบเบงเบเปเบเบปเบฒเปเบฅเบฐเบเบญเบเบเบฐเบเบธเบกเบเบนเปเปเบเปเบชเบฐเปเบเบฒเบฐเบเปเปเบกเบตเบขเบนเปเปเบเปเบซเบเบ Keycloak on site2
.
เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบ, เบกเบฑเบเบเปเปเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเปเปเปเบฎเบฑเบเบเบฒเบเบชเปเบฒเบฎเบญเบเบเปเปเบกเบนเบเปเบฅเบฐเบซเบผเบตเบเปเบงเบฑเปเบเบเบฒเบเบเบฝเบเบเปเปเบกเบนเบเบเปเบฒเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ Infinispan เบเบฑเบเบซเบกเบปเบ. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบญเบปเบฒเบเบฒเบเบเบฑเปเบเบเปเบฒเบญเบญเบ remote-store
Infinispan cache เบชเบฐเปเบเบฒเบฐ (เปเบเปเบเบฅเป standalone-ha.xml), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบชเบฐเปเบเบฒเบฐ replicated-cache
เบเบฐเบเปเปเบเปเบฒเปเบเบฑเบเปเบเบเปเบฒเบเปเบเบตเบเปเบงเบต Infinispan เบญเบตเบเบเปเปเปเบ.
เบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบเบฒเบโเบเบงเบฒเบกโเบเปเบฒโ
เบกเบตเบชเบญเบเบเบฐเปเบเบเบเบญเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเปเบ Keycloak:
-
เบเปเบญเบเบเบดเปเบ. เบกเบฑเบเบเบฑเปเบเบขเบนเปเปเบเปเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเบฒเบเปเบซเบผเบเปเบเบเบฒเบเบเปเปเบกเบนเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเบญเบเปเบเป latency. เบเบฐเปเบเบเบเบญเบ cache เบเบตเปเปเบเบฑเบเบฎเบฑเบเบชเบฒ realm, เบฅเบนเบเบเปเบฒ, เบเบฒเบฅเบฐเบเบปเบเบเบฒเบ, เปเบฅเบฐ metadata เบเบญเบเบเบนเปเปเบเป. เบเบฐเปเบเบเบเบญเบ cache เบเบตเปเบเปเปเปเบเปเบเบทเบ replicated, เปเบเบดเบเปเบกเปเบเบงเปเบฒ cache เปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบธเปเบก Keycloak. เบเปเบฒเบเบฒเบเปเบเบปเปเบฒเบขเบนเปเปเบ cache เบกเบตเบเบฒเบเบเปเบฝเบเปเบเบ, เบเปเปเบเบงเบฒเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฐเบเบทเบเบชเบปเปเบเปเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเบขเบนเปเปเบ cluster, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเปเบเบปเปเบฒเบเบฐเบเบทเบเบเบปเบเปเบงเบฑเปเบเบเบฒเบ cache. เปเบเบดเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ
work
เปเบเบดเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบชเปเบฒเบฅเบฑเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบเบญเบเบเบฑเปเบเบเบญเบ. -
เบชเบณเปเบเบปเบฒ. เบเบฐเบกเบงเบเบเบปเบเปเบเบเบเบฑเบเบเบญเบเบเบนเปเปเบเป, เปเบเปเบเบฑเบเบญเบญเบเปเบฅเบเป, เปเบฅเบฐเบเบฑเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฒเบเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเปเบเบทเปเบญเบเบงเบเบซเบฒเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบซเบผเบญเบเบฅเบงเบเบฅเบฐเบซเบฑเบเบเปเบฒเบ เปเบฅเบฐเบเบฒเบเปเบเบกเบเบตเบญเบทเปเบเป. เบเปเปโเบกเบนเบโเบเบตเปโเปเบเบฑเบโเปเบงเปโเปเบโเบเบฒเบโเบเบงเบฒเบกโเบเปเบฒโเปเบซเบผเบปเปเบฒโเบเบตเปโเปเบกเปเบโเบเบปเปเบงโเบเบฒเบงโ, เปเบเบฑเบโเปเบงเปโเบเบฝเบโเปเบเปโเปเบ RAMโ, เปเบเปโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบ replicated เปเบโเบเบธเปเบกโ.
เปเบเบช Infinispan
เบเบญเบเบเบฐเบเบธเบก - เปเบเบงเบเบงเบฒเบกเบเบดเบเปเบ Keycloak, เบเบฒเบเบเบงเบฒเบกเบเปเบฒเปเบเบเบเปเบฒเบเบซเบฒเบเปเบญเบตเปเบเบงเปเบฒ authenticationSessions
, เบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบเบญเบเบเบนเปเปเบเปเบชเบฐเปเบเบฒเบฐ. เบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเปเบญเบเบเบฒเบเปเบเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบเปเบฅเบฐเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบ Keycloak, เบเปเปเปเบกเปเบเปเบเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเปเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเบเบญเบเปเบเบเบเบฑเบเบซเบเบฝเบงเปเบเบปเปเบฒเบกเบฒ, เปเบฅเบฐ cache เบเบฑเปเบเบเปเบฒเบงเปเบญเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบทเบ replicated, เปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบเปเบฅเบฐเบเบตเบเบญเบเปเบซเบกเบ Active-Active.
Action Token. เปเบเบงเบเบงเบฒเบกเบเบดเบเบญเบทเปเบ, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบเปเบชเปเบฒเบฅเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเปเบฒเบเป, เบเบปเบงเบขเปเบฒเบ, เบเบนเปเปเบเปเบเปเบญเบเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ asynchronously เปเบเบเบเบฒเบเปเบเบชเบฐเบเบต. เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เปเบเปเบฅเบเบฐเบเบฐเบเบงเบเบเบฒเบ forget password
cache actionTokens
เปเบเปเปเบเบทเปเบญเบเบดเบเบเบฒเบก metadata เบเบญเบ tokens เบเบตเปเบเปเบฝเบงเบเปเบญเบ - เบเบปเบงเบขเปเบฒเบ, token เปเบเปเบเบทเบเบเปเบฒเปเบเปเปเบฅเปเบงเปเบฅเบฐเบเปเปเบชเบฒเบกเบฒเบเบเบทเบเปเบเบตเบเปเบเปเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ. เบเบฐเปเบเบเบเบญเบ cache เบเบตเปเบเบปเบเบเบฐเบเบดเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบ replicated เบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ.
Caching เปเบฅเบฐเบญเบฒเบเบธเบเบญเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเปเบงเป เปเบฎเบฑเบเบงเบฝเบเปเบเบทเปเบญเบเบฑเบเปเบเบปเบฒเบเบฒเบเปเบซเบผเบเปเบเบเบฒเบเบเปเปเบกเบนเบ. เบเบฐเปเบเบเบเบญเบ caching เบเบตเปเบเบฑเบเบเบธเบเบเบฐเบชเบดเบเบเบดเบเบฒเบ, เปเบเปเปเบเบตเปเบกเบเบฑเบเบซเบฒเบเบตเปเบเบฐเปเบเปเบ. เบเปเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบ Keycloak เบเบฑเบเบเบธเบเบเปเปเบกเบนเบ, เปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบญเบทเปเบเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเบเปเบซเปเบเบฒเบเปเบเบทเปเบญเปเบซเปเบเบงเบเปเบเบปเบฒเบชเบฒเบกเบฒเบเบเบฑเบเบเบธเบเบเปเปเบกเบนเบเปเบเปเบเบเบเบญเบเบเบงเบเปเบเบปเบฒ. Keycloak เปเบเป cache เบเปเบญเบเบเบดเปเบ realms
, users
ะธ authorization
เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบญเบเบเบฑเปเบเบเบฑเบเบกเบต cache เปเบเบเบเปเบฒเบเบซเบฒเบ work
, เปเบเบดเปเบ replicated เบเบปเปเบงเบชเบนเบเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบ. เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบเปเปเปเบเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเปเบเปเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ, เปเบเปเปเบซเปเบเปเบฅเบดเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเปเบฝเบงเบเบฑเบเบญเบฒเบเบธเบเบญเบเบเปเปเบกเบนเบเปเบเบซเบฒเบเบธเปเบกเบเบญเบเบเบธเปเบกเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ. เปเบเบเปเบฒเบชเบฑเบเบเปเบฒเบเปเบญเบทเปเบเป, เบเบฑเบเบเบตเบเบตเปเบเปเปเบกเบนเบเบเบทเบเบเบฑเบเบเบธเบ, Keycloak node เบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบเบซเบฒ nodes เบญเบทเปเบเปเปเบเบชเบนเบเบเปเปเบกเบนเบเบเบญเบเบกเบฑเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ nodes เปเบเบชเบนเบเบเปเปเบกเบนเบเบญเบทเปเบเป. เบซเบผเบฑเบเบเบฒเบเปเบเปเบฎเบฑเบเบเปเปเบเบงเบฒเบกเบเบฑเปเบเบเปเบฒเบง, เปเบเปเบฅเบฐ node เบเบฐเบฅเปเบฒเบเบเปเปเบกเบนเบเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเปเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเบเปเบญเบเบเบดเปเบเบเบญเบเบกเบฑเบ.
เบเปเบงเบเปเบงเบฅเบฒเบเบญเบเบเบนเปเปเบเป. เปเบเบชเบเบตเปเบกเบตเบเบทเป sessions
, clientSessions
, offlineSessions
ะธ offlineClientSessions
, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบกเปเบ replicated เบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบเปเบฅเบฐเปเบซเปเบเปเบฅเบดเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเบญเบเบเบฐเบเบธเบกเบเบนเปเปเบเปเบเบตเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบเปเบซเบงเปเบเบเบฐเบเบฐเบเบตเปเบเบนเปเปเบเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบ. cache เปเบซเบผเบปเปเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบ HTTP เบฎเปเบญเบเบเปเบเบฒเบเบเบนเปเปเบเปเบชเบธเบเบเปเบฒเบ, เบเบฑเปเบเบเบฑเปเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบเปเบเบทเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบ sessions เบซเบเบฝเบงเปเบฅเบฐเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบ replicated เบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ.
เบเบฒเบโเบเปเบญเบโเบเบฑเบโเบเบปเบโเบเบฑเบโเบเบฑเบโเปเบเป Bruteโ. เปเบเบ loginFailures
เปเบเปเปเบเบทเปเบญเบเบดเบเบเบฒเบกเบเปเปเบกเบนเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบเบฒเบเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบ, เปเบเบฑเปเบเบงเปเบฒเบเบนเปเปเบเปเบเปเบญเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเบเปเปเบเบทเบเบเปเบญเบเบซเบผเบฒเบเบเบฒเบเปเบ. Replication เบเบญเบ cache เบเบตเปเปเบกเปเบเบเบงเบฒเบกเบฎเบฑเบเบเบดเบเบเบญเบเบเบญเบเบเบนเปเบเปเบฅเบดเบซเบฒเบ. เปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบเบทเบเบเปเบญเบ, เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเปเบเบตเบเปเบเปเบเบฒเบเบเปเบฒเบฅเบญเบเบฅเบฐเบซเบงเปเบฒเบเบชเบนเบเบเปเปเบกเบนเบ. เปเบเปเปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเปเบฒเบเปเบฒเบเบเปเปเปเบฎเบฑเบเบเปเปเบฒเบเปเปเบกเบนเบเบเบตเป, เบเปเบฒเบเบเบฐเบเบฑเบเบเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบฅเบฐเบเปเบฒเบเบฑเบเบซเบฒเบเบตเปเปเบเบตเบเบเบทเปเบ, เบเบฒเบเบชเปเบฒเปเบเบปเบฒเบญเบฒเบเบเบฐเบเปเปเบเบทเบเปเบเบตเบเปเบเป.
เปเบกเบทเปเบญเปเบเบตเบเบเบปเบงเบเบธเปเบก Infinispan, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบเปเบฒเบเบดเบเบฒเบก cache เปเบชเปเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ:
<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 เบเปเบญเบเบเบตเปเบเบฐเปเบฅเบตเปเบกเบเบธเปเบก Keycloak
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบ configure remoteStore
เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒ Keycloak. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, script เปเบกเปเบเบเบฝเบเบเป, เปเบเบดเปเบเปเบกเปเบเปเบฎเบฑเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบญเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒ, เปเบเบดเปเบเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบปเบงเปเบ. 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
เบชเปเบฒเบฅเบฑเบเบเปเป Keycloak เปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบ HotRod: remote.cache.host
, remote.cache.port
เปเบฅเบฐเบเบทเปเบเบฒเบเบเปเบฅเบดเบเบฒเบ jboss.site.name
.
เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบฅเบฐเปเบญเบเบฐเบชเบฒเบเปเบเบตเปเบกเปเบเบตเบก
https://www.keycloak.org/docs/latest/server_installation/index.html https://docs.wildfly.org/17/High_Availability_Guide.html#cluster-configuration https://infinispan.org/docs/9.4.x/user_guide/user_guide.html https://hub.docker.com/r/jboss/keycloak https://hub.docker.com/r/jboss/infinispan
เบเบปเบเบเบงเบฒเบกเปเบเปเบเบทเบเปเบเปเบฅเบฐเบเบฐเบเบฝเบกเบชเปเบฒเบฅเบฑเบ Habr เปเบเบเบเบฐเบเบฑเบเบเบฒเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com