Workstation Logo
مصنوعات
AI لیبزOpenAI ایجنٹسClaude ایجنٹسGrok BotWorkstation CRM (WSL CRM)مارکیٹنگتمام مصنوعات
AI حل
AI ورک سٹیشنزAI SME Packagesپرائیویٹ AIGPU کلسٹرزایج AIانٹرپرائز AI لیبصنعت کے مطابق AI
خدمات
Platform ModernisationDigital EngineeringData Foundations & AIAutonomous OperationsAI مشاورتDevOps آٹومیشنسائبر سیکیورٹیسافٹ ویئر ڈیولپمنٹایجنٹ بلڈنگMLOps سیٹ اپ
ہمارے بارے میں
شراکت دارگاہکوں کی کہانیاں
مضامین
دستاویزات
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
بلاگ
ہم سے رابطہ کریںLogin
Workstation

جدید کاروبار کے لیے AI ورک اسٹیشنز، AI ملٹی ایجنٹک سافٹ ویئر، GPU انفراسٹرکچر اور ذہین ایجنٹ حل۔

ہم سے رابطہ کریں

AI حل

AI ورک سٹیشنزAI SME Packagesپرائیویٹ AIGPU کلسٹرزایج AIانٹرپرائز AI لیبصنعت کے مطابق AI

مصنوعات

تمام مصنوعاتWSL CRM اور ERPمارکیٹنگOpenAI ایجنٹسWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

کمپنی

ہمارے بارے میںWorkstation کیوںشراکت دارگاہکوں کی کہانیاںقیمتیںرابطہ

وسائل

مضامیندستاویزاتبلاگتلاشسائٹ میپ
برطانیہ آفس
77-79 Marlowes, Hemel Hempstead HP1 1LFراستہ - M25 آؤٹر لندن سے جنکشن 20 لیںکمپنی نمبر: 11641870پیر - جمعہ: صبح 9:00 - شام 6:00 GMT
+44 7515 356 146
بیلجیم آفس
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683پیر - جمعہ: صبح 9:00 - شام 6:00 CET
+32 492 45 67 46
بھارت آفس
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI۔ جملہ حقوق محفوظ ہیں۔

رازداریکوکیزسروس کی شرائطویب سائٹ سائٹ میپ

Loading blog...

Home / Blog
DatabaseKubernetesDevOpsBackend

پیداوار میں Redis اعلی دستیابی: سینٹینیل، کلسٹر، اور Kubernetes آپریٹرز

Redis HA سینٹینیل، کلسٹر موڈ، اور Kubernetes آپریٹرز کے ساتھ

Balinder Walia12 اپریل، 202647 min read

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

یہ گائیڈ Redis اعلی دستیابی میں ایک جامع، پیداوار پر مرکوز گہری غوطہ ہے۔ ہم Redis ریپلیکیشن کے بنیادی اصولوں کا احاطہ کریں گے (غیر مطابقت پذیر نقل، WAIT کمانڈ، اور جزوی دوبارہ مطابقت پذیری)، خودکار فیل اوور اور سروس کی دریافت کے لیے Redis سینٹینیل، ہیش سلاٹ کی تقسیم کے ساتھ افقی اسکیلنگ کے لیے Redis کلسٹر، Kubernetes آپریٹرز، Kubernetes آپریٹرز (SpotreeX)، ایکس پی آر 4 ایکس آپریٹرز حکمت عملی (RDB سنیپ شاٹس، AOF، اور ہائبرڈ استقامت)، AWS ElastiCache پر کلاؤڈ کے زیر انتظام تعیناتیاں، Redis کے لیے Azure کیش، اور GCP میموری اسٹور، رینچر اور لانگ ہارن کے ساتھ ننگی دھاتی k3s کی تعیناتیاں، میموری مینجمنٹ اور بے دخلی کی پالیسیاں، XPRPX کنٹرول پالیسیاں، ایکس پی آر ایکس سی ایل ایکس سی ایل کنٹرول HA کنفیگریشنز میں پب/سب اور اسٹریمز کا رویہ، HA میں Redis ماڈیولز (RedisJSON، RediSearch، RedisTimeSeries)، کنکشن پولنگ اور فیل اوور لچک کے لیے کلائنٹ کنفیگریشن، بیک اپ اور بحالی کی حکمت عملی، Redis INFO کے ساتھ مانیٹرنگ، Redis INFO اور ایکسپورٹ ایکسپورٹ بورڈ، ایکس پی آر 3 ایکسپورٹ اور ایکسپورٹ بورڈ۔ KeyDB بطور Redis-مطابقت پذیر متبادل، پائپ لائننگ کے ساتھ پرفارمنس ٹیوننگ، Lua اسکرپٹنگ، اور میموری آپٹیمائزیشن، عام ناکامی کے منظرنامے اور ٹربل شوٹنگ کے طریقہ کار، اور صلاحیت کی منصوبہ بندی اور اسکیلنگ کی حکمت عملی۔

Redis نقل کے بنیادی اصول

Redis نقل وہ بنیاد ہے جس پر تمام اعلیٰ دستیابی کے فن تعمیرات بنائے گئے ہیں۔ ایک Redis ماسٹر مثال تحریروں کو قبول کرتا ہے اور متضاد طور پر ان کو ایک یا زیادہ نقل مثالوں میں پھیلاتا ہے۔ نقلیں ماسٹر کے ڈیٹاسیٹ کی قریب قریب ریئل ٹائم کاپی کو برقرار رکھتی ہیں اور پڑھنے کے سوالات پیش کرتی ہیں، ڈیٹا کی فالتو پن اور پڑھنے کی اسکیل ایبلٹی دونوں فراہم کرتی ہیں۔

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

اسینکرونس ریپلیکیشن اور WAIT کمانڈ

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

WAITکمانڈ ایک ہم وقت ساز نقل تیار کرتی ہے۔ تحریر جاری کرنے کے بعد، کلائنٹ اس وقت تک بلاک کرنے کے لیےWAIT numreplicas timeoutکو کال کر سکتا ہے جب تک کہ نقل کی مخصوص تعداد تحریر کو تسلیم نہ کر لے یا ٹائم آؤٹ ختم نہ ہو جائے۔ یہ Redis کو مکمل طور پر مطابقت پذیر نہیں بناتا ہے —WAITصرف اس بات کی ضمانت دیتا ہے کہ نقلوں کو ڈیٹا موصول ہوا ہے، یہ نہیں کہ اسے نقل پر ڈسک پر برقرار رکھا گیا ہے۔ تاہم، یہ ڈیٹا ضائع ہونے والی ونڈو کو نمایاں طور پر کم کرتا ہے۔

# Write a critical value and wait for 2 replicas to acknowledge
SET order:12345 '{"status":"confirmed","amount":599.99}'
WAIT 2 5000
# Returns the number of replicas that acknowledged within 5000ms
# Returns 0 if no replica acknowledged (timeout or no replicas connected)

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

جزوی دوبارہ مطابقت پذیری (PSYNC)

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

# redis.conf — Replication backlog configuration
repl-backlog-size 256mb          # Size of the replication backlog buffer
repl-backlog-ttl 3600            # Seconds to retain backlog after last replica disconnects
repl-diskless-sync yes           # Transfer RDB via socket instead of disk (faster for full sync)
repl-diskless-sync-delay 5       # Wait 5s for more replicas before starting diskless sync
repl-diskless-sync-period 0      # No periodic full sync
repl-diskless-load on-empty-db   # Replica loads RDB from socket directly into memory

نقل کے بیک لاگ کو درست طریقے سے سائز کرنا اہم ہے۔ یہ اتنا بڑا ہونا چاہئے کہ سب سے طویل متوقع ریپلیکا منقطع ہونے کے دوران تیار کردہ تمام تحریری کمانڈز کو روک سکے۔ ایک Redis مثال کے لیے 50MB/s تحریری ٹریفک پر کارروائی کرنے کے لیے، ایک 256MB بیک لاگ تقریباً 5 سیکنڈ کی تحریروں پر محیط ہوتا ہے — اگر آپ کی نقلیں طویل عرصے تک آف لائن ہو سکتی ہیں تو اس میں اضافہ کریں۔

Master-Replica Replication کو ترتیب دینا

# redis.conf — Master configuration
bind 0.0.0.0
port 6379
protected-mode no
requirepass strong_master_password
masterauth strong_master_password

# Persistence
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

# Replication
repl-backlog-size 256mb
repl-backlog-ttl 3600
repl-diskless-sync yes
min-replicas-to-write 1          # Refuse writes if fewer than 1 replica connected
min-replicas-max-lag 10          # Replica considered disconnected if lag > 10 seconds
# redis.conf — Replica configuration
bind 0.0.0.0
port 6379
protected-mode no
requirepass strong_master_password
masterauth strong_master_password

replicaof master-host 6379
replica-read-only yes
replica-serve-stale-data yes     # Serve (possibly stale) data during sync
replica-priority 100             # Lower values get promoted first by Sentinel

min-replicas-to-writeاورmin-replicas-max-lagکی ترتیبات ماسٹر کو تحریروں کو قبول کرنے سے روکتی ہیں جب وہ نقل پر ڈیٹا کے استحکام کی ضمانت نہیں دے سکتا۔ یہ ایک اہم حفاظتی جال ہے — اس کے بغیر، نیٹ ورک سے تقسیم شدہ ماسٹر ایسی تحریروں کو قبول کرتا رہتا ہے جو سینٹینیل کے نقل کو فروغ دینے پر ختم ہو جائیں گی۔

Redis سینٹینیل: خودکار فیل اوور اور سروس ڈسکوری

Redis سینٹینیل ایک تقسیم شدہ نظام ہے جو Redis ماسٹر اور ریپلیکا مثالوں کی نگرانی کرتا ہے، ماسٹر کی ناکامیوں کا پتہ لگاتا ہے، ایک نقل کو ماسٹر پر ترقی دے کر خودکار فیل اوور انجام دیتا ہے، اور سروس کی دریافت فراہم کرتا ہے تاکہ کلائنٹس ہمیشہ موجودہ ماسٹر کو تلاش کر سکیں۔ سینٹینیل Redis کے ساتھ ایک الگ عمل کے طور پر چلتا ہے اور ایک متفقہ پروٹوکول کے ذریعے کام کرتا ہے - سینٹینیل مثالوں کے ایک کورم کو اس بات پر متفق ہونا چاہیے کہ فیل اوور شروع کرنے سے پہلے ایک ماسٹر ناقابل رسائی ہے۔

Redis سینٹینیل آرکیٹیکچر - خودکار فیل اوور & سروس ڈسکوریایپلیکیشن کلائنٹسسینٹینیل کلسٹر (کورم = 2)سینٹینیل 1 :26379سینٹینیل 2 :26379سینٹینیل 3 :26379SENTINEL get-master-addr-by-nameRedis ماسٹرnode1 — 10.0.1.10:6379پڑھیں/لکھیں — پرائمریPING مانیٹرنگٹریفکلکھیں۔نقل 1node2 — 10.0.1.11:6379صرف پڑھنے کے لیے — ترجیحی 100ریپلیکا 2node3 — 10.0.1.12:6379صرف پڑھنے کے لیے — ترجیحی 100async نقلasync نقلفیل اوور: ماسٹر فیل ہو جاتا ہے → سینٹینیل نےکو منتخب کیا۔نقل کو فروغ دیا گیا → کلائنٹ سینٹینیلکے ذریعے دوبارہ جڑتے ہیں۔ODOWN کوکا پتہ چلاLegendماسٹر (RW)ریپلیکا (RO)سینٹینیلفیل اوور پاتھ

سینٹینیل کنفیگریشن

سینٹینیل کو ایک سینٹینیل کی ناکامی کو برداشت کرنے اور پھر بھی کورم کو برقرار رکھنے کے لیے کم از کم تین مثالوں کی ضرورت ہوتی ہے۔ ہر سینٹینیل ایک ہی Redis ماسٹر کی نگرانی کرتا ہے اور ماسٹر کی صحت کی حیثیت پر متفق ہونے کے لیے گپ شپ پروٹوکول کے ذریعے دوسرے سینٹینیلز کے ساتھ بات چیت کرتا ہے۔

# /etc/redis/sentinel.conf — Sentinel instance configuration
port 26379
bind 0.0.0.0
protected-mode no

# Monitor the master named "mymaster" at 10.0.1.10:6379
# The quorum value (2) means 2 Sentinels must agree the master is down
sentinel monitor mymaster 10.0.1.10 6379 2

# Authentication
sentinel auth-pass mymaster strong_master_password

# Timing parameters
sentinel down-after-milliseconds mymaster 5000    # SDOWN after 5s of no PING response
sentinel failover-timeout mymaster 60000          # Max 60s for failover procedure
sentinel parallel-syncs mymaster 1                # Only 1 replica syncs from new master at a time

# Deny script execution for security
sentinel deny-scripts-reconfig yes

# Notification script (called on failover events)
# sentinel notification-script mymaster /opt/redis/notify.sh

# Client reconfiguration script (called when master changes)
# sentinel client-reconfig-script mymaster /opt/redis/reconfig.sh

# Logging
logfile /var/log/redis/sentinel.log
logevel notice

# Enable TLS for Sentinel communication
# tls-port 26379
# port 0
# tls-cert-file /etc/redis/tls/sentinel.crt
# tls-key-file /etc/redis/tls/sentinel.key
# tls-ca-cert-file /etc/redis/tls/ca.crt
# tls-replication yes
# tls-auth-clients optional

سینٹینل کی ناکامی کا پتہ لگانا دو مراحل میں کام کرتا ہے۔ سب سے پہلے، ایک فرد سینٹینیل ایک ماسٹر کوSubjectively Down (SDOWN)کے بطور نشان زد کرتا ہے جب اسےdown-after-millisecondsکے اندر PING کا کوئی درست جواب نہیں ملتا ہے۔ پھر، جب سینٹینلز کا ایک کورم اس بات سے اتفاق کرتا ہے کہ ماسٹر ناقابل رسائی ہے، تو اسےObjectively Down (ODOWN)کے طور پر نشان زد کیا جاتا ہے، اور فیل اوور کا عمل شروع ہوتا ہے۔ ایک سینٹینیل کو فیل اوور لیڈر کے طور پر منتخب کیا جاتا ہے، جو بہترین نقل کا انتخاب کرتا ہے (ترجیح، ریپلیکیشن آفسیٹ، اور رنیڈ کی بنیاد پر)، اسے ماسٹر پر ترقی دیتا ہے، نئے ماسٹر کی پیروی کرنے کے لیے بقیہ ریپلیکا کو دوبارہ ترتیب دیتا ہے، اور سینٹینیل اسٹیٹ کو اپ ڈیٹ کرتا ہے۔

سینٹینیل سروس ڈسکوری اور کلائنٹ کنفیگریشن

سٹیٹک ماسٹر ریپلیکا سیٹ اپ پر سینٹینیل کا اہم فائدہ سروس کی دریافت ہے۔ کلائنٹ ایک مقررہ Redis ایڈریس سے منسلک نہیں ہوتے ہیں — وہ سینٹینیل سے موجودہ ماسٹر ایڈریس کے لیے پوچھتے ہیں اور فیل اوور اطلاعات کو سبسکرائب کرتے ہیں۔ ہر بڑی Redis کلائنٹ لائبریری سینٹینیل کو مقامی طور پر سپورٹ کرتی ہے۔

# Node.js — ioredis with Sentinel support
const Redis = require('ioredis');

const redis = new Redis({
  sentinels: [
    { host: '10.0.1.20', port: 26379 },
    { host: '10.0.1.21', port: 26379 },
    { host: '10.0.1.22', port: 26379 }
  ],
  name: 'mymaster',
  password: 'strong_master_password',
  sentinelPassword: 'sentinel_password',
  db: 0,
  retryStrategy(times) {
    const delay = Math.min(times * 200, 5000);
    return delay;
  },
  reconnectOnError(err) {
    const targetError = 'READONLY';
    if (err.message.includes(targetError)) {
      return true; // Reconnect on READONLY error (failover happened)
    }
    return false;
  },
  maxRetriesPerRequest: 3,
  enableReadyCheck: true,
  connectTimeout: 10000,
  lazyConnect: false
});

redis.on('connect', () => console.log('Connected to Redis master'));
redis.on('error', (err) => console.error('Redis error:', err));
redis.on('+switch-master', (msg) => {
  console.log('Master switched:', msg);
});
# Python — redis-py with Sentinel support
from redis.sentinel import Sentinel
import redis

sentinel = Sentinel(
    [('10.0.1.20', 26379), ('10.0.1.21', 26379), ('10.0.1.22', 26379)],
    socket_timeout=5,
    password='strong_master_password',
    sentinel_kwargs={'password': 'sentinel_password'}
)

# Get a connection to the current master (for writes)
master = sentinel.master_for(
    'mymaster',
    socket_timeout=5,
    retry_on_timeout=True,
    db=0
)

# Get a connection to a replica (for reads)
replica = sentinel.slave_for(
    'mymaster',
    socket_timeout=5,
    db=0
)

# Usage
master.set('session:user123', '{"logged_in": true}')
result = replica.get('session:user123')
print(result)
// Go — go-redis with Sentinel support
package main

import (
    "context"
    "fmt"
    "time"

    "github.com/redis/go-redis/v9"
)

func main() {
    ctx := context.Background()

    rdb := redis.NewFailoverClient(&redis.FailoverOptions{
        MasterName:       "mymaster",
        SentinelAddrs:    []string{"10.0.1.20:26379", "10.0.1.21:26379", "10.0.1.22:26379"},
        Password:         "strong_master_password",
        SentinelPassword: "sentinel_password",
        DB:               0,
        DialTimeout:      10 * time.Second,
        ReadTimeout:      5 * time.Second,
        WriteTimeout:     5 * time.Second,
        PoolSize:         50,
        MinIdleConns:     10,
        MaxRetries:       3,
        MinRetryBackoff:  200 * time.Millisecond,
        MaxRetryBackoff:  5 * time.Second,
    })
    defer rdb.Close()

    err := rdb.Set(ctx, "key", "value", 5*time.Minute).Err()
    if err != nil {
        fmt.Printf("Error: %v
", err)
        return
    }

    val, err := rdb.Get(ctx, "key").Result()
    if err != nil {
        fmt.Printf("Error: %v
", err)
        return
    }
    fmt.Printf("key = %s
", val)
}

Redis کلسٹر: ہیش سلاٹس

کے ساتھ افقی اسکیلنگ

جبکہ سینٹینیل ایک واحد ڈیٹاسیٹ کے لیے اعلیٰ دستیابی فراہم کرتا ہے، Redis کلسٹر HA اور افقی اسکیلنگ دونوں فراہم کرتا ہے۔ Redis کلسٹر ڈیٹا کو ہیش سلاٹ میکانزم کا استعمال کرتے ہوئے متعدد ماسٹر نوڈس میں تقسیم کرتا ہے — کی اسپیس کو 16,384 ہیش سلاٹس میں تقسیم کیا گیا ہے، اور ہر ماسٹر ان سلاٹس کے ذیلی سیٹ کے لیے ذمہ دار ہے۔ ہر ماسٹر کے پاس فیل اوور کے لیے ایک یا زیادہ نقلیں ہوتی ہیں۔ کلسٹر اجتماعی طور پر خودکار شارڈنگ، بلٹ ان فیل اوور، اور نوڈس کو شامل کرکے سٹوریج اور تھرو پٹ دونوں کو لکیری طور پر پیمانہ کرنے کی صلاحیت فراہم کرتا ہے۔

Redis کلسٹر آرکیٹیکچر - ہیش سلاٹس & کلائنٹ روٹنگسلاٹس 0-5460سلاٹس 5461-10922سلاٹس 10923-1638316,384 کل ہیش سلاٹس 3 ماسٹرز میں تقسیم کیے گئے (CRC16 mod 16384)اسمارٹ کلائنٹ (کلسٹر سے آگاہ)کلائنٹ کیش سلاٹ نوڈ میپنگ؛ MOVED/ASK ری ڈائریکشنزکو ہینڈل کرتا ہے۔ماسٹر A10.0.1.10:7000سلاٹس: 0-5460~5461 سلاٹس (33.3%)ماسٹر B10.0.1.11:7000سلاٹس: 5461-10922~5462 سلاٹس (33.3%)ماسٹر C10.0.1.12:7000سلاٹس: 10923-16383~5461 سلاٹس (33.3%)ریپلیکا A110.0.1.13:7000ماسٹر A سلاٹسکو نقل کرتا ہے۔ریپلیکا B110.0.1.14:7000ماسٹر B سلاٹسکو نقل کرتا ہے۔ریپلیکا C110.0.1.15:7000ماسٹر C سلاٹسکو نقل کرتا ہے۔کلسٹر بس (پورٹ+10000) - گپ شپ پروٹوکول، ناکامی کا پتہ لگانا، کنفیگ پروپیگیشنہر نوڈ TCP بائنری پروٹوکولکے ذریعے ہر دوسرے نوڈ کے ساتھ PING/PONG کا تبادلہ کرتا ہے۔منتقل 12345 10.0.1.12:7000 — مستقل ری ڈائریکٹ | ASK 12345 10.0.1.12:7000 —کو دوبارہ شیئر کرنے کے دوران ایک بار ری ڈائریکٹ

Redis کلسٹر

ترتیب دے رہا ہے۔
# Create a 6-node Redis Cluster (3 masters + 3 replicas)
# Each node needs a redis.conf with cluster-enabled

# redis.conf for each cluster node (adjust port per node)
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
requirepass cluster_password
masterauth cluster_password
bind 0.0.0.0
protected-mode no
repl-backlog-size 256mb

# Start all 6 Redis instances
redis-server /etc/redis/7000.conf
redis-server /etc/redis/7001.conf
# ... repeat for all 6 nodes

# Create the cluster
redis-cli --cluster create \
  10.0.1.10:7000 10.0.1.11:7000 10.0.1.12:7000 \
  10.0.1.13:7000 10.0.1.14:7000 10.0.1.15:7000 \
  --cluster-replicas 1 \
  -a cluster_password

# Verify cluster status
redis-cli -c -h 10.0.1.10 -p 7000 -a cluster_password cluster info
redis-cli -c -h 10.0.1.10 -p 7000 -a cluster_password cluster nodes

ریشارڈنگ اور ملٹی کلیدی آپریشنز

ریشارڈنگ نوڈس کو شامل کرنے یا ہٹانے کے بعد ڈیٹا کو متوازن کرنے کے لیے ماسٹرز کے درمیان ہیش سلاٹس کو منتقل کرتا ہے۔ دوبارہ شارڈنگ کے دوران، منتقلی کے سلاٹس میں کیز ASK ری ڈائریکشنز حاصل کر سکتی ہیں، جسے کلائنٹ شفاف طریقے سے ہینڈل کرتا ہے۔

# Add a new node to the cluster
redis-cli --cluster add-node 10.0.1.16:7000 10.0.1.10:7000 -a cluster_password

# Reshard slots to the new node
redis-cli --cluster reshard 10.0.1.10:7000 \
  --cluster-from all \
  --cluster-to NEW_NODE_ID \
  --cluster-slots 4096 \
  --cluster-yes \
  -a cluster_password

# Rebalance the cluster automatically
redis-cli --cluster rebalance 10.0.1.10:7000 -a cluster_password

# Check cluster slot distribution
redis-cli -c -h 10.0.1.10 -p 7000 -a cluster_password cluster slots
Redis کلسٹر میں

ملٹی کلیدی آپریشنز صرف اس وقت کام کرتے ہیں جب شامل تمام کلیدیں ایک ہی ہیش سلاٹ میں رہیں۔ ایک ہی سلاٹ پر متعلقہ کلیدوں کے نقشے کو یقینی بنانے کے لیے ہیش ٹیگز کا استعمال کریں:{user:123}.profileاور{user:123}.sessionsدونوں ہیشuser:123پر، اس بات کی ضمانت دیتے ہوئے کہ وہ ایک ہی نوڈ پر اترتے ہیں۔ یہ ایم جی ای ٹی، ایم ایس ای ٹی، لین دین، اور لوا اسکرپٹ کو متعلقہ کلیدوں پر قابل بناتا ہے۔

# Hash tags ensure these keys are in the same slot
SET {order:5000}.details '{"item":"widget","qty":3}'
SET {order:5000}.payment '{"method":"card","status":"paid"}'
SET {order:5000}.shipping '{"carrier":"fedex","tracking":"FX123"}'

# Multi-key operations work because all keys share the {order:5000} hash tag
MGET {order:5000}.details {order:5000}.payment {order:5000}.shipping

# Transaction across same-slot keys
MULTI
SET {order:5000}.details '{"item":"widget","qty":3,"status":"confirmed"}'
SET {order:5000}.payment '{"method":"card","status":"captured"}'
EXEC

Redis آپریٹر Kubernetes

کے لیے

Redis کو Kubernetes میں چلانے کے لیے مستقل اسٹوریج، نیٹ ورک کی شناخت، شاندار فیل اوور، اور کنفیگریشن مینجمنٹ کو احتیاط سے سنبھالنے کی ضرورت ہے۔ Kubernetes آپریٹرز اس آپریشنل علم کو اپنی مرضی کے کنٹرولرز میں انکوڈ کرتے ہیں جو کسٹم ریسورس ڈیفینیشنز (CRDs) کے ذریعے اعلانیہ طور پر Redis کلسٹرز کا انتظام کرتے ہیں۔

Spotahome Redis آپریٹر

Spotahome آپریٹر (جسے redis-operator بھی کہا جاتا ہے) Kubernetes میں Redis سینٹینیل پر مبنی HA کو تعینات کرنے کے لیے ایک بالغ، وسیع پیمانے پر استعمال ہونے والا آپریٹر ہے۔ یہ سینٹینیل پر مبنی فیل اوور کے ساتھ Redis ماسٹر ریپلیکا سیٹ کا انتظام کرتا ہے۔

# Install the Spotahome Redis Operator
helm repo add spotahome https://spotahome.github.io/redis-operator
helm install redis-operator spotahome/redis-operator \
  --namespace redis-system --create-namespace

# RedisFailover CRD — 3 Redis instances + 3 Sentinels
apiVersion: databases.spotahome.com/v1
kind: RedisFailover
metadata:
  name: redis-ha
  namespace: production
spec:
  sentinel:
    replicas: 3
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 200m
        memory: 256Mi
    customConfig:
      down-after-milliseconds: "5000"
      failover-timeout: "60000"
  redis:
    replicas: 3
    resources:
      requests:
        cpu: "2"
        memory: 8Gi
      limits:
        cpu: "4"
        memory: 16Gi
    storage:
      persistentVolumeClaim:
        metadata:
          name: redis-data
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 50Gi
          storageClassName: longhorn
    customConfig:
      maxmemory: "6gb"
      maxmemory-policy: "allkeys-lru"
      save: "900 1 300 10 60 10000"
      appendonly: "yes"
      appendfsync: "everysec"
      aof-use-rdb-preamble: "yes"
      repl-backlog-size: "256mb"
    exporter:
      enabled: true
      image: oliver006/redis_exporter:latest
      args:
        - --include-system-metrics

OpsTree Redis آپریٹر

OpsTree آپریٹر Redis سینٹینیل (اسٹینڈ ایلون HA) اور Redis کلسٹر (شارڈڈ HA) ٹوپولاجی دونوں کو سپورٹ کرتا ہے، جو اسے مختلف استعمال کے معاملات کے لیے زیادہ ورسٹائل بناتا ہے۔

# Install the OpsTree Redis Operator
helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/
helm install redis-operator ot-helm/redis-operator \
  --namespace redis-system --create-namespace

# Redis Cluster CRD — 3 masters + 3 replicas
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: RedisCluster
metadata:
  name: redis-cluster
  namespace: production
spec:
  clusterSize: 3
  clusterVersion: v7
  persistenceEnabled: true
  kubernetesConfig:
    image: redis:7.2-alpine
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        cpu: "2"
        memory: 8Gi
      limits:
        cpu: "4"
        memory: 16Gi
  redisLeader:
    replicas: 3
    redisConfig:
      additionalRedisConfig: |
        maxmemory 6gb
        maxmemory-policy allkeys-lru
        appendonly yes
        appendfsync everysec
  redisFollower:
    replicas: 3
    redisConfig:
      additionalRedisConfig: |
        maxmemory 6gb
        replica-read-only yes
  storage:
    volumeClaimTemplate:
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
        storageClassName: longhorn
  redisExporter:
    enabled: true
    image: quay.io/opstree/redis-exporter:v1.44.0

Redis انٹرپرائز آپریٹر

Redis انٹرپرائز ایک تجارتی Kubernetes آپریٹر فراہم کرتا ہے جس میں ایکٹیو ایکٹو جیو ریپلیکیشن (CRDTs)، Redis ماڈیولز سپورٹ، آٹو ٹائرنگ (RAM + فلیش) اور خودکار کلسٹر مینجمنٹ شامل ہیں۔ یہ ان تنظیموں کے لیے تجویز کردہ آپشن ہے جنہیں انٹرپرائز گریڈ SLAs اور تعاون کی ضرورت ہے۔

# Redis Enterprise Operator CRD
apiVersion: app.redislabs.com/v1
kind: RedisEnterpriseCluster
metadata:
  name: redis-enterprise
  namespace: redis-enterprise
spec:
  nodes: 3
  persistentSpec:
    enabled: true
    storageClassName: longhorn
    volumeSize: 100Gi
  redisEnterpriseNodeResources:
    limits:
      cpu: "8"
      memory: 32Gi
    requests:
      cpu: "4"
      memory: 16Gi
  uiServiceType: ClusterIP
  servicesRiggerSpec:
    databaseServiceType: ClusterIP
---
apiVersion: app.redislabs.com/v1alpha1
kind: RedisEnterpriseDatabase
metadata:
  name: redis-ha-db
  namespace: redis-enterprise
spec:
  memorySize: 10GB
  replication: true
  shardCount: 3
  persistence: aofEverySecond
  tlsMode: enabled
  modulesList:
    - name: search
      version: latest
    - name: json
      version: latest

استقامت کی حکمت عملی: RDB، AOF، اور ہائبرڈ

Redis تین استقامت کا طریقہ کار پیش کرتا ہے۔ صحیح حکمت عملی کا انتخاب آپ کے ریکوری پوائنٹ مقصد (RPO)، کارکردگی کی ضروریات اور اسٹوریج کی رکاوٹوں پر منحصر ہے۔

RDB سنیپ شاٹسترتیب شدہ وقفوں پر پورے ڈیٹا سیٹ کے پوائنٹ ان ٹائم اسنیپ شاٹس بناتے ہیں۔ وہ کمپیکٹ، دوبارہ شروع ہونے پر لوڈ کرنے میں تیز، اور بیک اپ کے لیے مثالی ہیں۔ تاہم، اسنیپ شاٹس کے درمیان لکھا ہوا ڈیٹا کریش پر ضائع ہو جاتا ہے۔ RDB ایک کانٹے دار چائلڈ پروسیس کا استعمال کرتا ہے، اس لیے اسنیپ شاٹ کی تخلیق مرکزی Redis تھریڈ کو مسدود نہیں کرتی ہے — لیکن فورک خود کاپی آن رائٹ میموری ایلوکیشن کی وجہ سے بڑے ڈیٹا سیٹس پر تاخیر کا سبب بن سکتا ہے۔

AOF (صرف فائل شامل کریں)ہر تحریری عمل کو ڈسک پر لاگ کرتا ہے۔ یہ RDB سے کہیں زیادہ بہتر استحکام فراہم کرتا ہے —appendfsync everysecکے ساتھ، آپ کریش ہونے پر زیادہ سے زیادہ ایک سیکنڈ کا ڈیٹا کھو دیتے ہیں۔appendfsync alwaysکے ساتھ، آپ کچھ بھی نہیں کھوتے، لیکن کارکردگی کی ایک اہم قیمت پر۔ AOF فائلیں RDB سے بڑی ہیں اور دوبارہ شروع ہونے پر لوڈ ہونے میں سست ہیں۔

ہائبرڈ استقامت(تجویز کردہ نقطہ نظر) دونوں کو یکجا کرتا ہے:aof-use-rdb-preamble yesAOF فائل کے شروع میں ایک RDB سنیپ شاٹ لکھتا ہے، اس کے بعد بعد کی تحریروں کے لیے AOF اندراجات۔ یہ مضبوط استحکام (AOF سیکشن) کے ساتھ تیز آغاز کے اوقات (RDB سیکشن) دیتا ہے۔

# redis.conf — Hybrid persistence (recommended for production)

# RDB snapshots
save 900 1          # Snapshot if at least 1 write in 900 seconds
save 300 10         # Snapshot if at least 10 writes in 300 seconds
save 60 10000       # Snapshot if at least 10000 writes in 60 seconds
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis

# AOF
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec           # Best balance of durability and performance
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes       # Hybrid: RDB preamble + AOF tail
aof-timestamp-enabled yes      # Enable timestamps for PITR (Redis 7+)

# Recovery options
rdb-del-sync-files no
aof-load-truncated yes

کلاؤڈ مینیجڈ Redis تعیناتیاں

AWS ElastiCache Redis

کے لیے

AWS ElastiCache مکمل طور پر منظم Redis کو دو HA موڈز کے ساتھ پیش کرتا ہے:کلسٹر موڈ ڈس ایبلڈ(سنگل شارڈ، 5 ریپلیکس تک، سینٹینیل جیسا فیل اوور) اورکلسٹر موڈ فعال (ہر ایک کے ساتھ

تک، XTAG350 تک نقلیں، ہیش سلاٹ کی تقسیم)۔ گلوبل ڈیٹا اسٹور تباہی کی بحالی کے لیے کراس ریجن کی نقل فراہم کرتا ہے۔

# AWS CLI — Create ElastiCache Redis Cluster Mode Enabled
aws elasticache create-replication-group \
  --replication-group-id redis-ha-prod \
  --replication-group-description "Production Redis HA Cluster" \
  --engine redis \
  --engine-version 7.1 \
  --cache-node-type cache.r7g.2xlarge \
  --num-node-groups 3 \
  --replicas-per-node-group 2 \
  --automatic-failover-enabled \
  --multi-az-enabled \
  --at-rest-encryption-enabled \
  --transit-encryption-enabled \
  --auth-token strong_auth_token \
  --cache-subnet-group-name redis-subnet-group \
  --security-group-ids sg-0123456789abcdef0 \
  --snapshot-retention-limit 7 \
  --snapshot-window "03:00-05:00" \
  --preferred-maintenance-window "sun:05:00-sun:07:00" \
  --cache-parameter-group-name redis-ha-params \
  --log-delivery-configurations '[
    {"LogType":"slow-log","DestinationType":"cloudwatch-logs","DestinationDetails":{"CloudWatchLogsDetails":{"LogGroup":"/aws/elasticache/redis-ha-prod"}}},
    {"LogType":"engine-log","DestinationType":"cloudwatch-logs","DestinationDetails":{"CloudWatchLogsDetails":{"LogGroup":"/aws/elasticache/redis-ha-prod"}}}
  ]'

# Create Global Datastore for cross-region DR
aws elasticache create-global-replication-group \
  --global-replication-group-id-suffix redis-global \
  --primary-replication-group-id redis-ha-prod

# Add secondary region
aws elasticache create-replication-group \
  --replication-group-id redis-ha-dr \
  --replication-group-description "DR Redis in eu-west-2" \
  --global-replication-group-id ldgnf-redis-global \
  --cache-node-type cache.r7g.2xlarge \
  --num-node-groups 3 \
  --replicas-per-node-group 1 \
  --region eu-west-2

# Custom parameter group for HA tuning
aws elasticache create-cache-parameter-group \
  --cache-parameter-group-name redis-ha-params \
  --cache-parameter-group-family redis7 \
  --description "HA-optimised Redis 7 parameters"

aws elasticache modify-cache-parameter-group \
  --cache-parameter-group-name redis-ha-params \
  --parameter-name-values \
    "ParameterName=maxmemory-policy,ParameterValue=allkeys-lru" \
    "ParameterName=timeout,ParameterValue=300" \
    "ParameterName=tcp-keepalive,ParameterValue=60" \
    "ParameterName=activedefrag,ParameterValue=yes"

Azure کیشے Redis

کے لیے Redis کے لیے

Azure کیش تین درجات فراہم کرتا ہے: بنیادی (کوئی نقل نہیں)، معیاری (نقل شدہ) اور پریمیم/انٹرپرائز۔ پریمیم ٹائر کلسٹرنگ، جیو ریپلیکیشن، زون فالتو پن، VNet انجیکشن، اور ڈیٹا پرسسٹینس کو سپورٹ کرتا ہے۔ انٹرپرائز ٹائر Redis ماڈیولز اور ایکٹیو ایکٹو جیو ڈسٹری بیوشن کو شامل کرتا ہے۔

# Azure CLI — Create Premium Azure Cache for Redis with clustering
az redis create \
  --resource-group redis-ha-rg \
  --name redis-ha-prod \
  --location westeurope \
  --sku Premium \
  --vm-size P3 \
  --shard-count 3 \
  --replicas-per-master 1 \
  --zones 1 2 3 \
  --minimum-tls-version 1.2 \
  --redis-version 7

# Enable geo-replication (link primary to secondary)
az redis server-link create \
  --name redis-ha-prod \
  --resource-group redis-ha-rg \
  --server-to-link /subscriptions/.../redis-ha-dr \
  --replication-role Secondary

# Configure data persistence
az redis update \
  --name redis-ha-prod \
  --resource-group redis-ha-rg \
  --set redisConfiguration.rdb-backup-enabled=true \
  --set redisConfiguration.rdb-backup-frequency=60 \
  --set redisConfiguration.rdb-storage-connection-string="DefaultEndpointsProtocol=https;..."

# Enable diagnostics
az monitor diagnostic-settings create \
  --name redis-diagnostics \
  --resource /subscriptions/.../redis-ha-prod \
  --workspace /subscriptions/.../log-analytics-workspace \
  --metrics '[{"category":"AllMetrics","enabled":true}]'

GCP میموری اسٹور برائے Redis

GCP میموری اسٹور کے دو درجات پیش کرتا ہے:سٹینڈرڈ(آٹومیٹک فیل اوور ریپلیکا کے ساتھ واحد مثال) اورRedis کلسٹر(شارڈڈ، خودکار اسکیلنگ کے ساتھ مکمل طور پر منظم کلسٹر)۔ معیاری درجہ زیادہ تر HA کے استعمال کے کیسز کے لیے موزوں ہے، جبکہ Redis کلسٹر بڑے ڈیٹا سیٹس کو ہینڈل کرتا ہے جس میں افقی اسکیلنگ کی ضرورت ہوتی ہے۔

# GCP — Create Standard tier Memorystore (HA with auto-failover)
gcloud redis instances create redis-ha-prod \
  --size=26 \
  --region=europe-west1 \
  --zone=europe-west1-b \
  --alternative-zone=europe-west1-c \
  --tier=standard \
  --redis-version=redis_7_2 \
  --redis-config="maxmemory-policy=allkeys-lru,activedefrag=yes" \
  --network=projects/my-project/global/networks/vpc-main \
  --transit-encryption-mode=SERVER_AUTHENTICATION \
  --enable-auth \
  --persistence-mode=RDB \
  --rdb-snapshot-period=12h \
  --rdb-snapshot-start-time="2026-04-12T03:00:00Z" \
  --maintenance-window-day=SUNDAY \
  --maintenance-window-hour=4

# GCP — Create Memorystore Redis Cluster
gcloud redis clusters create redis-cluster-prod \
  --region=europe-west1 \
  --shard-count=3 \
  --replica-count=1 \
  --network=projects/my-project/global/networks/vpc-main \
  --transit-encryption-mode=SERVER_AUTHENTICATION

ملٹی ریجن Redis تعیناتی

ملٹی ریجن Redis کی تعیناتی تباہی کی بحالی اور عالمی تاخیر میں کمی کے لیے ضروری ہے۔ نقطہ نظر فن تعمیر کے لحاظ سے مختلف ہوتا ہے: Redis انٹرپرائز حقیقی ملٹی ماسٹر تحریروں کے لیے CRDTs (تصادم سے پاک نقل شدہ ڈیٹا کی اقسام) کے ساتھ ایکٹیو ایکٹیو کا استعمال کرتا ہے، جبکہ اوپن سورس Redis اور کلاؤڈ مینیجڈ سروسز ثانوی علاقوں میں پڑھی ہوئی نقلوں کے ساتھ فعال-غیر فعال نقل کا استعمال کرتی ہیں۔

ملٹی ریجن Redis تعیناتی — ایکٹیو ایکٹیو & کراس ریجن ریپلیکیشنعلاقہ 1 — AWS us-east-1ElastiCache پرائمری3 شارڈز — کلسٹر موڈ فعال2 ریپلیکا فی شارڈپڑھیںملٹی-AZ آٹو فیل اوورریڈر اینڈ پوائنٹ (راؤنڈ رابن ریڈز)گلوبل ڈیٹا اسٹور — بنیادی علاقہریجن 2 — Azure ویسٹروروپAzure کیشے پریمیم3 شارڈز — زون فالتو1 نقل فی شارڈزونز 1, 2, 3جیو ریپلیکیشن پرائمریسے منسلک ہے۔غیر فعال جیو ریپلیکا — async syncریجن 3 — GCP asia-east1میموری اسٹور سٹینڈرڈسنگل شارڈ — آٹو فیل اوورHA نقل (کراس زون)RDB استقامت نےکو فعال کیا۔ریجن 1سےایپ لیول کی نقلصرف پڑھنے کے لیے گرم اسٹینڈ بائیasync geo-replasync کراس ریجن کی نقلRedis انٹرپرائز ایکٹو-ایکٹو (CRDT پر مبنی ملٹی ماسٹر)CRDB مثال AUS — R/W (مکمل مقامی رفتار)CRDB مثال BEU — R/W (مکمل مقامی رفتار)CRDB مثال CAPAC — R/W (مکمل مقامی رفتار)CRDT مطابقت پذیری — کاؤنٹرز، سیٹ، سٹرنگز تمام علاقوں میں تنازعات سے پاک ضم ہوتے ہیںگلوبل DNS / ٹریفک روٹنگ (لیٹنسی پر مبنی)لیجنڈ:ماسٹر/پرائمریریپلیکاAsync کراس ریجنایکٹو-ایکٹو CRDBRPO: فعال غیر فعال ≈ وقفہ کے سیکنڈ | ایکٹو-ایکٹو CRDT ≈ صفر ڈیٹا نقصان (حتمی مستقل مزاجی)

ننگی دھات k3s/رنچر لانگ ہارن

کے ساتھ

اپنے ہارڈ ویئر چلانے والی تنظیموں کے لیے، Redis HA کو ننگی دھات k3s پر تعینات کرنا بنیادی ڈھانچے پر مکمل کنٹرول فراہم کرتا ہے، کلاؤڈ وینڈر لاک ان کو ختم کرتا ہے، اور بڑے پیمانے پر تعیناتیوں کے لیے نمایاں طور پر زیادہ لاگت سے موثر ہو سکتا ہے۔ k3s ایک ہلکا پھلکا، تصدیق شدہ Kubernetes ڈسٹری بیوشن ہے جو کنارے اور ننگی دھاتی ماحول کے لیے مثالی ہے، جبکہ Rancher ملٹی کلسٹر آپریشنز کے لیے ایک انتظامی طیارہ فراہم کرتا ہے۔

ننگی دھات k3s + رینچر — Redis HA سینٹینیل آپریٹرکے ساتھRancher Management UIکلسٹر لائف سائیکل + مانیٹرنگMetalLB لوڈ بیلنسرVIP: 10.0.0.50 (redis-master) & 10.0.0.51 (دوبارہ پڑھیں)k3s کلسٹر - 3 سرور نوڈس (ننگی دھات)Redis آپریٹر (Spotahome/OpsTree)Node 1 — bare-metal-srv1Redis ماسٹر پوڈStatefulSet redis-ha-0 :6379سینٹینیل پوڈ :26379Longhorn PVC (AOF + RDB)50Gi — 3x نوڈس میں نقل کیا گیاredis-exporter sidecar :9121Prometheus میٹرکسNVMe SSD — 2TB لوکل ڈسکNode 2 — bare-metal-srv2Redis ریپلیکا پوڈStatefulSet redis-ha-1 :6379سینٹینیل پوڈ :26379Longhorn PVC (AOF + RDB)50Gi — 3x نوڈس میں نقل کیا گیاredis-exporter sidecar :9121Prometheus میٹرکسNVMe SSD — 2TB لوکل ڈسکNode 3 — bare-metal-srv3Redis ریپلیکا پوڈStatefulSet redis-ha-2 :6379سینٹینیل پوڈ :26379Longhorn PVC (AOF + RDB)50Gi — 3x نوڈس میں نقل کیا گیاredis-exporter sidecar :9121Prometheus میٹرکسNVMe SSD — 2TB لوکل ڈسکلیجنڈ:ماسٹرریپلیکاسینٹینیلLonghorn PVCبرآمد کنندہMetalLBآپریٹررینچرk3s ہلکا پھلکا Kubernetes فراہم کرتا ہے۔ Longhorn NVMe SSDs میں 3x نقل کے ساتھ تقسیم شدہ بلاک اسٹوریج فراہم کرتا ہے۔MetalLB Redis ماسٹر (لکھنا) اور Redis پڑھنے (نقل) خدمات کے لیے مستحکم لوڈ بیلنسر IPs تفویض کرتا ہے۔ رینچر کلسٹر لائف سائیکل کا انتظام کرتا ہے۔

k3s تنصیب اور Redis آپریٹر کی تعیناتی

# Install k3s on the first server node
curl -sfL https://get.k3s.io | K3S_TOKEN=redis-cluster-token \
  INSTALL_K3S_EXEC="server --cluster-init --disable traefik --disable servicelb" sh -

# Join additional server nodes
curl -sfL https://get.k3s.io | K3S_TOKEN=redis-cluster-token \
  K3S_URL=https://10.0.0.1:6443 \
  INSTALL_K3S_EXEC="server" sh -

# Install Longhorn for distributed block storage
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system --create-namespace \
  --set defaultSettings.defaultDataPath=/mnt/longhorn \
  --set defaultSettings.replicaCount=3 \
  --set defaultSettings.storageMinimalAvailablePercentage=15

# Install MetalLB for bare-metal LoadBalancer services
helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb --namespace metallb-system --create-namespace

# Configure MetalLB IP address pool
kubectl apply -f - <

Redis HA Helm قدریں k3s

کے لیے
# values-redis-ha.yaml — Helm values for Redis HA on k3s/Longhorn
redis:
  replicas: 3
  resources:
    requests:
      cpu: "2"
      memory: 8Gi
    limits:
      cpu: "4"
      memory: 16Gi
  storage:
    persistentVolumeClaim:
      metadata:
        name: redis-data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
        storageClassName: longhorn
  customConfig:
    maxmemory: "6gb"
    maxmemory-policy: "allkeys-lru"
    save: "900 1 300 10 60 10000"
    appendonly: "yes"
    appendfsync: "everysec"
    aof-use-rdb-preamble: "yes"
    repl-backlog-size: "256mb"
    tcp-keepalive: "60"
    timeout: "300"
    hz: "10"
    activedefrag: "yes"
  exporter:
    enabled: true
    image: oliver006/redis_exporter:latest

sentinel:
  replicas: 3
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 200m
      memory: 256Mi
  customConfig:
    down-after-milliseconds: "5000"
    failover-timeout: "60000"
    parallel-syncs: "1"

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
            - key: app.kubernetes.io/component
              operator: In
              values:
                - redis
        topologyKey: kubernetes.io/hostname

میموری مینجمنٹ اور بے دخلی کی پالیسیاں

Redis تمام ڈیٹا کو میموری میں محفوظ کرتا ہے، جس سے میموری کا انتظام سب سے اہم آپریشنل تشویش ہے۔ جب Redis ترتیب شدہmaxmemoryکی حد تک پہنچ جاتا ہے، تو اسے یہ فیصلہ کرنا چاہیے کہ آنے والی تحریری کمانڈز کے ساتھ کیا کرنا ہے۔ بے دخلی کی پالیسی اس رویے کو کنٹرول کرتی ہے۔

# redis.conf — Memory management
maxmemory 6gb
maxmemory-policy allkeys-lru

# Available eviction policies:
# noeviction        — Return errors on writes when memory limit reached
# allkeys-lru       — Evict least recently used keys (general-purpose cache)
# allkeys-lfu       — Evict least frequently used keys (better for skewed access patterns)
# volatile-lru      — Evict LRU keys with TTL set
# volatile-lfu      — Evict LFU keys with TTL set
# volatile-ttl      — Evict keys with shortest TTL first
# allkeys-random    — Evict random keys
# volatile-random   — Evict random keys with TTL set

# Active defragmentation (Redis 4.0+)
activedefrag yes
active-defrag-enabled yes
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower 10
active-defrag-threshold-upper 100
active-defrag-cycle-min 1
active-defrag-cycle-max 25
active-defrag-max-scan-fields 1000

# Memory usage monitoring
# redis-cli INFO memory
# Key metrics:
#   used_memory           — Total bytes allocated by Redis
#   used_memory_rss       — Resident set size (OS-level memory)
#   mem_fragmentation_ratio — RSS / used_memory (should be close to 1.0)
#   maxmemory             — Configured memory limit
#   evicted_keys          — Total keys evicted due to maxmemory

HA کی تعیناتیوں کے لیے،maxmemoryکو نوڈ کی دستیاب RAM کے تقریباً 75% پر سیٹ کریں۔ بقیہ 25% ریپلیکشن آؤٹ پٹ بفر، AOF ری رائٹ بفر، RDB سنیپ شاٹس کے دوران کاپی آن رائٹ میموری، اور OS اوور ہیڈ کو ایڈجسٹ کرتا ہے۔ 16GB پوڈ کے لیے، maxmemory کو 12GB پر سیٹ کریں۔ 64GB ننگے دھاتی سرور کے لیے، اسے 48GB پر سیٹ کریں۔

TLS انکرپشن اور ACLs

پروڈکشن Redis تعیناتیوں کو TLS کے ساتھ ٹرانزٹ میں ڈیٹا کو انکرپٹ کرنا چاہیے اور Redis 6.0 میں متعارف کرائے گئے ACLs (ایکسیس کنٹرول لسٹوں) کے ساتھ عمدہ رسائی کنٹرول کو نافذ کرنا چاہیے۔

# redis.conf — TLS configuration
tls-port 6380
port 0                            # Disable non-TLS port entirely
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-auth-clients optional         # Require client certificates (mutual TLS)
tls-replication yes               # Encrypt replication traffic
tls-cluster yes                   # Encrypt cluster bus traffic
tls-protocols "TLSv1.3"           # Only allow TLS 1.3

# ACL configuration (Redis 6.0+)
# user  on|off [>password] [~pattern] [+command|-command] [&channel]
user default off                  # Disable the default user
user admin on >strong_admin_pass ~* +@all
user appuser on >app_pass ~app:* ~session:* ~cache:* +@read +@write +@connection -@admin -@dangerous
user readonly on >readonly_pass ~* +@read +@connection -@write -@admin
user replicator on >repl_pass +psync +replconf +ping

# Load ACL from external file
aclfile /etc/redis/users.acl
HA سیٹ اپ

میں

پب/سب اور اسٹریمز

Redis Pub/Sub اور سٹریمز HA کنفیگریشنز میں مختلف طریقے سے برتاؤ کرتے ہیں۔ ان اختلافات کو سمجھنا قابل بھروسہ ایونٹ پر مبنی نظاموں کی تعمیر کے لیے ضروری ہے۔

Pub/Subپیغامات فائر اور بھولے ہوئے ہیں — وہ برقرار نہیں ہیں، نقل نہیں کیے گئے ہیں، اور بفر نہیں کیے گئے ہیں۔ سینٹینیل پر مبنی HA سیٹ اپ میں، ماسٹر سے منسلک سبسکرائبرز کو عام طور پر پیغامات موصول ہوتے ہیں، لیکن فیل اوور کے دوران، نئے ماسٹر کو پچھلی سبسکرپشنز کا کوئی علم نہیں ہوتا ہے۔ دوبارہ منسلک ہونے کے بعد کلائنٹ کو دوبارہ سبسکرائب کرنا ہوگا۔ Redis کلسٹر کے ساتھ، پب/سب پیغامات کلسٹر کے تمام نوڈس پر نشر کیے جاتے ہیں، اس لیے کسی بھی نوڈ سے منسلک سبسکرائبرز شائع شدہ پیغامات وصول کرتے ہیں (حالانکہ یہ انٹر-نوڈ ٹریفک پیدا کرتا ہے)۔

Redis اسٹریمزایک مستقل، نقل شدہ ڈیٹا ڈھانچہ ہے جو HA ماحول میں پیغام کی قابل اعتماد ترسیل فراہم کرتا ہے۔ سٹریم اندراجات کو نقل تیار کرنے کے عام طریقہ کار کے ذریعے نقل کیا جاتا ہے، فیل اوور سے بچنا، اور کم از کم ایک بار ڈیلیوری سیمنٹکس کے ساتھ صارفین کے گروپس کو سپورٹ کیا جاتا ہے۔ HA پیغام رسانی کے لیے، اسٹریمز کو ہمیشہ Pub/Sub پر ترجیح دی جانی چاہیے۔

# Redis Streams with consumer groups — HA-safe message processing

# Create a stream and consumer group
XGROUP CREATE events:orders orders-processors $ MKSTREAM

# Produce events
XADD events:orders * action "order_placed" order_id "12345" amount "599.99"
XADD events:orders * action "order_placed" order_id "12346" amount "149.99"

# Consume events (in consumer group — at-least-once delivery)
XREADGROUP GROUP orders-processors worker-1 COUNT 10 BLOCK 5000 STREAMS events:orders >

# Acknowledge processed events
XACK events:orders orders-processors 1681234567890-0

# Check pending messages (unacknowledged)
XPENDING events:orders orders-processors - + 10

# Claim abandoned messages (from a dead consumer)
XAUTOCLAIM events:orders orders-processors worker-2 60000 0-0 COUNT 10

# Trim stream to prevent unbounded growth
XTRIM events:orders MAXLEN ~ 100000
HA

میں

Redis ماڈیولز

Redis ماڈیولز Redis کو خصوصی ڈیٹا ڈھانچے اور فعالیت کے ساتھ بڑھاتے ہیں۔ تین سب سے زیادہ مقبول — RedisJSON، RediSearch، اور RedisTimeSeries — نقل اور سینٹینیل کے ساتھ کام کرتے ہیں، لیکن HA کی تعیناتیوں میں مخصوص تحفظات رکھتے ہیں۔

# redis.conf — Loading modules
loadmodule /opt/redis-stack/lib/rejson.so
loadmodule /opt/redis-stack/lib/redisearch.so
loadmodule /opt/redis-stack/lib/redistimeseries.so

# Modules are replicated to replicas via the command stream
# Ensure the same modules are installed on all nodes (master + replicas)

# RedisJSON — store and query JSON documents
JSON.SET user:1001 $ '{"name":"Alice","email":"alice@example.com","orders":42}'
JSON.GET user:1001 $.name

# RediSearch — full-text search with indexing
FT.CREATE idx:users ON JSON PREFIX 1 user: SCHEMA $.name AS name TEXT $.email AS email TAG $.orders AS orders NUMERIC
FT.SEARCH idx:users "@name:Alice"

# RedisTimeSeries — time-series data
TS.CREATE metrics:cpu:node1 RETENTION 86400000 LABELS host node1 metric cpu
TS.ADD metrics:cpu:node1 * 73.5
TS.RANGE metrics:cpu:node1 - + AGGREGATION avg 60000

HA میں Redis Stack (ماڈیول بنڈل) چلاتے وقت، یقینی بنائیں کہ تمام نوڈس — ماسٹر اور ریپلیکس — ایک جیسے ماڈیول ورژن انسٹال ہیں۔ ماڈیول کمانڈز کو معیاری نقل کے سلسلے کے ذریعے نقل کیا جاتا ہے، لہذا نقلیں ان پر عمل کرنے کے قابل ہونی چاہئیں۔ فیل اوور کے بعد، RediSearch اشاریہ جات پروموشن شدہ نقل پر موجود ہوتے ہیں اور فوری طور پر سوالات پیش کرتے ہیں۔

HA

کے لیے

کنکشن پولنگ اور کلائنٹ کنفیگریشن

Redis HA کارکردگی اور لچک کے لیے مناسب کنکشن پولنگ ضروری ہے۔ کنکشن پولز TCP کنکشن قائم کرنے کے اوور ہیڈ کو کم کرتے ہیں، خود کار طریقے سے دوبارہ کوشش کرنے کی منطق فراہم کرتے ہیں، اور شاندار فیل اوور ہینڈلنگ کو فعال کرتے ہیں۔

# Node.js — ioredis connection pool with cluster mode
const Redis = require('ioredis');

// Cluster mode connection
const cluster = new Redis.Cluster(
  [
    { host: '10.0.1.10', port: 7000 },
    { host: '10.0.1.11', port: 7000 },
    { host: '10.0.1.12', port: 7000 }
  ],
  {
    redisOptions: {
      password: 'cluster_password',
      connectTimeout: 10000,
      maxRetriesPerRequest: 3
    },
    scaleReads: 'slave',           // Route reads to replicas
    clusterRetryStrategy(times) {
      return Math.min(times * 200, 5000);
    },
    slotsRefreshTimeout: 2000,
    slotsRefreshInterval: 5000,
    enableOfflineQueue: true,
    enableReadyCheck: true,
    natMap: {}                     // For NAT/port-forwarded environments
  }
);

cluster.on('error', (err) => console.error('Cluster error:', err));
cluster.on('node error', (err, address) => {
  console.error(`Node ${address} error:`, err);
});
# Python — redis-py connection pool with cluster mode
from redis.cluster import RedisCluster
from redis.backoff import ExponentialBackoff
from redis.retry import Retry

retry = Retry(ExponentialBackoff(cap=5, base=0.1), retries=5)

rc = RedisCluster(
    startup_nodes=[
        {"host": "10.0.1.10", "port": 7000},
        {"host": "10.0.1.11", "port": 7000},
        {"host": "10.0.1.12", "port": 7000}
    ],
    password="cluster_password",
    decode_responses=True,
    read_from_replicas=True,
    retry=retry,
    retry_on_timeout=True,
    socket_timeout=5,
    socket_connect_timeout=5,
    max_connections=50,
    health_check_interval=30
)

rc.set("key", "value")
print(rc.get("key"))
// Go — go-redis cluster client with connection pooling
package main

import (
    "context"
    "time"

    "github.com/redis/go-redis/v9"
)

func NewRedisCluster() *redis.ClusterClient {
    return redis.NewClusterClient(&redis.ClusterOptions{
        Addrs: []string{
            "10.0.1.10:7000",
            "10.0.1.11:7000",
            "10.0.1.12:7000",
        },
        Password:         "cluster_password",
        ReadOnly:         true,
        RouteRandomly:    true,
        RouteByLatency:   false,
        PoolSize:         50,
        MinIdleConns:     10,
        DialTimeout:      10 * time.Second,
        ReadTimeout:      5 * time.Second,
        WriteTimeout:     5 * time.Second,
        PoolTimeout:      10 * time.Second,
        MaxRetries:       5,
        MinRetryBackoff:  200 * time.Millisecond,
        MaxRetryBackoff:  5 * time.Second,
    })
}

بیک اپ اور بحالی کی حکمت عملی

HA نقل کے ساتھ بھی، ڈیزاسٹر ریکوری، تعمیل، اور منطقی غلطیوں سے تحفظ کے لیے باقاعدہ بیک اپ ضروری ہیں (حادثاتی فلشال، برا ایپلیکیشن لکھتا ہے)۔ Redis بیک اپ RDB سنیپ شاٹس اور AOF فائلوں پر مبنی ہیں۔

#!/bin/bash
# redis-backup.sh — Automated Redis backup script

REDIS_HOST="10.0.1.10"
REDIS_PORT="6379"
REDIS_PASS="strong_master_password"
BACKUP_DIR="/backups/redis"
S3_BUCKET="s3://redis-backups-prod"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR"

# Trigger RDB snapshot on the master
redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -a "$REDIS_PASS" BGSAVE

# Wait for background save to complete
while [ "$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS LASTSAVE)" = "$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS LASTSAVE)" ]; do
  sleep 1
done
sleep 2

# Copy the RDB file
RDB_FILE=$(redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -a "$REDIS_PASS" CONFIG GET dir | tail -1)
cp "${RDB_FILE}/dump.rdb" "${BACKUP_DIR}/dump_${DATE}.rdb"

# Compress and upload to S3
gzip "${BACKUP_DIR}/dump_${DATE}.rdb"
aws s3 cp "${BACKUP_DIR}/dump_${DATE}.rdb.gz" "${S3_BUCKET}/daily/dump_${DATE}.rdb.gz" \
  --storage-class STANDARD_IA

# Cleanup old local backups
find "$BACKUP_DIR" -name "dump_*.rdb.gz" -mtime +$RETENTION_DAYS -delete

# Verify backup integrity
redis-check-rdb "${BACKUP_DIR}/dump_${DATE}.rdb.gz" && \
  echo "Backup verified: dump_${DATE}.rdb.gz" || \
  echo "ERROR: Backup verification failed!"

echo "Backup complete: ${BACKUP_DIR}/dump_${DATE}.rdb.gz"
# Restore from RDB backup
# 1. Stop Redis
systemctl stop redis

# 2. Replace the RDB file
gunzip /backups/redis/dump_20260412_030000.rdb.gz
cp /backups/redis/dump_20260412_030000.rdb /data/redis/dump.rdb
chown redis:redis /data/redis/dump.rdb

# 3. Disable AOF temporarily (if enabled) to prevent AOF overriding RDB on startup
redis-cli -a password CONFIG SET appendonly no

# 4. Start Redis (loads RDB)
systemctl start redis

# 5. Re-enable AOF and rewrite it from the loaded data
redis-cli -a password CONFIG SET appendonly yes
redis-cli -a password BGREWRITEAOF
Redis INFO، Prometheus، اور Grafanaکے ساتھ

مانیٹرنگ

جامع نگرانی Redis HA کے لیے آپریشنل فضیلت کی بنیاد ہے۔ RedisINFOکمانڈ کے ذریعے بھرپور اندرونی میٹرکس کو ظاہر کرتا ہے، جسے Prometheus Redis برآمد کنندہ Grafana ڈیش بورڈز اور الرٹنگ کے لیے ٹائم سیریز میٹرکس میں ترجمہ کرتا ہے۔

# Key Redis INFO sections for HA monitoring
redis-cli -a password INFO replication
# role:master
# connected_slaves:2
# slave0:ip=10.0.1.11,port=6379,state=online,offset=1234567,lag=0
# slave1:ip=10.0.1.12,port=6379,state=online,offset=1234560,lag=1
# master_replid:abc123...
# master_repl_offset:1234567
# repl_backlog_size:268435456
# repl_backlog_first_byte_offset:1000000

redis-cli -a password INFO memory
# used_memory:6442450944
# used_memory_human:6.00G
# used_memory_rss:6879707136
# mem_fragmentation_ratio:1.07
# maxmemory:6442450944
# maxmemory_policy:allkeys-lru
# evicted_keys:12345

redis-cli -a password INFO stats
# total_connections_received:50000
# total_commands_processed:12345678
# instantaneous_ops_per_sec:85432
# keyspace_hits:11000000
# keyspace_misses:1345678
# expired_keys:500000
# evicted_keys:12345

redis-cli -a password INFO clients
# connected_clients:150
# blocked_clients:0
# maxclients:10000
# Prometheus Redis Exporter deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-exporter
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-exporter
  template:
    metadata:
      labels:
        app: redis-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9121"
    spec:
      containers:
        - name: redis-exporter
          image: oliver006/redis_exporter:latest
          args:
            - --redis.addr=redis://redis-ha-master:6379
            - --redis.password=$(REDIS_PASSWORD)
            - --include-system-metrics
            - --is-cluster
          env:
            - name: REDIS_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: redis-secret
                  key: password
          ports:
            - containerPort: 9121
              name: metrics
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 200m
              memory: 256Mi
# PrometheusRule for Redis HA alerts
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: redis-ha-alerts
  namespace: monitoring
spec:
  groups:
    - name: redis-availability
      rules:
        - alert: RedisDown
          expr: redis_up == 0
          for: 1m
          labels:
            severity: critical
          annotations:
            summary: "Redis instance {{ $labels.instance }} is down"

        - alert: RedisReplicaDisconnected
          expr: redis_connected_slaves < 2
          for: 2m
          labels:
            severity: warning
          annotations:
            summary: "Redis master has fewer than 2 connected replicas"

        - alert: RedisReplicationLagHigh
          expr: redis_replication_lag > 5
          for: 3m
          labels:
            severity: warning
          annotations:
            summary: "Redis replication lag exceeds 5 seconds on {{ $labels.instance }}"

        - alert: RedisMemoryUsageHigh
          expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.9
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Redis memory usage above 90% on {{ $labels.instance }}"

        - alert: RedisEvictionsHigh
          expr: rate(redis_evicted_keys_total[5m]) > 100
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Redis evicting keys at >100/s on {{ $labels.instance }}"

        - alert: RedisKeyspaceHitRateLow
          expr: redis_keyspace_hits_total / (redis_keyspace_hits_total + redis_keyspace_misses_total) < 0.8
          for: 10m
          labels:
            severity: info
          annotations:
            summary: "Redis cache hit rate below 80% on {{ $labels.instance }}"

        - alert: RedisSentinelDown
          expr: redis_sentinel_master_status != 1
          for: 1m
          labels:
            severity: critical
          annotations:
            summary: "Redis Sentinel reports master unhealthy"

    - name: redis-performance
      rules:
        - alert: RedisSlowlogGrowing
          expr: increase(redis_slowlog_length[5m]) > 10
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Redis slow log growing rapidly on {{ $labels.instance }}"

        - alert: RedisConnectionsNearLimit
          expr: redis_connected_clients / redis_config_maxclients > 0.8
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Redis connected clients above 80% of maxclients"

Dragonfly اور KeyDB: Redis-مطابق متبادل

جبکہ Redis غالب ان میموری ڈیٹا سٹور ہے، دو Redis-مطابقت پذیر متبادل نے مخصوص استعمال کے معاملات کے لیے کرشن حاصل کر لیا ہے۔

ڈریگن فلائی

Dragonfly ایک جدید، ملٹی تھریڈڈ Redis متبادل ہے جس کا مقصد تمام دستیاب CPU کوروں کا فائدہ اٹھاتے ہوئے ڈراپ ان متبادل ہونا ہے۔ روایتی Redis کمانڈ پروسیسنگ کے لیے سنگل تھریڈڈ ہے — ڈریگن فلائی ملٹی کور مشینوں پر نمایاں طور پر زیادہ تھرو پٹ حاصل کرنے کے لیے ایک سے زیادہ تھریڈز کے ساتھ ایک مشترکہ فن تعمیر کا استعمال کرتا ہے۔ یہ Redis پروٹوکول کو سپورٹ کرتا ہے، زیادہ تر Redis کمانڈز، اور بغیر کسی تبدیلی کے Redis کو تبدیل کر سکتا ہے۔

# Run Dragonfly as a Redis replacement
docker run -d --name dragonfly \
  -p 6379:6379 \
  -v /data/dragonfly:/data \
  docker.dragonflydb.io/dragonflydb/dragonfly \
  --maxmemory 12gb \
  --proactor_threads 8 \
  --dbfilename dump.rdb \
  --requirepass strong_password

# Dragonfly in Kubernetes
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dragonfly
  namespace: production
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dragonfly
  template:
    metadata:
      labels:
        app: dragonfly
    spec:
      containers:
        - name: dragonfly
          image: docker.dragonflydb.io/dragonflydb/dragonfly:latest
          args:
            - --maxmemory=12gb
            - --proactor_threads=8
            - --requirepass=strong_password
            - --snapshot_cron=*/30 * * * *
          ports:
            - containerPort: 6379
          resources:
            requests:
              cpu: "4"
              memory: 16Gi
            limits:
              cpu: "8"
              memory: 16Gi
          volumeMounts:
            - name: data
              mountPath: /data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: longhorn
        resources:
          requests:
            storage: 100Gi

ڈریگن فلائی کے اہم فوائد: ملٹی تھریڈڈ (8 کور بمقابلہ سنگل تھریڈڈ Redis پر 25x تھرو پٹ)، میموری کی بہتر کارکردگی (Redis dict کے بجائے ڈیش ہیش ٹیبلز کا استعمال کرتا ہے)، بلٹ ان اسنیپ شاٹنگ بغیر فورک() اوور ہیڈ کے، اور بڑے ڈیٹا سیٹس کے لیے مقامی مدد۔ تاہم، 2026 تک، ڈریگن فلائی کی نقل تیار کرنے کی سپورٹ اب بھی پختہ ہو رہی ہے - یہ پرائمری-ریپلیکا ریپلیکیشن کو سپورٹ کرتی ہے لیکن ابھی تک سینٹینیل کے مساوی خودکار فیل اوور سسٹم نہیں ہے۔ HA کے لیے، Kubernetes ہیلتھ چیکس اور StatefulSet دوبارہ شروع کرنے کی پالیسیاں استعمال کریں، یا ایپلیکیشن لیول فیل اوور کے ساتھ لوڈ بیلنس کے پیچھے تعینات کریں۔

KeyDB

KeyDB Redis کا ایک ملٹی تھریڈڈ فورک ہے جسے Snap (Snapchat کے پیچھے والی کمپنی) کے ذریعے برقرار رکھا جاتا ہے۔ یہ Redis کے ساتھ مکمل طور پر مطابقت رکھتا ہے اور اس میں ملٹی تھریڈنگ، ایکٹیو ایکٹو ریپلیکشن (ملٹی ماسٹر)، FLASH اسٹوریج ٹائرنگ، اور سبکی کی میعاد ختم ہوتی ہے۔ KeyDB کی ایکٹیو ایکٹیو ریپلیکیشن HA کے لیے خاص طور پر دلچسپ ہے — دو KeyDB مثالیں بیک وقت تحریروں کو قبول کر سکتی ہیں اور ایک دوسرے کو نقل کر سکتی ہیں، صفر ڈاؤن ٹائم فیل اوور فراہم کرتی ہیں۔

# keydb.conf — Multi-threaded configuration with active replication
server-threads 4                  # Use 4 threads for command processing
bind 0.0.0.0
port 6379
requirepass strong_password
masterauth strong_password

# Active-active replication (multi-master)
active-replica yes
replicaof peer-host 6379          # Bidirectional replication

# On the peer node, configure the reverse:
# replicaof this-host 6379

# FLASH storage tiering (for datasets larger than RAM)
# storage-provider flash /mnt/flash-storage 100
# maxmemory 16gb
# Will keep hot data in RAM and spill cold data to SSD

# SubKey expiration (unique to KeyDB)
# Allows setting TTL on hash fields, not just top-level keys
# EXPIREMEMBER myhash field1 3600

KeyDB ایک مضبوط انتخاب ہے جب آپ کو جغرافیائی تقسیم یا صفر ڈاؤن ٹائم مینٹیننس کے لیے ملٹی ماسٹر ریپلیکیشن کی ضرورت ہو، یا جب آپ کو سنگل تھریڈڈ Redis سے زیادہ تھرو پٹ کی ضرورت ہو لیکن آپ Dragonfly کے مقابلے Redis کوڈ بیس کے قریب رہنا چاہتے ہیں۔

پرفارمنس ٹیوننگ

پائپ لائننگ

پائپ لائننگ ایک ہی نیٹ ورک راؤنڈ ٹرپ میں متعدد کمانڈز کو بیچ دیتی ہے، جس سے بلک آپریشنز کے لیے تاخیر کو ڈرامائی طور پر کم کیا جاتا ہے۔ اگلی کمانڈ بھیجنے سے پہلے ہر جواب کا انتظار کرنے کے بجائے، کلائنٹ ایک ساتھ تمام کمانڈ بھیجتا ہے اور تمام جوابات کو ایک ساتھ پڑھتا ہے۔

# Python — Pipelining with redis-py
import redis
import time

r = redis.Redis(host='10.0.1.10', port=6379, password='password', decode_responses=True)

# Without pipelining: 1000 round-trips
start = time.time()
for i in range(1000):
    r.set(f'key:{i}', f'value:{i}')
print(f'Without pipeline: {time.time() - start:.3f}s')

# With pipelining: 1 round-trip for 1000 commands
start = time.time()
pipe = r.pipeline(transaction=False)
for i in range(1000):
    pipe.set(f'key:{i}', f'value:{i}')
pipe.execute()
print(f'With pipeline: {time.time() - start:.3f}s')
# Typically 5-10x faster

Lua اسکرپٹنگ

Lua اسکرپٹس Redis سرور پر ایٹم طریقے سے کام کرتی ہیں، پیچیدہ آپریشنز کے لیے راؤنڈ ٹرپس کو ختم کرتی ہیں اور اس بات کی ضمانت دیتی ہیں کہ اسکرپٹ کے آپریشنز کے درمیان کوئی اور کمانڈ نہیں چلتی ہے۔ Redis کلسٹر میں، یقینی بنائیں کہ Lua اسکرپٹ کے ذریعے رسائی کی گئی تمام کلیدیں ہیش ٹیگز کا استعمال کرتے ہوئے اسی ہیش سلاٹ میں رہتی ہیں۔

# Lua script for atomic rate limiting
# KEYS[1] = rate limit key
# ARGV[1] = max requests
# ARGV[2] = window in seconds
local current = redis.call('INCR', KEYS[1])
if current == 1 then
    redis.call('EXPIRE', KEYS[1], ARGV[2])
end
if current > tonumber(ARGV[1]) then
    return 0  -- Rate limited
end
return 1  -- Allowed

# Load and execute
redis-cli -a password EVAL "\
  local current = redis.call('INCR', KEYS[1]) \
  if current == 1 then redis.call('EXPIRE', KEYS[1], ARGV[2]) end \
  if current > tonumber(ARGV[1]) then return 0 end \
  return 1" 1 ratelimit:user:123 100 60

میموری آپٹیمائزیشن

# redis.conf — Memory optimisation settings

# Use ziplist encoding for small hashes, lists, sorted sets
hash-max-listpack-entries 128
hash-max-listpack-value 64
list-max-listpack-size -2          # 8KB per node
zset-max-listpack-entries 128
zset-max-listpack-value 64
set-max-intset-entries 512

# Lazy freeing (avoid blocking on large key deletion)
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
lazyfree-lazy-user-del yes
lazyfree-lazy-user-flush yes

# jemalloc tuning
# MALLOC_CONF="background_thread:true,dirty_decay_ms:5000,muzzy_decay_ms:5000"

# Analyse memory usage
redis-cli -a password MEMORY DOCTOR
redis-cli -a password MEMORY STATS
redis-cli -a password --bigkeys
redis-cli -a password --memkeys

عام ناکامی کے منظرنامے اور ٹربل شوٹنگ

منظر نامہ 1: ماسٹر ناکام ہو جاتا ہے، سینٹینیل ریپلیکا

کو فروغ دیتا ہے
# Diagnosis
redis-cli -p 26379 SENTINEL master mymaster
# Check: flags should show 's_down' or 'o_down' if master is unreachable

redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# Returns the current master address (should be the promoted replica)

# Check Sentinel logs for failover events
tail -f /var/log/redis/sentinel.log
# Look for: +sdown, +odown, +try-failover, +elected-leader,
#           +failover-state-select-slave, +selected-slave,
#           +failover-state-send-slaveof-noone, +failover-end

منظر نامہ 2: دو ماسٹرز کے ساتھ اسپلٹ برین

# Diagnosis: check if min-replicas-to-write is configured
redis-cli -a password CONFIG GET min-replicas-to-write
redis-cli -a password CONFIG GET min-replicas-max-lag

# Prevention: configure min-replicas on all masters
redis-cli -a password CONFIG SET min-replicas-to-write 1
redis-cli -a password CONFIG SET min-replicas-max-lag 10

# If split-brain occurred: identify the stale master
# Compare replication offsets — the master with the higher offset has more data
redis-cli -h master1-ip -a password INFO replication | grep master_repl_offset
redis-cli -h master2-ip -a password INFO replication | grep master_repl_offset

# Force the stale master to become a replica
redis-cli -h stale-master-ip -a password REPLICAOF correct-master-ip 6379

منظر نامہ 3: نیٹ ورک پارٹیشن کے بعد مکمل دوبارہ مطابقت پذیری کا طوفان

# Diagnosis: check replication backlog
redis-cli -a password INFO replication | grep repl_backlog
# If repl_backlog_first_byte_offset is ahead of replica's offset, full sync triggers

# Prevention: increase backlog size
redis-cli -a password CONFIG SET repl-backlog-size 512mb

# Monitor for full syncs
redis-cli -a password INFO stats | grep sync_full
redis-cli -a password INFO stats | grep sync_partial_ok
redis-cli -a password INFO stats | grep sync_partial_err

منظر نامہ 4: میموری کی تھکن اور OOM Kill

# Diagnosis
redis-cli -a password INFO memory
# Check: used_memory vs maxmemory, mem_fragmentation_ratio

redis-cli -a password MEMORY DOCTOR
# Returns advice on memory issues

# Prevention: set proper maxmemory and eviction
redis-cli -a password CONFIG SET maxmemory 12gb
redis-cli -a password CONFIG SET maxmemory-policy allkeys-lru

# Find large keys consuming memory
redis-cli -a password --bigkeys
redis-cli -a password --memkeys --memkeys-samples 100

# Emergency: manually evict keys
redis-cli -a password SCAN 0 COUNT 1000 TYPE string
# Identify and DEL unnecessary large keys

منظر نامہ 5: سست کمانڈز بلاکنگ ریپلیکیشن

# Diagnosis: check slowlog
redis-cli -a password SLOWLOG GET 20
redis-cli -a password SLOWLOG LEN

# Check for blocking commands
redis-cli -a password CLIENT LIST | grep -E 'cmd=(keys|sort|smembers)'

# Prevention: configure slowlog threshold
redis-cli -a password CONFIG SET slowlog-log-slower-than 10000   # 10ms
redis-cli -a password CONFIG SET slowlog-max-len 256

# Rename dangerous commands
rename-command KEYS ""              # Disable KEYS entirely
rename-command FLUSHALL ""          # Disable FLUSHALL
rename-command FLUSHDB ""           # Disable FLUSHDB
rename-command DEBUG ""             # Disable DEBUG

صلاحیت کی منصوبہ بندی اور اسکیلنگ کی حکمت عملی

Redis HA کے لیے

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

# Capacity estimation formulas

# Memory per node:
#   Base dataset size (use redis-cli DBSIZE and MEMORY USAGE on a sample)
#   + Replication output buffer: ~64MB per replica
#   + AOF rewrite buffer: ~64MB during rewrites
#   + Copy-on-write overhead during BGSAVE: up to 2x during heavy writes
#   + Client output buffers: ~1KB per client
#   + OS overhead: ~1-2GB
#   Rule of thumb: maxmemory = 75% of available RAM

# Network bandwidth:
#   Replication: write_throughput_bytes * num_replicas
#   Client traffic: ops_per_sec * avg_response_size
#   Full sync: dataset_size (one-time during replica bootstrap or failover)

# Example sizing for 20GB dataset, 100K ops/sec:
#   RAM per node: 20GB data + 4GB buffers + 2GB OS = 26GB -> 32GB node (75% = 24GB maxmemory)
#   CPU: 1 core handles ~100K ops/sec for simple commands (GET/SET)
#   Network: 100K ops * 1KB avg = 100MB/s client + 50MB/s replication = 150MB/s per master

# Scaling decision tree:
#   Need more read throughput? -> Add replicas (up to 5 per master)
#   Need more write throughput? -> Redis Cluster (add shards)
#   Need more memory? -> Redis Cluster (distribute dataset across shards)
#   Need lower latency? -> Reduce network hops (co-locate, use unix sockets)
#   Need global distribution? -> Multi-region replication or Redis Enterprise Active-Active
Redis کلسٹرکے ساتھ

افقی اسکیلنگ
# Add shards to an existing Redis Cluster

# 1. Start new Redis nodes
redis-server /etc/redis/new-master.conf
redis-server /etc/redis/new-replica.conf

# 2. Add the new master to the cluster
redis-cli --cluster add-node new-master:7000 existing-node:7000 -a password

# 3. Add the new replica to follow the new master
redis-cli --cluster add-node new-replica:7000 existing-node:7000 \
  --cluster-slave --cluster-master-id NEW_MASTER_ID -a password

# 4. Reshard slots to the new master
redis-cli --cluster reshard existing-node:7000 \
  --cluster-from all --cluster-to NEW_MASTER_ID \
  --cluster-slots 4096 --cluster-yes -a password

# 5. Verify the new slot distribution
redis-cli -c -h existing-node -p 7000 -a password CLUSTER SLOTS

# Remove a shard (scale down)
# 1. Reshard all slots away from the node
redis-cli --cluster reshard existing-node:7000 \
  --cluster-from REMOVING_NODE_ID --cluster-to TARGET_NODE_ID \
  --cluster-slots 5461 --cluster-yes -a password

# 2. Remove the empty node
redis-cli --cluster del-node existing-node:7000 REMOVING_NODE_ID -a password

عمودی اسکیلنگ کے تحفظات

# When to scale vertically vs horizontally:

# Scale UP (bigger instances) when:
#   - Dataset fits in single-node memory
#   - Workload uses multi-key operations (MGET, SUNION, Lua across keys)
#   - Operational simplicity is more important than cost efficiency
#   - Using Redis modules that don't support Cluster mode well

# Scale OUT (more shards) when:
#   - Dataset exceeds single-node memory
#   - Write throughput exceeds single-thread capacity (~200K ops/sec)
#   - You need per-shard isolation for multi-tenant workloads
#   - Cost per GB of RAM is a concern (many smaller nodes vs few large ones)

# Cloud instance recommendations:
# AWS:   cache.r7g.xlarge (4 vCPU, 26GB) to cache.r7g.16xlarge (64 vCPU, 419GB)
# Azure: P1 (6GB) to P5 (120GB) per shard
# GCP:   5GB to 300GB per instance (Memorystore Standard)

# Bare metal:
#   CPU: 2-4 cores dedicated to Redis (single-threaded, but background tasks use extra cores)
#   RAM: 32-128GB per node (NVMe for swap-as-last-resort)
#   Network: 10Gbps minimum, 25Gbps for large datasets
#   Storage: NVMe SSD for AOF/RDB persistence (IOPS matters for fsync)

نتیجہ

Redis اعلی دستیابی ایک واحد کنفیگریشن انتخاب نہیں ہے - یہ ایک جامع سسٹم ڈیزائن ہے جو ریپلیکشن ٹوپولوجی، ناکامی کا پتہ لگانے، خودکار فیل اوور، کلائنٹ کنفیگریشن، استقامت کی حکمت عملی، میموری مینجمنٹ، سیکورٹی، نگرانی، اور آپریشنل طریقہ کار پر محیط ہے۔ صحیح HA فن تعمیر آپ کی مخصوص ضروریات پر منحصر ہے۔

زیادہ تر ایپلی کیشنز کے لیے،Redis Sentinelتین سینٹینل مثالوں کے ساتھ ایک ماسٹر کی نگرانی کرتا ہے اور دو نقلیں 30 سیکنڈ سے کم میں خودکار فیل اوور کے ساتھ ایک ثابت شدہ، جنگ کا تجربہ شدہ HA حل فراہم کرتا ہے۔ جب آپ کو کسی ایک ماسٹر کے تھرو پٹ یا میموری کی گنجائش سے آگے افقی اسکیلنگ کی ضرورت ہوتی ہے، توRedis کلسٹرڈیٹاسیٹ کو متعدد شارڈز میں تقسیم کرتا ہے جبکہ فی شارڈ بلٹ ان فیل اوور کو برقرار رکھتا ہے۔ Kubernetes ماحول کے لیے، آپریٹرز جیسےSpotahomeاورOpsTreeآپریشنل بہترین طریقوں کو اعلانیہ CRDs میں انکوڈ کرتے ہیں، جب کہRedis Enterpriseایکٹو-ریپلیکیشن سپورٹ اور ایکٹیو-ریپلیکیشن سپورٹ کے ساتھ سب سے زیادہ خصوصیت سے بھرپور آپشن فراہم کرتا ہے۔

کلاؤڈ کے زیر انتظام خدمات —AWS ElastiCache،Azure کیشے Redisکے لیے، اورGCP میموری اسٹور— چلانے کے آپریشنل بوجھ کو ختم کرتے ہیں لیکن Redis کے اعلیٰ سکیل کے ساتھ لاگت کو کم کرتے ہیں۔ بیئر میٹل انفراسٹرکچر والی تنظیموں کے لیے، رینچر اور لانگ ہارنکے ساتھk3s مکمل طور پر اوپن سورس، کلاؤڈ سے آزاد متبادل فراہم کرتا ہے جو وینڈر لاک ان کے بغیر انٹرپرائز گریڈ HA فراہم کرتا ہے۔

متبادلات جیسےDragonflyاورKeyDBمخصوص استعمال کے معاملات کے لیے جانچنے کے قابل ہیں — بڑی مشینوں پر خام ملٹی تھریڈڈ تھرو پٹ کے لیے ڈریگن فلائی، اور ایکٹیو ایکٹیو ملٹی ماسٹر ریپلیکیشن کے لیے KeyDB۔ دونوں Redis کے موافق ہیں اور بہت سے منظرناموں میں ڈراپ ان متبادل کے طور پر کام کر سکتے ہیں۔

اس سے قطع نظر کہ آپ کس فن تعمیر کا انتخاب کرتے ہیں، آپریشنل بنیادی اصول مستقل رہتے ہیں: مناسب استقامت (ہائبرڈ RDB + AOF) کو ترتیب دیں، اسپلٹ برین ڈیٹا کے نقصان کو روکنے کے لیےmin-replicas-to-writeکو نافذ کریں، اپنے تحریری حجم کے لیے اپنے ریپلیکشن بیک لاگ کو سائز دیں، TLS کے ساتھ تمام ٹریفک کو انکرپٹ کریں، میموری کو کم سے کم مانیٹر کریں اور کم از کم میموری کو لاگو کریں۔ Prometheus اور Grafana کے ساتھ استعمال، RDB سنیپ شاٹس کو پائیدار آف سائٹ اسٹوریج میں بیک اپ کریں، اور - سب سے زیادہ تنقیدی طور پر - اپنے فیل اوور کو باقاعدگی سے جانچیں۔ ایک فیل اوور سسٹم جس کا کبھی تجربہ نہیں کیا گیا وہ ایسا سسٹم ہے جو کام نہیں کرتا ہے۔ ماہانہ فیل اوور ڈرلز چلائیں، افراتفری انجینئرنگ ٹولز کے ساتھ ناکامیوں کو انجیکشن کریں، اور اپنے حقیقی بحالی کے وقت کی پیمائش کریں۔ منظم جانچ سے آپ کو جو اعتماد حاصل ہوتا ہے وہ وہی ہے جو Redis تعیناتی کو الگ کرتا ہے جو پروڈکشن کے واقعات سے بچتا ہے جو سرور کی ناکامی کو کمپنی بھر میں بندش میں بدل دیتا ہے۔