Kubernetes پر HA موڈ میں Keycloak چل رہا ہے۔

Kubernetes پر HA موڈ میں Keycloak چل رہا ہے۔

TL؛ ڈاکٹر: وہاں Keycloak، ایک اوپن سورس ایکسیس کنٹرول سسٹم، اندرونی ساخت کا تجزیہ، کنفیگریشن کی تفصیلات ہوں گی۔

تعارف اور اہم خیالات

اس مضمون میں، ہم Kubernetes کے اوپر کی کلوک کلسٹر تعینات کرتے وقت ذہن میں رکھنے کے لیے بنیادی خیالات دیکھیں گے۔

اگر آپ Keycloak کے بارے میں مزید جاننا چاہتے ہیں تو مضمون کے آخر میں دیے گئے لنکس کو دیکھیں۔ پریکٹس میں مزید غرق ہونے کے لیے، آپ مطالعہ کر سکتے ہیں۔ ہمارے ذخیرے ایک ماڈیول کے ساتھ جو اس مضمون کے مرکزی خیالات کو نافذ کرتا ہے (لانچ گائیڈ موجود ہے، یہ مضمون آلہ اور ترتیبات کا جائزہ فراہم کرے گا، تقریبا. مترجم).

کی کلوک ایک جامع نظام ہے جو جاوا میں لکھا گیا ہے اور ایک ایپلیکیشن سرور کے اوپر بنایا گیا ہے۔ وائلڈ فلائی. مختصراً، یہ اجازت کے لیے ایک فریم ورک ہے جو ایپلیکیشن صارفین کو فیڈریشن اور SSO (سنگل سائن آن) کی صلاحیتیں دیتا ہے۔

ہم آپ کو سرکاری پڑھنے کی دعوت دیتے ہیں۔ ویب سائٹ یا ویکیپیڈیا تفصیلی تفہیم کے لیے۔

کی کلوک لانچ کرنا

کی کلوک کو چلانے کے لیے ڈیٹا کے دو مستقل ذرائع درکار ہیں:

  • ایک ڈیٹا بیس جو قائم شدہ ڈیٹا کو ذخیرہ کرنے کے لیے استعمال ہوتا ہے، جیسے کہ صارف کی معلومات
  • ڈیٹا گرڈ کیش، جو ڈیٹا بیس سے ڈیٹا کیش کرنے کے ساتھ ساتھ کچھ قلیل المدتی اور بار بار تبدیل ہونے والے میٹا ڈیٹا کو ذخیرہ کرنے کے لیے استعمال ہوتا ہے، جیسے کہ صارف کے سیشن۔ لاگو کیا انفینسپین، جو عام طور پر ڈیٹا بیس سے نمایاں طور پر تیز ہوتا ہے۔ لیکن کسی بھی صورت میں، Infinispan میں محفوظ کردہ ڈیٹا عارضی ہے - اور جب کلسٹر دوبارہ شروع ہوتا ہے تو اسے کہیں بھی محفوظ کرنے کی ضرورت نہیں ہے۔

کی کلوک چار مختلف طریقوں میں کام کرتا ہے:

  • عام - ایک اور صرف ایک عمل، ایک فائل کے ذریعے ترتیب دیا گیا ہے۔ standalone.xml
  • باقاعدہ کلسٹر (اعلی دستیابی کا اختیار) - تمام عمل کو ایک ہی ترتیب کا استعمال کرنا چاہیے، جسے دستی طور پر مطابقت پذیر ہونا چاہیے۔ ترتیبات ایک فائل میں محفوظ ہیں۔ standalone-ha.xmlاس کے علاوہ آپ کو ڈیٹا بیس تک مشترکہ رسائی اور لوڈ بیلنس کرنے کی ضرورت ہے۔
  • ڈومین کلسٹر - جیسے جیسے کلسٹر بڑھتا ہے عام موڈ میں کلسٹر شروع کرنا ایک معمول اور بورنگ کام بن جاتا ہے، چونکہ جب بھی کنفیگریشن تبدیل ہوتی ہے، تمام تبدیلیاں ہر کلسٹر نوڈ پر ہونی چاہئیں۔ آپریشن کا ڈومین موڈ کچھ مشترکہ اسٹوریج لوکیشن ترتیب دے کر اور کنفیگریشن شائع کر کے اس مسئلے کو حل کرتا ہے۔ یہ ترتیبات فائل میں محفوظ ہیں۔ domain.xml
  • ڈیٹا سینٹرز کے درمیان نقل — اگر آپ Keycloak کو کئی ڈیٹا سینٹرز کے کلسٹر میں چلانا چاہتے ہیں، اکثر مختلف جغرافیائی مقامات پر۔ اس آپشن میں، ہر ڈیٹا سینٹر کا اپنا کی کلوک سرورز کا کلسٹر ہوگا۔

اس مضمون میں ہم دوسرے آپشن پر تفصیل سے غور کریں گے، یعنی باقاعدہ کلسٹر، اور ہم ڈیٹا سینٹرز کے درمیان نقل کے موضوع پر بھی تھوڑا سا چھوئیں گے، کیونکہ یہ دونوں اختیارات کوبرنیٹس میں چلانا سمجھ میں آتا ہے۔ خوش قسمتی سے، Kubernetes میں کئی پوڈز (Keycloak nodes) کی سیٹنگز کو سنکرونائز کرنے میں کوئی مسئلہ نہیں ہے، لہذا ڈومین کلسٹر یہ کرنا بہت مشکل نہیں ہوگا۔

یہ بھی نوٹ کریں کہ لفظ جھرمٹ باقی مضمون کے لیے مکمل طور پر ایک ساتھ کام کرنے والے Keycloak نوڈس کے گروپ پر لاگو ہوگا، Kubernetes کلسٹر کا حوالہ دینے کی ضرورت نہیں ہے۔

باقاعدہ کی کلوک کلسٹر

اس موڈ میں کی کلوک چلانے کے لیے آپ کو ضرورت ہے:

  • بیرونی مشترکہ ڈیٹا بیس کو ترتیب دیں۔
  • لوڈ بیلنسر انسٹال کریں۔
  • IP ملٹی کاسٹ سپورٹ کے ساتھ ایک اندرونی نیٹ ورک ہے۔

ہم بیرونی ڈیٹا بیس کے قیام پر بات نہیں کریں گے، کیونکہ یہ اس مضمون کا مقصد نہیں ہے۔ آئیے فرض کریں کہ کہیں کام کرنے والا ڈیٹا بیس ہے - اور ہمارے پاس اس کا ایک کنکشن پوائنٹ ہے۔ ہم صرف اس ڈیٹا کو ماحولیاتی متغیرات میں شامل کریں گے۔

فیل اوور (HA) کلسٹر میں Keycloak کیسے کام کرتا ہے اس کو بہتر طور پر سمجھنے کے لیے، یہ جاننا ضروری ہے کہ یہ سب وائلڈ فلائی کی کلسٹرنگ کی صلاحیتوں پر کتنا منحصر ہے۔

وائلڈ فلائی کئی ذیلی نظاموں کا استعمال کرتا ہے، ان میں سے کچھ کو لوڈ بیلنس کے طور پر استعمال کیا جاتا ہے، کچھ غلطی کو برداشت کرنے کے لیے۔ لوڈ بیلنسر ایپلیکیشن کی دستیابی کو یقینی بناتا ہے جب ایک کلسٹر نوڈ اوور لوڈ ہوتا ہے، اور فالٹ ٹولرنس ایپلی کیشن کی دستیابی کو یقینی بناتا ہے چاہے کچھ کلسٹر نوڈس ناکام ہوں۔ ان میں سے کچھ ذیلی نظام:

  • mod_cluster: HTTP لوڈ بیلنسر کے طور پر Apache کے ساتھ مل کر کام کرتا ہے، پہلے سے طے شدہ میزبانوں کو تلاش کرنے کے لیے TCP ملٹی کاسٹ پر منحصر ہے۔ ایک بیرونی بیلنسر کے ساتھ تبدیل کیا جا سکتا ہے.

  • infinispan: نقل و حمل کی تہہ کے طور پر JGroups چینلز کا استعمال کرتے ہوئے ایک تقسیم شدہ کیش۔ مزید برآں، یہ HotRod پروٹوکول کا استعمال کرتے ہوئے کیشے کے مواد کو ہم آہنگ کرنے کے لیے ایک بیرونی Infinispan کلسٹر کے ساتھ بات چیت کر سکتا ہے۔

  • jgroups: JGroups چینلز پر مبنی انتہائی دستیاب خدمات کے لیے گروپ کمیونیکیشن سپورٹ فراہم کرتا ہے۔ نام والے پائپ کلسٹر میں ایپلیکیشن کی مثالوں کو گروپوں میں جوڑنے کی اجازت دیتے ہیں تاکہ مواصلات میں قابل اعتمادی، ترتیب اور ناکامیوں کی حساسیت جیسی خصوصیات ہوں۔

لوڈ بیلنسر

کبرنیٹس کلسٹر میں ایک انگریس کنٹرولر کے طور پر بیلنسر انسٹال کرتے وقت، درج ذیل چیزوں کو ذہن میں رکھنا ضروری ہے:

Keycloak فرض کرتا ہے کہ HTTP کے ذریعے تصدیقی سرور سے جڑنے والے کلائنٹ کا ریموٹ ایڈریس کلائنٹ کمپیوٹر کا حقیقی IP پتہ ہے۔ بیلنسر اور اندراج کی ترتیبات کو 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 میں ایک ری ڈائریکٹ لوپ ہے، لہذا ہم چپچپا سیشن کے لیے ایک مختلف کوکی کا نام منتخب کرنے کی تجویز کرتے ہیں۔

Keycloak اس نوڈ کا نام بھی منسلک کرتا ہے جس نے پہلے جواب دیا تھا۔ AUTH_SESSION_ID، اور چونکہ انتہائی دستیاب ورژن میں ہر نوڈ ایک ہی ڈیٹا بیس کا استعمال کرتا ہے، ان میں سے ہر ایک ہونا ضروری ہے لین دین کے انتظام کے لیے ایک علیحدہ اور منفرد نوڈ شناخت کنندہ۔ ڈالنے کی سفارش کی جاتی ہے۔ JAVA_OPTS پیرامیٹرز jboss.node.name и jboss.tx.node.id ہر نوڈ کے لیے منفرد - آپ مثال کے طور پر پوڈ کا نام رکھ سکتے ہیں۔ اگر آپ پوڈ کا نام رکھتے ہیں، تو jboss متغیرات کے لیے 23 حروف کی حد کے بارے میں مت بھولنا، لہذا یہ بہتر ہے کہ تعیناتی کے بجائے ایک StatefulSet استعمال کریں۔

ایک اور ریک - اگر پوڈ کو حذف یا دوبارہ شروع کیا جاتا ہے، تو اس کا ذخیرہ ضائع ہو جاتا ہے۔ اس کو مدنظر رکھتے ہوئے، تمام کیشز کے لیے کیش کے مالکان کی تعداد کو کم از کم دو کرنے کے قابل ہے، تاکہ کیش کی ایک کاپی باقی رہے۔ حل یہ ہے کہ چلایا جائے۔ وائلڈ فلائی کے لیے اسکرپٹ پوڈ شروع کرتے وقت، اسے ڈائرکٹری میں رکھنا /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 استعمال کرتے ہیں تو ملٹی کاسٹ فوری طور پر کام کرے گا - اور آپ کے کی کلوک نوڈس لانچ ہوتے ہی ایک دوسرے کو دیکھیں گے۔

اگر آپ کو اپنے Kubernetes کلسٹر میں ip ملٹی کاسٹ سپورٹ نہیں ہے، تو آپ 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.

️ اگر آپ ملٹی کاسٹ استعمال کرتے ہیں اور ایک Kubernetes کلسٹر میں دو یا دو سے زیادہ Keycloak کلسٹر چلاتے ہیں (آئیے ایک نام کی جگہ میں کہتے ہیں production، دوسرا - staging) - ایک Keycloak کلسٹر کے نوڈس دوسرے کلسٹر میں شامل ہو سکتے ہیں۔ متغیرات کو ترتیب دے کر ہر کلسٹر کے لیے ایک منفرد ملٹی کاسٹ ایڈریس استعمال کرنا یقینی بنائیںjboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

ڈیٹا سینٹرز کے درمیان نقل

Kubernetes پر HA موڈ میں Keycloak چل رہا ہے۔

رابطہ کریں

Keycloak ہر ڈیٹا سینٹر کے لیے متعدد علیحدہ Infinispan کیش کلسٹرز کا استعمال کرتا ہے جہاں Keycloak نوڈس پر مشتمل Keycloack کلسٹرز واقع ہوتے ہیں۔ لیکن مختلف ڈیٹا سینٹرز میں Keycloak نوڈس کے درمیان کوئی فرق نہیں ہے۔

کی کلوک نوڈس ڈیٹا سینٹرز کے درمیان مواصلت کے لیے ایک بیرونی جاوا ڈیٹا گرڈ (Infinispan سرورز) استعمال کرتے ہیں۔ مواصلات پروٹوکول کے مطابق کام کرتا ہے۔ Infinispan HotRod.

Infinispan caches کو انتساب کے ساتھ کنفیگر کیا جانا چاہیے۔ remoteStoreتاکہ ڈیٹا کو دور سے محفوظ کیا جا سکے (دوسرے ڈیٹا سینٹر میں، تقریبا. مترجم) کیچز۔ JDG سرورز کے درمیان الگ الگ انفینسپین کلسٹرز ہیں، تاکہ JDG1 پر ڈیٹا کو سائٹ پر محفوظ کیا جا سکے۔ site1 سائٹ پر JDG2 پر نقل کیا جائے گا۔ site2.

اور آخر میں، وصول کرنے والا JDG سرور کلائنٹ کنکشنز کے ذریعے اپنے کلسٹر کے Keycloak سرورز کو مطلع کرتا ہے، جو HotRod پروٹوکول کی ایک خصوصیت ہے۔ کی کلوک نوڈس آن site2 ان کے Infinispan کیشز کو اپ ڈیٹ کریں اور مخصوص صارف سیشن Keycloak نوڈس پر بھی دستیاب ہو جائے گا۔ site2.

کچھ کیشز کے لیے، بیک اپ نہ بنانا اور مکمل طور پر Infinispan سرور کے ذریعے ڈیٹا لکھنے سے گریز کرنا بھی ممکن ہے۔ ایسا کرنے کے لیے آپ کو سیٹنگ کو ہٹانا ہوگا۔ remote-store مخصوص Infinispan کیشے (فائل میں standalone-ha.xml)، جس کے بعد کچھ مخصوص replicated-cache Infinispan سرور سائیڈ پر بھی مزید ضرورت نہیں رہے گی۔

کیچز کو ترتیب دینا

Keycloak میں دو قسم کے کیش ہیں:

  • مقامی یہ ڈیٹا بیس کے ساتھ واقع ہے اور ڈیٹا بیس پر بوجھ کو کم کرنے کے ساتھ ساتھ ردعمل میں تاخیر کو کم کرنے کا کام کرتا ہے۔ اس قسم کی کیش دائرے، کلائنٹس، رولز اور صارف کے میٹا ڈیٹا کو اسٹور کرتی ہے۔ اس قسم کے کیشے کو نقل نہیں کیا جاتا ہے، چاہے کیشے کی کلوک کلسٹر کا حصہ ہو۔ اگر کیشے میں کوئی اندراج تبدیل ہوتا ہے تو، تبدیلی کے بارے میں ایک پیغام کلسٹر میں باقی سرورز کو بھیجا جاتا ہے، جس کے بعد اندراج کو کیش سے خارج کر دیا جاتا ہے۔ تفصیل دیکھیں work طریقہ کار کی مزید تفصیلی وضاحت کے لیے ذیل میں ملاحظہ کریں۔

  • نقل شدہ۔ صارف کے سیشنز، آف لائن ٹوکنز پر کارروائی کرتا ہے، اور پاس ورڈ فشنگ کی کوششوں اور دیگر حملوں کا پتہ لگانے کے لیے لاگ ان کی غلطیوں پر بھی نظر رکھتا ہے۔ ان کیشز میں ذخیرہ کردہ ڈیٹا عارضی ہے، صرف RAM میں ذخیرہ کیا جاتا ہے، لیکن اسے پورے کلسٹر میں نقل کیا جا سکتا ہے۔

Infinispan caches

سیشن - Keycloak میں ایک تصور، علیحدہ کیش کہلاتا ہے۔ authenticationSessions، مخصوص صارفین کے ڈیٹا کو ذخیرہ کرنے کے لیے استعمال کیا جاتا ہے۔ ان کیچز سے درخواستیں عام طور پر براؤزر اور کیکلوک سرورز کو درکار ہوتی ہیں، ایپلیکیشنز کی نہیں۔ یہ وہ جگہ ہے جہاں چپچپا سیشنز پر انحصار کام میں آتا ہے، اور اس طرح کے کیچز کو خود ہی نقل کرنے کی ضرورت نہیں ہے، یہاں تک کہ ایکٹیو ایکٹو موڈ کے معاملے میں بھی۔

ایکشن ٹوکنز. ایک اور تصور، عام طور پر مختلف منظرناموں کے لیے استعمال کیا جاتا ہے جب، مثال کے طور پر، صارف کو میل کے ذریعے متضاد طور پر کچھ کرنا چاہیے۔ مثال کے طور پر، طریقہ کار کے دوران forget password کیشے actionTokens متعلقہ ٹوکنز کے میٹا ڈیٹا کو ٹریک کرنے کے لیے استعمال کیا جاتا ہے - مثال کے طور پر، ایک ٹوکن پہلے ہی استعمال ہو چکا ہے اور اسے دوبارہ فعال نہیں کیا جا سکتا۔ اس قسم کے کیشے کو عام طور پر ڈیٹا سینٹرز کے درمیان نقل کرنے کی ضرورت ہوتی ہے۔

ذخیرہ شدہ ڈیٹا کی کیشنگ اور عمر بڑھنا ڈیٹا بیس پر بوجھ کو دور کرنے کے لیے کام کرتا ہے۔ اس قسم کی کیشنگ کارکردگی کو بہتر بناتی ہے، لیکن ایک واضح مسئلہ کا اضافہ کرتی ہے۔ اگر ایک Keycloak سرور ڈیٹا کو اپ ڈیٹ کرتا ہے، تو دوسرے سرورز کو مطلع کیا جانا چاہیے تاکہ وہ اپنے کیشز میں ڈیٹا کو اپ ڈیٹ کر سکیں۔ کی کلوک مقامی کیشز کا استعمال کرتا ہے۔ 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" />

Keycloak کلسٹر شروع کرنے سے پہلے آپ کو 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 چلانے کے لیے Keycloak نوڈس کے لیے: remote.cache.host, remote.cache.port اور خدمت کا نام jboss.site.name.

لنکس اور اضافی دستاویزات

مضمون کا ترجمہ اور ملازمین نے حبر کے لیے تیار کیا تھا۔ سلم ٹریننگ سینٹر — پریکٹس کرنے والے ماہرین کی طرف سے سخت کورسز، ویڈیو کورسز اور کارپوریٹ ٹریننگ (Kubernetes، DevOps، Docker، Ansible، Ceph، SRE)

ماخذ: www.habr.com

نیا تبصرہ شامل کریں