குபெர்னெட்டஸில் HA பயன்முறையில் Keycloakஐ இயக்குகிறது

குபெர்னெட்டஸில் HA பயன்முறையில் Keycloakஐ இயக்குகிறது

டிஎல்; DR: Keycloak, ஒரு திறந்த மூல அணுகல் கட்டுப்பாட்டு அமைப்பு, உள் கட்டமைப்பின் பகுப்பாய்வு, கட்டமைப்பு விவரங்கள் பற்றிய விளக்கம் இருக்கும்.

அறிமுகம் மற்றும் முக்கிய யோசனைகள்

இந்தக் கட்டுரையில், குபெர்னெட்டஸின் மேல் ஒரு கீக்ளோக் கிளஸ்டரைப் பயன்படுத்தும்போது மனதில் கொள்ள வேண்டிய அடிப்படை யோசனைகளைப் பார்ப்போம்.

நீங்கள் Keycloak பற்றி மேலும் அறிய விரும்பினால், கட்டுரையின் முடிவில் உள்ள இணைப்புகளைப் பார்க்கவும். நடைமுறையில் அதிக ஈடுபாடு கொள்ள, நீங்கள் படிக்கலாம் எங்கள் களஞ்சியம் இந்த கட்டுரையின் முக்கிய யோசனைகளை செயல்படுத்தும் ஒரு தொகுதியுடன் (வெளியீட்டு வழிகாட்டி உள்ளது, இந்த கட்டுரை சாதனம் மற்றும் அமைப்புகளின் மேலோட்டத்தை வழங்கும், தோராயமாக மொழிபெயர்ப்பாளர்).

Keycloak என்பது ஜாவாவில் எழுதப்பட்ட ஒரு விரிவான அமைப்பாகும் மற்றும் ஒரு பயன்பாட்டு சேவையகத்தின் மேல் கட்டப்பட்டது காட்டுப்பூச்சி. சுருக்கமாக, இது பயன்பாட்டு பயனர்களுக்கு கூட்டமைப்பு மற்றும் SSO (ஒற்றை உள்நுழைவு) திறன்களை வழங்கும் அங்கீகாரத்திற்கான கட்டமைப்பாகும்.

அதிகாரப்பூர்வத்தைப் படிக்க உங்களை அழைக்கிறோம் வலைத்தளத்தில் அல்லது விக்கிபீடியா விரிவான புரிதலுக்காக.

கீக்ளோக்கை துவக்குகிறது

Keycloak இயக்க இரண்டு நிலையான தரவு மூலங்கள் தேவை:

  • பயனர் தகவல் போன்ற நிறுவப்பட்ட தரவைச் சேமிக்கப் பயன்படும் தரவுத்தளம்
  • டேட்டாகிரிட் கேச், இது தரவுத்தளத்திலிருந்து தரவைத் தேக்ககப்படுத்தவும், பயனர் அமர்வுகள் போன்ற சில குறுகிய கால மற்றும் அடிக்கடி மாறும் மெட்டாடேட்டாவைச் சேமிக்கவும் பயன்படுகிறது. செயல்படுத்தப்பட்டது இன்பினிஸ்பான், இது பொதுவாக தரவுத்தளத்தை விட கணிசமாக வேகமானது. ஆனால் எப்படியிருந்தாலும், இன்பினிஸ்பானில் சேமிக்கப்பட்ட தரவு தற்காலிகமானது - மேலும் கிளஸ்டர் மறுதொடக்கம் செய்யப்படும்போது அதை எங்கும் சேமிக்க வேண்டிய அவசியமில்லை.

Keycloak நான்கு வெவ்வேறு முறைகளில் வேலை செய்கிறது:

  • சாதாரண - ஒரே ஒரு செயல்முறை, ஒரு கோப்பு வழியாக கட்டமைக்கப்பட்டது தனி.xml
  • வழக்கமான கிளஸ்டர் (அதிக கிடைக்கும் விருப்பம்) - அனைத்து செயல்முறைகளும் ஒரே கட்டமைப்பைப் பயன்படுத்த வேண்டும், இது கைமுறையாக ஒத்திசைக்கப்பட வேண்டும். அமைப்புகள் ஒரு கோப்பில் சேமிக்கப்படும் தனித்து-ha.xml, கூடுதலாக நீங்கள் தரவுத்தளத்திற்கான பகிரப்பட்ட அணுகல் மற்றும் ஒரு சுமை சமநிலையை உருவாக்க வேண்டும்.
  • டொமைன் கிளஸ்டர் — ஒவ்வொரு முறையும் உள்ளமைவு மாறுவதால், ஒவ்வொரு கிளஸ்டர் முனையிலும் அனைத்து மாற்றங்களும் செய்யப்பட வேண்டும் என்பதால், சாதாரண பயன்முறையில் ஒரு கிளஸ்டரைத் தொடங்குவது விரைவில் வழக்கமான மற்றும் சலிப்பான பணியாக மாறும். சில பகிரப்பட்ட சேமிப்பக இருப்பிடத்தை அமைத்து, உள்ளமைவை வெளியிடுவதன் மூலம் டொமைன் செயல்பாட்டு முறை இந்த சிக்கலை தீர்க்கிறது. இந்த அமைப்புகள் கோப்பில் சேமிக்கப்படும் domain.xml
  • தரவு மையங்களுக்கு இடையேயான பிரதிபலிப்பு — நீங்கள் Keycloak ஐ பல தரவு மையங்களின் தொகுப்பில் இயக்க விரும்பினால், பெரும்பாலும் வெவ்வேறு புவியியல் இடங்களில். இந்த விருப்பத்தில், ஒவ்வொரு தரவு மையமும் அதன் சொந்த கீக்ளோக் சேவையகங்களைக் கொண்டிருக்கும்.

இந்த கட்டுரையில் இரண்டாவது விருப்பத்தை விரிவாகக் கருதுவோம், அதாவது வழக்கமான கொத்து, மேலும் இந்த இரண்டு விருப்பங்களையும் குபெர்னெட்ஸில் இயக்குவது அர்த்தமுள்ளதாக இருப்பதால், தரவு மையங்களுக்கிடையேயான பிரதியெடுப்பு என்ற தலைப்பிலும் சிறிது தொடுவோம். அதிர்ஷ்டவசமாக, குபெர்னெட்டஸில் பல காய்களின் (கீக்ளோக் முனைகள்) அமைப்புகளை ஒத்திசைப்பதில் எந்தப் பிரச்சனையும் இல்லை. டொமைன் கிளஸ்டர் அதை செய்ய மிகவும் கடினமாக இருக்காது.

என்ற வார்த்தையையும் கவனத்தில் கொள்ளவும் கொத்து மற்ற கட்டுரைகள் ஒன்றாக வேலை செய்யும் Keycloak முனைகளின் குழுவிற்கு மட்டுமே பொருந்தும், Kubernetes கிளஸ்டரைப் பார்க்க வேண்டிய அவசியமில்லை.

வழக்கமான கீக்ளோக் கிளஸ்டர்

இந்த பயன்முறையில் Keycloak ஐ இயக்க உங்களுக்கு இது தேவை:

  • வெளிப்புற பகிரப்பட்ட தரவுத்தளத்தை உள்ளமைக்கவும்
  • சுமை சமநிலையை நிறுவவும்
  • ஐபி மல்டிகாஸ்ட் ஆதரவுடன் உள்ளக நெட்வொர்க்கைக் கொண்டுள்ளது

வெளிப்புற தரவுத்தளத்தை அமைப்பதை நாங்கள் விவாதிக்க மாட்டோம், ஏனெனில் இது இந்த கட்டுரையின் நோக்கம் அல்ல. எங்காவது வேலை செய்யும் தரவுத்தளம் உள்ளது என்று வைத்துக் கொள்வோம் - அதற்கு ஒரு இணைப்புப் புள்ளி உள்ளது. சுற்றுச்சூழல் மாறிகளில் இந்தத் தரவைச் சேர்ப்போம்.

ஒரு ஃபெயில்ஓவர் (HA) கிளஸ்டரில் Keycloak எவ்வாறு செயல்படுகிறது என்பதை நன்கு புரிந்து கொள்ள, Wildfly இன் கிளஸ்டரிங் திறன்களை அது எவ்வளவு சார்ந்துள்ளது என்பதை அறிந்து கொள்வது அவசியம்.

வைல்ட்ஃபிளை பல துணை அமைப்புகளைப் பயன்படுத்துகிறது, அவற்றில் சில சுமை சமநிலையாளராகப் பயன்படுத்தப்படுகின்றன, சில தவறு சகிப்புத்தன்மைக்கு பயன்படுத்தப்படுகின்றன. ஒரு கிளஸ்டர் கணு ஓவர்லோட் ஆகும் போது லோட் பேலன்சர் பயன்பாடு கிடைப்பதை உறுதி செய்கிறது, மேலும் சில கிளஸ்டர் கணுக்கள் தோல்வியடைந்தாலும் தவறு சகிப்புத்தன்மை பயன்பாடு கிடைப்பதை உறுதி செய்கிறது. இந்த துணை அமைப்புகளில் சில:

  • mod_cluster: Apache உடன் இணைந்து HTTP லோட் பேலன்சராக செயல்படுகிறது, இது டிசிபி மல்டிகாஸ்ட்டைச் சார்ந்து இயல்பாக ஹோஸ்ட்களைக் கண்டறியும். வெளிப்புற சமநிலையுடன் மாற்றலாம்.

  • infinispan: JGroups சேனல்களை போக்குவரத்து அடுக்காகப் பயன்படுத்தி விநியோகிக்கப்பட்ட கேச். கூடுதலாக, கேச் உள்ளடக்கங்களை ஒத்திசைக்க வெளிப்புற இன்ஃபினிஸ்பான் கிளஸ்டருடன் தொடர்பு கொள்ள HotRod நெறிமுறையைப் பயன்படுத்தலாம்.

  • jgroups: JGroups சேனல்களின் அடிப்படையில் அதிக அளவில் கிடைக்கும் சேவைகளுக்கு குழு தொடர்பு ஆதரவை வழங்குகிறது. பெயரிடப்பட்ட குழாய்கள் ஒரு கிளஸ்டரில் உள்ள பயன்பாட்டு நிகழ்வுகளை குழுக்களாக இணைக்க அனுமதிக்கின்றன, இதனால் தகவல்தொடர்பு நம்பகத்தன்மை, ஒழுங்குமுறை மற்றும் தோல்விகளுக்கு உணர்திறன் போன்ற பண்புகளைக் கொண்டுள்ளது.

ஏற்ற சமநிலையாளர்

குபெர்னெட்ஸ் கிளஸ்டரில் ஒரு பேலன்சரை இன்க்ரஸ் கன்ட்ரோலராக நிறுவும் போது, ​​பின்வரும் விஷயங்களை மனதில் கொள்ள வேண்டியது அவசியம்:

HTTP வழியாக அங்கீகரிப்பு சேவையகத்துடன் இணைக்கும் கிளையண்டின் தொலை முகவரியே கிளையன்ட் கணினியின் உண்மையான IP முகவரி என்று Keycloak கருதுகிறது. பேலன்சர் மற்றும் நுழைவு அமைப்புகள் HTTP தலைப்புகளை சரியாக அமைக்க வேண்டும் X-Forwarded-For и X-Forwarded-Proto, மேலும் அசல் தலைப்பை சேமிக்கவும் HOST. சமீபத்திய பதிப்பு ingress-nginx (>0.22.0) முன்னிருப்பாக இதை முடக்குகிறது

கொடியை செயல்படுத்துகிறது proxy-address-forwarding சூழல் மாறியை அமைப்பதன் மூலம் PROXY_ADDRESS_FORWARDING в true இது ஒரு ப்ராக்ஸியின் பின்னால் வேலை செய்கிறது என்ற புரிதலை Keycloak கொடுக்கிறது.

நீங்களும் இயக்க வேண்டும் ஒட்டும் அமர்வுகள் உள்ளே தற்போதைய அங்கீகார அமர்வு மற்றும் பயனர் அமர்வுடன் தொடர்புடைய தரவைச் சேமிக்க Keycloak விநியோகிக்கப்பட்ட Infinispan தற்காலிக சேமிப்பைப் பயன்படுத்துகிறது. தற்காலிக சேமிப்புகள் ஒரு தனி உரிமையாளருடன் இயல்பாக இயங்குகின்றன, வேறுவிதமாகக் கூறினால், அந்த குறிப்பிட்ட அமர்வு கிளஸ்டரில் உள்ள சில முனைகளில் சேமிக்கப்படும், மேலும் அந்த அமர்வுக்கு அணுகல் தேவைப்பட்டால் மற்ற முனைகள் அதை தொலைவிலிருந்து வினவ வேண்டும்.

குறிப்பாக, ஆவணத்திற்கு மாறாக, குக்கீ என்ற பெயருடன் ஒரு அமர்வை இணைப்பது எங்களுக்கு வேலை செய்யவில்லை AUTH_SESSION_ID. Keycloak ஒரு வழிமாற்று வளையத்தைக் கொண்டுள்ளது, எனவே ஒட்டும் அமர்வுக்கு வேறு குக்கீ பெயரைத் தேர்ந்தெடுக்க பரிந்துரைக்கிறோம்.

கீக்ளோக் முதலில் பதிலளித்த முனையின் பெயரையும் இணைக்கிறது AUTH_SESSION_ID, மற்றும் மிகவும் கிடைக்கக்கூடிய பதிப்பில் உள்ள ஒவ்வொரு முனையும் ஒரே தரவுத்தளத்தைப் பயன்படுத்துவதால், அவை ஒவ்வொன்றும் இருக்க வேண்டும் பரிவர்த்தனைகளை நிர்வகிப்பதற்கான ஒரு தனி மற்றும் தனித்துவமான முனை அடையாளங்காட்டி. வைக்க பரிந்துரைக்கப்படுகிறது JAVA_OPTS அளவுருக்கள் jboss.node.name и jboss.tx.node.id ஒவ்வொரு முனைக்கும் தனித்துவமானது - நீங்கள், எடுத்துக்காட்டாக, பாட்டின் பெயரை வைக்கலாம். நீங்கள் ஒரு பாட் பெயரை வைத்தால், jboss மாறிகளுக்கான 23 எழுத்து வரம்பை மறந்துவிடாதீர்கள், எனவே வரிசைப்படுத்தலுக்குப் பதிலாக ஸ்டேட்ஃபுல்செட்டைப் பயன்படுத்துவது நல்லது.

மற்றொரு ரேக் - பாட் நீக்கப்பட்டாலோ அல்லது மறுதொடக்கம் செய்யப்பட்டாலோ, அதன் தற்காலிக சேமிப்பு இழக்கப்படும். இதை கணக்கில் எடுத்துக்கொள்வது, அனைத்து தற்காலிக சேமிப்புகளுக்கும் கேச் உரிமையாளர்களின் எண்ணிக்கையை குறைந்தது இரண்டாக அமைப்பது மதிப்பு, இதனால் தற்காலிக சேமிப்பின் நகல் இருக்கும். ஓடுவதுதான் தீர்வு வைல்ட்ஃபிளைக்கான ஸ்கிரிப்ட் பாட் தொடங்கும் போது, ​​அதை அடைவில் வைப்பது /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 தேவைக்கு.

ஐபி மல்டிகாஸ்ட் ஆதரவுடன் தனியார் நெட்வொர்க்

நீங்கள் Weavenet ஐ CNI ஆகப் பயன்படுத்தினால், மல்டிகாஸ்ட் உடனடியாக வேலை செய்யும் - மேலும் உங்கள் Keycloak முனைகள் தொடங்கப்பட்டவுடன் ஒன்றையொன்று பார்க்கும்.

உங்கள் குபெர்னெட்ஸ் கிளஸ்டரில் ஐபி மல்டிகாஸ்ட் ஆதரவு இல்லை என்றால், முனைகளைக் கண்டறிய மற்ற நெறிமுறைகளுடன் வேலை செய்ய JGroups ஐ உள்ளமைக்கலாம்.

பயன்படுத்துவதே முதல் விருப்பம் KUBE_DNSபயன்படுத்தும் headless service Keycloak முனைகளைக் கண்டறிய, முனைகளைக் கண்டறியப் பயன்படும் சேவையின் பெயரை JGroupகளுக்கு அனுப்பினால் போதும்.

மற்றொரு விருப்பம் முறையைப் பயன்படுத்துவது 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.

தரவு மையங்களுக்கு இடையேயான பிரதிபலிப்பு

குபெர்னெட்டஸில் HA பயன்முறையில் Keycloakஐ இயக்குகிறது

இணைப்பை

Keycloak ஒவ்வொரு தரவு மையத்திற்கும் பல தனித்தனி Infinispan கேச் கிளஸ்டர்களைப் பயன்படுத்துகிறது, அங்கு Keycloak முனைகளால் உருவாக்கப்பட்ட Keycloack கிளஸ்டர்கள் அமைந்துள்ளன. ஆனால் வெவ்வேறு தரவு மையங்களில் உள்ள Keycloak முனைகளுக்கு இடையில் எந்த வித்தியாசமும் இல்லை.

தரவு மையங்களுக்கு இடையேயான தகவல்தொடர்புக்கு, Keycloak முனைகள் வெளிப்புற ஜாவா டேட்டா கிரிட் (இன்ஃபினிஸ்பான் சர்வர்கள்) பயன்படுத்துகின்றன. நெறிமுறையின்படி தொடர்பு செயல்படுகிறது இன்பினிஸ்பான் ஹாட்ராட்.

Infinispan தற்காலிக சேமிப்புகள் பண்புடன் கட்டமைக்கப்பட வேண்டும் remoteStore, அதனால் தரவை தொலைவில் சேமிக்க முடியும் (மற்றொரு தரவு மையத்தில், தோராயமாக மொழிபெயர்ப்பாளர்) தற்காலிக சேமிப்புகள். JDG சேவையகங்களில் தனித்தனி இன்பினிஸ்பான் கிளஸ்டர்கள் உள்ளன, இதனால் தளத்தில் JDG1 இல் தரவு சேமிக்கப்படுகிறது. site1 தளத்தில் JDG2 க்கு நகலெடுக்கப்படும் site2.

இறுதியாக, பெறும் JDG சேவையகம் கிளையண்ட் இணைப்புகள் மூலம் அதன் கிளஸ்டரின் Keycloak சேவையகங்களுக்கு அறிவிக்கிறது, இது HotRod நெறிமுறையின் அம்சமாகும். கீக்ளோக் முனைகள் இயக்கப்படுகின்றன site2 அவற்றின் இன்பினிஸ்பான் கேச்களைப் புதுப்பிக்கவும் மற்றும் குறிப்பிட்ட பயனர் அமர்வு கீக்ளோக் முனைகளிலும் கிடைக்கும் site2.

சில தற்காலிக சேமிப்புகளுக்கு, காப்புப்பிரதிகளை உருவாக்காமல் இருக்கவும் மற்றும் இன்ஃபினிஸ்பான் சேவையகம் மூலம் தரவை எழுதுவதைத் தவிர்க்கவும் முடியும். இதைச் செய்ய, நீங்கள் அமைப்பை அகற்ற வேண்டும் remote-store குறிப்பிட்ட Infinispan கேச் (கோப்பில் தனித்து-ha.xml), அதன் பிறகு சில குறிப்பிட்ட replicated-cache இன்ஃபினிஸ்பான் சர்வர் பக்கத்திலும் இனி தேவைப்படாது.

தற்காலிக சேமிப்புகளை அமைத்தல்

கீக்ளோக்கில் இரண்டு வகையான கேச்கள் உள்ளன:

  • உள்ளூர். இது தரவுத்தளத்திற்கு அடுத்ததாக அமைந்துள்ளது மற்றும் தரவுத்தளத்தில் சுமைகளை குறைக்க உதவுகிறது, அத்துடன் பதில் தாமதத்தை குறைக்க உதவுகிறது. இந்த வகை கேச் ராஜ்யம், கிளையண்டுகள், பாத்திரங்கள் மற்றும் பயனர் மெட்டாடேட்டாவைச் சேமிக்கிறது. கேச் ஒரு கீக்ளோக் கிளஸ்டரின் ஒரு பகுதியாக இருந்தாலும், இந்த வகை கேச் நகலெடுக்கப்படாது. தற்காலிக சேமிப்பில் உள்ளீடு மாறினால், மாற்றத்தைப் பற்றிய செய்தி கிளஸ்டரில் உள்ள மீதமுள்ள சேவையகங்களுக்கு அனுப்பப்படும், அதன் பிறகு நுழைவு தற்காலிக சேமிப்பிலிருந்து விலக்கப்படும். விளக்கத்தைப் பார்க்கவும் work செயல்முறையின் விரிவான விளக்கத்திற்கு கீழே பார்க்கவும்.

  • நகலெடுக்கப்பட்டது. பயனர் அமர்வுகள், ஆஃப்லைன் டோக்கன்களை செயலாக்குகிறது மற்றும் கடவுச்சொல் ஃபிஷிங் முயற்சிகள் மற்றும் பிற தாக்குதல்களைக் கண்டறிய உள்நுழைவு பிழைகளையும் கண்காணிக்கிறது. இந்த கேச்களில் சேமிக்கப்பட்ட தரவு தற்காலிகமானது, RAM இல் மட்டுமே சேமிக்கப்படுகிறது, ஆனால் கிளஸ்டர் முழுவதும் நகலெடுக்க முடியும்.

இன்ஃபினிஸ்பான் தற்காலிக சேமிப்புகள்

அமர்வுகள் - Keycloak இல் உள்ள ஒரு கருத்து, தனி கேச் எனப்படும் authenticationSessions, குறிப்பிட்ட பயனர்களின் தரவைச் சேமிக்கப் பயன்படுகிறது. இந்த தற்காலிகச் சேமிப்பிலிருந்து கோரிக்கைகள் பொதுவாக உலாவி மற்றும் கீக்ளோக் சேவையகங்களுக்குத் தேவைப்படும், பயன்பாடுகளால் அல்ல. இங்குதான் ஒட்டும் அமர்வுகளைச் சார்ந்திருப்பது செயல்பாட்டுக்கு வருகிறது, மேலும் செயலில்-செயலில் உள்ள பயன்முறையில் கூட, அத்தகைய தற்காலிக சேமிப்புகளை மீண்டும் செய்ய வேண்டிய அவசியமில்லை.

அதிரடி டோக்கன்கள். மற்றொரு கருத்து, பொதுவாக பல்வேறு காட்சிகளுக்குப் பயன்படுத்தப்படுகிறது, எடுத்துக்காட்டாக, பயனர் அஞ்சல் மூலம் ஒத்திசைவின்றி ஏதாவது செய்ய வேண்டும். உதாரணமாக, நடைமுறையின் போது forget password கேச் actionTokens தொடர்புடைய டோக்கன்களின் மெட்டாடேட்டாவைக் கண்காணிக்கப் பயன்படுகிறது - எடுத்துக்காட்டாக, ஒரு டோக்கன் ஏற்கனவே பயன்படுத்தப்பட்டது மற்றும் மீண்டும் செயல்படுத்த முடியாது. இந்த வகை கேச் பொதுவாக தரவு மையங்களுக்கு இடையில் நகலெடுக்கப்பட வேண்டும்.

சேமிக்கப்பட்ட தரவின் தேக்ககம் மற்றும் வயதானது தரவுத்தளத்தில் உள்ள சுமையை குறைக்க வேலை செய்கிறது. இந்த வகையான கேச்சிங் செயல்திறனை மேம்படுத்துகிறது, ஆனால் ஒரு வெளிப்படையான சிக்கலை சேர்க்கிறது. ஒரு Keycloak சேவையகம் தரவைப் புதுப்பித்தால், மற்ற சேவையகங்களுக்குத் தெரிவிக்கப்பட வேண்டும், இதனால் அவை தற்காலிக சேமிப்பில் உள்ள தரவைப் புதுப்பிக்க முடியும். Keycloak உள்ளூர் தற்காலிக சேமிப்புகளைப் பயன்படுத்துகிறது realms, users и authorization தரவுத்தளத்திலிருந்து தரவை தேக்ககப்படுத்துவதற்கு.

தனி கேச் ஒன்றும் உள்ளது work, இது எல்லா தரவு மையங்களிலும் பிரதிபலிக்கப்படுகிறது. இது தரவுத்தளத்திலிருந்து எந்த தரவையும் சேமித்து வைக்காது, ஆனால் தரவு மையங்களுக்கு இடையே உள்ள கிளஸ்டர் முனைகளுக்கு தரவு வயதானது பற்றிய செய்திகளை அனுப்ப உதவுகிறது. வேறு வார்த்தைகளில் கூறுவதானால், தரவு புதுப்பிக்கப்பட்டவுடன், Keycloak முனை அதன் தரவு மையத்தில் உள்ள மற்ற முனைகளுக்கும், மற்ற தரவு மையங்களில் உள்ள முனைகளுக்கும் ஒரு செய்தியை அனுப்புகிறது. அத்தகைய செய்தியைப் பெற்ற பிறகு, ஒவ்வொரு முனையும் அதன் உள்ளூர் தற்காலிக சேமிப்பில் தொடர்புடைய தரவை அழிக்கிறது.

பயனர் அமர்வுகள். பெயர்களுடன் தற்காலிக சேமிப்புகள் sessions, clientSessions, offlineSessions и offlineClientSessions, பொதுவாக தரவு மையங்களுக்கு இடையே நகலெடுக்கப்பட்டு, உலாவியில் பயனர் செயலில் இருக்கும் போது செயலில் இருக்கும் பயனர் அமர்வுகள் பற்றிய தரவைச் சேமிக்க உதவுகிறது. இந்த தற்காலிகச் சேமிப்புகள் இறுதிப் பயனர்களிடமிருந்து HTTP கோரிக்கைகளைச் செயலாக்குகிறது, எனவே அவை ஒட்டும் அமர்வுகளுடன் தொடர்புடையவை மற்றும் தரவு மையங்களுக்கு இடையில் நகலெடுக்கப்பட வேண்டும்.

முரட்டு படை பாதுகாப்பு. தற்காலிக சேமிப்பு loginFailures ஒரு பயனர் எத்தனை முறை தவறான கடவுச்சொல்லை உள்ளிட்டார் என்பது போன்ற உள்நுழைவு பிழைத் தரவைக் கண்காணிக்கப் பயன்படுகிறது. இந்த தற்காலிக சேமிப்பை நகலெடுப்பது நிர்வாகியின் பொறுப்பாகும். ஆனால் துல்லியமான கணக்கீட்டிற்கு, தரவு மையங்களுக்கு இடையில் நகலெடுப்பதை செயல்படுத்துவது மதிப்பு. ஆனால் மறுபுறம், இந்தத் தரவை நீங்கள் நகலெடுக்கவில்லை என்றால், நீங்கள் செயல்திறனை மேம்படுத்துவீர்கள், மேலும் இந்தச் சிக்கல் ஏற்பட்டால், நகலெடுப்பு செயல்படுத்தப்படாமல் போகலாம்.

இன்ஃபினிஸ்பான் கிளஸ்டரை வெளியிடும் போது, ​​அமைப்புகள் கோப்பில் கேச் வரையறைகளைச் சேர்க்க வேண்டும்:

<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" />

Keycloak கிளஸ்டரைத் தொடங்குவதற்கு முன், Infinispan கிளஸ்டரை நீங்கள் கட்டமைத்து தொடங்க வேண்டும்

பின்னர் நீங்கள் கட்டமைக்க வேண்டும் remoteStore Keycloak தற்காலிக சேமிப்புகளுக்கு. இதைச் செய்ய, ஒரு ஸ்கிரிப்ட் போதுமானது, இது முந்தையதைப் போலவே செய்யப்படுகிறது, இது மாறியை அமைக்கப் பயன்படுகிறது. 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 ஐ இயக்க Keycloak முனைகளுக்கு: remote.cache.host, remote.cache.port மற்றும் சேவையின் பெயர் jboss.site.name.

இணைப்புகள் மற்றும் கூடுதல் ஆவணங்கள்

அந்தக் கட்டுரை ஹப்ருக்காக ஊழியர்களால் மொழிபெயர்க்கப்பட்டு தயாரிக்கப்பட்டது சேரி பயிற்சி மையம் பயிற்சி நிபுணர்களிடமிருந்து தீவிர படிப்புகள், வீடியோ படிப்புகள் மற்றும் கார்ப்பரேட் பயிற்சி

ஆதாரம்: www.habr.com

கருத்தைச் சேர்