রেডিস রিপ্লিকেশন (Replication) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটাবেসের ডেটা একাধিক রেডিস সার্ভারে কপি করতে সাহায্য করে। এটি মূলত ডেটা সুরক্ষা, স্কেলেবিলিটি, এবং অ্যাভেইলিবিলিটি নিশ্চিত করার জন্য ব্যবহৃত হয়। রেডিস রিপ্লিকেশন সিস্টেমের মধ্যে একটি মাস্টার সার্ভার এবং এক বা একাধিক স্লেভ সার্ভার থাকে। স্লেভ সার্ভারগুলি মাস্টার সার্ভারের ডেটা কপি করে এবং তা সিঙ্ক্রোনাইজড রাখে।
Redis Replication Overview
রেডিস রিপ্লিকেশন কাজ করে মাস্টার-স্লেভ আর্কিটেকচার অনুসারে:
- মাস্টার সার্ভার: এই সার্ভারটি আসল ডেটা ধারণ করে এবং ডেটা রাইট অপারেশনগুলি গ্রহণ করে।
- স্লেভ সার্ভার: এই সার্ভারগুলি মাস্টার সার্ভারের ডেটা রিড করার জন্য কনফিগার করা হয় এবং এটি মাস্টার সার্ভারের ডেটার একটি কপি রাখতে থাকে। স্লেভ সার্ভারের কোনো রাইট অপারেশন মাস্টার সার্ভারে পৌঁছাতে হবে।
Redis Replication কীভাবে কাজ করে
Replication শুরু করা: স্লেভ সার্ভার মাস্টার সার্ভারের সাথে সংযুক্ত হতে SLAVEOF কমান্ড ব্যবহার করে রিপ্লিকেশন শুরু হয়।
SLAVEOF <master-ip> <master-port>এর মাধ্যমে স্লেভ সার্ভার মাস্টার সার্ভারের ডেটার কপি গ্রহণ করতে শুরু করবে।
- সিঙ্ক্রোনাইজেশন: মাস্টার সার্ভারে যত নতুন রাইট অপারেশন হয়, সেগুলি স্লেভ সার্ভারগুলিতে অনুলিপি করা হয়। স্লেভ সার্ভারগুলি সিঙ্ক্রোনাইজড থাকবে এবং যে কোনো নতুন আপডেট মাস্টার থেকে স্লেভে প্রোপাগেট হবে।
- অল্টারনেট রিপ্লিকেশন (Asynchronous Replication): রেডিস রিপ্লিকেশন অ্যাসিনক্রোনাস ভিত্তিতে কাজ করে, অর্থাৎ স্লেভ সার্ভারগুলি মাস্টার সার্ভারের রাইট অপারেশনগুলি যত দ্রুত সম্ভব গ্রহণ করে, তবে এর মানে এই নয় যে স্লেভ সার্ভারের ডেটা মাস্টারের ডেটার সঙ্গে পুরোপুরি সময়মত থাকবে।
- মাস্টার থেকে স্লেভে ডেটা প্রোপাগেশন: যখন নতুন কোনো ডেটা মাস্টার সার্ভারে যুক্ত হয়, তখন এটি স্লেভ সার্ভারে প্রোপাগেট হয় এবং স্লেভ সার্ভারের ডেটা আপডেট হয়। যদি স্লেভের সাথে সংযোগ বিচ্ছিন্ন হয়ে যায়, তবে সংযোগ পুনঃস্থাপন হলে স্লেভ স্বয়ংক্রিয়ভাবে মাস্টার সার্ভারের ডেটা পুনরুদ্ধার করবে।
Redis Replication Configuration
রেডিস রিপ্লিকেশন কনফিগারেশন মূলত redis.conf ফাইলে করা হয়। এখানে কিছু সাধারণ কনফিগারেশন প্যারামিটার দেওয়া হলো:
SLAVEOF: স্লেভ সার্ভারে মাস্টার সার্ভারের আইপি এবং পোর্ট নির্ধারণ করতে:
slaveof <master-ip> <master-port>Repl-disable-tcp-nodelay: যদি আপনি রিপ্লিকেশন ট্রাফিকের জন্য TCP নোডিলেকে নিষ্ক্রিয় করতে চান:
repl-disable-tcp-nodelay yesReplica Priority: স্লেভ সার্ভারের প্রাধান্য নির্ধারণ করতে, যাতে মাস্টার সার্ভারের ব্যর্থতার পর স্লেভ সার্ভারটি মূল সার্ভার হিসেবে কাজ করতে পারে:
replica-priority 100 # 100 হলো ডিফল্ট মানReplica-read-only: স্লেভ সার্ভারটি শুধু রিড অপারেশন করতে পারে, তবে রাইট অপারেশন নিষিদ্ধ করা হয়:
replica-read-only yesRepl-backlog-size: রিপ্লিকেশন ব্যাকলগের আকার নির্ধারণ করা:
repl-backlog-size 1mb # রিপ্লিকেশন ব্যাকলগের সাইজ 1MB
Redis Replication ব্যবহার করার সুবিধা
- ডেটা রেডান্ডেন্সি (Data Redundancy): রিপ্লিকেশন নিশ্চিত করে যে মাস্টার সার্ভারের ডেটা একাধিক স্লেভ সার্ভারে কপি থাকবে, ফলে ডেটা হারানোর সম্ভাবনা কমে যায়।
- লোড ব্যালেন্সিং (Load Balancing): স্লেভ সার্ভারগুলি শুধুমাত্র রিড অপারেশন করে, ফলে মাস্টার সার্ভারের উপর লোড কমাতে সাহায্য করে।
- অ্যাভেইলিবিলিটি (Availability): মাস্টার সার্ভারের ব্যর্থতার সময় স্লেভ সার্ভারটি সার্ভিস দিতে পারে, যা হাই অ্যাভেইলিবিলিটি সিস্টেম তৈরি করতে সাহায্য করে। Redis Sentinel বা Redis Cluster ব্যবহার করলে, স্লেভ সার্ভারটি স্বয়ংক্রিয়ভাবে মাস্টার সার্ভারের স্থান নেবে।
- স্কেল আউট (Scale Out): আরও স্লেভ সার্ভার যোগ করে রিড ট্রাফিক হ্যান্ডেল করতে সক্ষম হয়, যা অ্যাপ্লিকেশনটির পারফরম্যান্স উন্নত করে।
Redis Replication - Failover এবং Promotion
রেডিস রিপ্লিকেশনে যদি মাস্টার সার্ভার অপ্রতুল হয়ে যায় (ফেল-ওভার), তবে স্লেভ সার্ভারটি মাস্টার সার্ভারে প্রমোট হতে পারে। রিপ্লিকেশন কনফিগারেশনটি স্বয়ংক্রিয়ভাবে মাস্টার নির্বাচনের জন্য ব্যবহৃত হতে পারে, তবে Redis Sentinel বা Redis Cluster-এর মাধ্যমে এটি আরও স্বয়ংক্রিয়ভাবে পরিচালিত হয়।
- Redis Sentinel: Sentinel ব্যবহারের মাধ্যমে রেডিস সার্ভারগুলির মনিটরিং এবং ব্যর্থতা পুনরুদ্ধার নিশ্চিত করা হয়।
- Redis Cluster: ক্লাস্টার ব্যবহার করে, রেডিস আরও স্কেলেবল এবং রিড/রাইট অপারেশনগুলির জন্য একটি ডিস্ট্রিবিউটেড আর্কিটেকচার প্রদান করে।
সারাংশ
রেডিস রিপ্লিকেশন একটি মাস্টার-স্লেভ আর্কিটেকচার ব্যবহারের মাধ্যমে ডেটা ডুপ্লিকেট এবং অ্যাভেইলিবিলিটি নিশ্চিত করে। এটি স্লেভ সার্ভারগুলোকে মাস্টার সার্ভারের ডেটার কপি রেখে, রিড/রাইট অপারেশনগুলিকে আরও দক্ষ করে তোলে। Redis Sentinel বা Redis Cluster এর মাধ্যমে, স্লেভ সার্ভারটি মাস্টার সার্ভারের ব্যর্থতার পর প্রমোট হতে পারে, যা একটি উচ্চ অ্যাভেইলিবিলিটি সিস্টেম তৈরি করে।
রেডিস রেপ্লিকেশন (Redis Replication) একটি পদ্ধতি যা রেডিস সার্ভারকে ডেটার কপি তৈরি করতে এবং বৃহত্তর স্কেলেবলিটি ও উপলব্ধতা নিশ্চিত করতে সাহায্য করে। এটি মূলত একাধিক রেডিস সার্ভারের মধ্যে ডেটা শেয়ার করার প্রক্রিয়া, যেখানে একটি সার্ভার মাস্টার হিসেবে কাজ করে এবং অন্য সার্ভারগুলো স্লেভ হিসেবে ডেটা কপি করে রাখে।
Redis Replication-এর মূল উদ্দেশ্য:
- উপলব্ধতা বৃদ্ধি: সার্ভার একাধিক স্লেভ সার্ভার দ্বারা রিপ্লিকেট হলে, যদি মাষ্টার সার্ভার কোনো কারণে ডাউন হয়ে যায়, স্লেভ সার্ভারগুলো ডেটার কপি রাখে এবং অ্যাপ্লিকেশন সহজেই সেগুলো ব্যবহার করতে পারে।
- পড়ার ক্ষমতা বৃদ্ধি: যখন আপনি একাধিক স্লেভ সার্ভার সেটআপ করেন, তখন ডেটা পড়ার জন্য বিভিন্ন সার্ভার ব্যবহার করা সম্ভব হয়, যার ফলে রিড পারফরম্যান্স বৃদ্ধি পায়।
- ডেটার নিরাপত্তা: ডেটার কপি থাকা মানে এটি হারানোর ঝুঁকি কমে যায়। বিশেষত, ডেটাবেসের পার্সিস্টেন্স কনফিগারেশনের সাথে একত্রিত হলে, ডেটা আরও নিরাপদ থাকে।
Redis Replication কিভাবে কাজ করে?
রেডিস রেপ্লিকেশন প্রধানত মাস্টার-স্লেভ আর্কিটেকচার অনুসরণ করে:
- মাস্টার সার্ভার: এটি প্রধান সার্ভার যা ডেটা লেখার এবং পরিচালনার দায়িত্বে থাকে। সমস্ত লেখার অপারেশন এই সার্ভারে ঘটে।
- স্লেভ সার্ভার: স্লেভ সার্ভারগুলি মাষ্টার সার্ভারের ডেটার রিয়েল-টাইম কপি তৈরি করে। স্লেভ সার্ভারগুলি শুধু পড়ার (read) অপারেশন সম্পাদন করে, অর্থাৎ তারা মাষ্টার সার্ভারের কপি হিসেবে কাজ করে।
- Replication Process: যখন মাষ্টার সার্ভারে কোনো ডেটা লেখা হয়, তখন রেডিস ওই ডেটা স্লেভ সার্ভারে রিপ্লিকেট করে। এই কপি সিস্টেম সাধারণত স্বয়ংক্রিয়ভাবে এবং দ্রুত হয়। স্লেভ সার্ভারটি নতুন তথ্য পেতে মাষ্টার সার্ভারের সাথে এসিঙ্ক্রোনাস বা সিঙ্ক্রোনাস কনফিগারেশন অনুসরণ করে।
Redis Replication সেটআপ করা
রেডিস সার্ভারে রেপ্লিকেশন সেটআপ করার জন্য, আপনাকে মাষ্টার এবং স্লেভ সার্ভারের কনফিগারেশন ফাইল redis.conf-এ কিছু পরিবর্তন করতে হবে।
১. মাষ্টার সার্ভার কনফিগারেশন
মাস্টার সার্ভারের কনফিগারেশন কোনো বিশেষ পরিবর্তন ছাড়াই কার্যকরী হবে, যেহেতু এটি ডেটা রাইটিং সার্ভার। তবে, আপনি bind এবং port সেটিংস কনফিগার করে এটি কনফিগার করতে পারেন।
bind 0.0.0.0 # সমস্ত আইপি ঠিকানা থেকে কানেকশন অনুমোদন করা
port 6379 # ডিফল্ট পোর্ট
২. স্লেভ সার্ভার কনফিগারেশন
স্লেভ সার্ভারকে মাষ্টার সার্ভারের সাথে সংযোগ করার জন্য, redis.conf ফাইলে replicaof প্যারামিটার ব্যবহার করতে হবে। স্লেভ সার্ভারের কনফিগারেশন নিচে দেওয়া হলো:
replicaof <master-ip> <master-port> # স্লেভ সার্ভারকে মাষ্টার সার্ভারের আইপি এবং পোর্ট দিয়ে সংযোগ করা
এছাড়া, আপনি password সুরক্ষা ও অন্যান্য নেটওয়ার্ক কনফিগারেশনও সেট করতে পারেন।
Redis Replication-এর কিছু গুরুত্বপূর্ণ কমান্ড
SLAVEOF: স্লেভ সার্ভারকে মাষ্টার সার্ভারের সাথে সংযুক্ত করতে ব্যবহার করা হয়।
SLAVEOF <master-ip> <master-port>INFO REPLICATION: রেপ্লিকেশন সম্পর্কিত তথ্য দেখতে এই কমান্ড ব্যবহার করা হয়।
INFO REPLICATIONROLE: রেডিস সার্ভারের ভূমিকা (মাষ্টার বা স্লেভ) জানতে এই কমান্ড ব্যবহার করা হয়।
ROLEREPLICAOF NO ONE: মাষ্টার সার্ভারকে স্লেভ থেকে আবার স্বাধীন সার্ভার হিসেবে ফেরত আনতে ব্যবহার করা হয়।
REPLICAOF NO ONE
Redis Replication-এর সুবিধা
- উচ্চ উপলব্ধতা (High Availability): সার্ভারের ব্যর্থতা ঘটলেও, স্লেভ সার্ভার থেকে ডেটা পাওয়া যেতে পারে, ফলে সার্ভারের অ্যাভেইলেবিলিটি বৃদ্ধি পায়।
- লোড ব্যালান্সিং (Load Balancing): স্লেভ সার্ভারগুলি শুধুমাত্র রিড অপারেশন সম্পাদন করে, যা রিড পারফরম্যান্সে উন্নতি ঘটায়।
- ডেটা রিজিওনাল কপি: রেডিস রেপ্লিকেশন ব্যবহার করে আপনি বিভিন্ন অঞ্চলে ডেটার কপি রাখতে পারেন, যা বিশ্বব্যাপী অ্যাক্সেসের জন্য সুবিধাজনক।
Redis Replication-এর সীমাবদ্ধতা
- এসিঙ্ক্রোনাস রিপ্লিকেশন: রেডিসের স্ট্যান্ডার্ড রিপ্লিকেশন এসিঙ্ক্রোনাস হওয়ায়, কখনো কখনো মাষ্টার সার্ভারে লেখা হলে স্লেভ সার্ভারে তা কিছুটা দেরিতে প্রপাগেট হতে পারে।
- ডেটা সিঙ্ক্রোনাইজেশন: যদি একটি স্লেভ সার্ভার অনেক সময়ের জন্য মাষ্টারের সাথে সংযুক্ত না থাকে, তাহলে এটি পুনরায় সিঙ্ক্রোনাইজ করতে অনেক সময় নিতে পারে।
সারাংশ
রেডিস রেপ্লিকেশন হল একটি শক্তিশালী কৌশল যা একাধিক সার্ভারের মধ্যে ডেটা কপি করে রাখে, ফলে আপনার সিস্টেমের উপলব্ধতা, স্কেলেবিলিটি এবং পারফরম্যান্স উন্নত হয়। এটি মাস্টার-স্লেভ আর্কিটেকচার অনুসরণ করে, যেখানে একটি মাষ্টার সার্ভার ডেটা রাইট করে এবং স্লেভ সার্ভারগুলি সেই ডেটার কপি রেখে শুধুমাত্র রিড অপারেশন সম্পাদন করে।
Redis Master-Slave Replication একটি পদ্ধতি যেখানে একটি Master সার্ভার ডেটা লেখার দায়িত্ব পালন করে, এবং এক বা একাধিক Slave সার্ভার তার ডেটা রিড (পড়ার) জন্য কপি করে। এটি মূলত ডেটা রেডান্ডেন্সি এবং লোড ব্যালেন্সিং নিশ্চিত করতে ব্যবহৃত হয়, কারণ একাধিক slave সার্ভার ক্লায়েন্টের রিড অনুরোধ হ্যান্ডেল করতে পারে, এবং master সার্ভার শুধু ডেটা লেখার কাজ করে।
রেডিসে Master-Slave Replication কনফিগার করার জন্য নিচে দেওয়া পদক্ষেপগুলো অনুসরণ করুন:
Redis Master-Slave Replication কনফিগারেশন
ধরা যাক, আপনার কাছে দুটি রেডিস সার্ভার রয়েছে:
- Master সার্ভার (যেখানে ডেটা লেখার কাজ হবে)
- Slave সার্ভার (যেখানে ডেটা পড়ার কাজ হবে)
ধাপ ১: Master সার্ভার কনফিগারেশন
Master সার্ভারে কোনো বিশেষ কনফিগারেশন পরিবর্তন করার প্রয়োজন নেই। ডিফল্টভাবে, রেডিস একটি Master সার্ভার হিসেবে কাজ করে।
redis.conf ফাইলটি এডিট করুন:
sudo nano /etc/redis/redis.confbind এবং protected-mode: আপনি নিশ্চিত করুন যে, bind এবং protected-mode ঠিকমতো কনফিগার করা আছে। সাধারণত, এটি রেডিস সার্ভারকে অন্যান্য সার্ভারের সাথে কানেক্ট হতে অনুমতি দেয়।
উদাহরণ:
bind 0.0.0.0 # অন্যান্য সার্ভার থেকে সংযোগ করার জন্য protected-mode no # প্রোটেক্টেড মোড বন্ধRedis সার্ভার রিস্টার্ট করুন: কনফিগারেশন পরিবর্তনের পর, রেডিস সার্ভার রিস্টার্ট করতে:
sudo systemctl restart redis
ধাপ ২: Slave সার্ভার কনফিগারেশন
redis.conf ফাইলটি এডিট করুন: এখন Slave সার্ভারে গিয়ে
redis.confফাইলটি এডিট করুন:sudo nano /etc/redis/redis.confMaster সার্ভারের IP এবং পোর্ট যোগ করুন: Slave সার্ভারে
replicaofপ্যারামিটার ব্যবহার করে Master সার্ভারের IP এবং পোর্ট নির্ধারণ করুন:replicaof <Master_IP> <Master_PORT>উদাহরণ:
replicaof 192.168.1.100 6379এখানে,
192.168.1.100হলো Master সার্ভারের IP এবং6379হলো ডিফল্ট পোর্ট।Redis সার্ভার রিস্টার্ট করুন: কনফিগারেশন পরিবর্তন করার পর, Slave সার্ভার রিস্টার্ট করুন:
sudo systemctl restart redis
ধাপ ৩: Master-Slave Replication পরীক্ষা করা
এখন, আপনি Master এবং Slave সার্ভারের মধ্যে replication সফলভাবে কনফিগার করেছেন। এটি পরীক্ষা করার জন্য নিচের পদক্ষেপগুলি অনুসরণ করুন:
Master সার্ভারে একটি কিপেয়ার সেট করুন:
redis-cli SET user:1 "John Doe"Slave সার্ভারে একই কিপেয়ার চেক করুন: Slave সার্ভারে গিয়ে আপনি
GETকমান্ড ব্যবহার করেuser:1কিপেয়ারটি দেখতে পারেন:redis-cli GET user:1এর উত্তর হবে:
"John Doe"এটি দেখাবে যে, Master সার্ভারের ডেটা Slave সার্ভারে সঠিকভাবে replicate হয়েছে।
ধাপ ৪: Replication কনফিগারেশন যাচাই করা
Replication সফলভাবে কনফিগার হয়েছে কিনা তা যাচাই করতে আপনি INFO replication কমান্ড ব্যবহার করতে পারেন।
Master সার্ভারে INFO replication: Master সার্ভারে এই কমান্ডটি চালান:
redis-cli INFO replicationআউটপুট কিছুটা এই রকম হতে পারে:
# Replication role:master connected_slaves:1 slave0:ip=192.168.1.101,port=6379,state=online,offset=1083,lag=0এটি দেখাবে যে, Master সার্ভারে একটি Slave সার্ভার সংযুক্ত আছে এবং এর role হচ্ছে
master।Slave সার্ভারে INFO replication: Slave সার্ভারে একই কমান্ডটি চালান:
redis-cli INFO replicationআউটপুট হবে:
# Replication role:slave master_host:192.168.1.100 master_port:6379 master_link_status:up master_sync_in_progress:0এটি দেখাবে যে, Slave সার্ভারে role হচ্ছে
slaveএবং এটি Master সার্ভারের সাথে সংযুক্ত আছে।
ধাপ ৫: Master-Slave Replication এর অন্যান্য প্যারামিটার
Slave Read/Write (SLAVEOF NO ONE): যদি আপনি চান যে, Slave সার্ভার লেখার জন্যও ব্যবহৃত হোক, তাহলে
SLAVEOF NO ONEকমান্ড দিয়ে এটি Master সার্ভারের থেকে স্বাধীনভাবে কাজ করতে পারে।SLAVEOF NO ONEনির্দিষ্ট পাসওয়ার্ডের সাথে সংযোগ: যদি আপনার রেডিস সার্ভারে পাসওয়ার্ড সেট করা থাকে, তবে Slave সার্ভার কনফিগারেশনে
masterauthপ্যারামিটার ব্যবহার করতে হবে:masterauth <password>
সারাংশ
- Master-Slave Replication কনফিগার করার জন্য প্রথমে Master সার্ভারে কোন বিশেষ কনফিগারেশন পরিবর্তন করার প্রয়োজন নেই, তবে Slave সার্ভারে
replicaofপ্যারামিটার দিয়ে Master সার্ভারের IP এবং পোর্ট নির্ধারণ করতে হবে। - রেডিস Master-Slave Replication ব্যবহারের মাধ্যমে আপনি ডেটা রেডান্ডেন্সি এবং লোড ব্যালেন্সিং নিশ্চিত করতে পারেন।
- INFO replication কমান্ড ব্যবহার করে আপনি Replication এর অবস্থা যাচাই করতে পারেন।
Replication হল একটি প্রক্রিয়া যার মাধ্যমে এক বা একাধিক ডেটাবেসের কপি তৈরি করা হয়, যাতে মূল ডেটাবেসের ডেটা একটি বা একাধিক রেপ্লিকা সার্ভারে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজড থাকে। এটি Data Backup এবং Recovery এর জন্য অত্যন্ত কার্যকর একটি পদ্ধতি, কারণ রেপ্লিকেশন ব্যবহার করে আপনি ডেটার একটি কপি তৈরি করতে পারেন এবং জরুরি অবস্থায় মূল সার্ভারের ডেটা পুনরুদ্ধার করতে পারেন।
Replication এর মাধ্যমে Data Backup এবং Recovery-এর সুবিধা
- ডেটা সুরক্ষা (Data Protection):
- রেপ্লিকেশন মূল ডেটাবেসের কপির মাধ্যমে ডেটাকে সুরক্ষিত রাখে। মূল সার্ভার বা ডেটাবেসে কোনো সমস্যা হলে, রেপ্লিকা সার্ভার থেকে ডেটা পুনরুদ্ধার করা যায়।
- উচ্চ প্রাপ্যতা (High Availability):
- রেপ্লিকেশন নিশ্চিত করে যে ডেটা সর্বদা উপলব্ধ থাকে। যদি মূল সার্ভারে কোনো সমস্যা হয়, তবে রেপ্লিকা সার্ভার থেকে ডেটা পাওয়া যাবে, যা সার্ভারের ডাউনটাইম কমাতে সহায়তা করে।
- বিপর্যয় পুনরুদ্ধার (Disaster Recovery):
- রেপ্লিকেশন ব্যবহার করে সহজেই বিপর্যয়ের সময় মূল ডেটাবেসের কপি থেকে ডেটা পুনরুদ্ধার করা যায়। যেকোনো বিপর্যয়ের সময়ে ডেটার পুনঃস্থাপনের জন্য এটি একটি কার্যকর সমাধান।
- ব্যাকআপের বিকল্প (Alternative to Backup):
- রেপ্লিকেশন মূলত ব্যাকআপের বিকল্প হতে পারে। মূল সার্ভারের সাথে সিঙ্ক্রোনাইজড রেপ্লিকা সার্ভারের মাধ্যমে ডেটার কপি রাখা হয়, যা পুনরুদ্ধারের জন্য প্রস্তুত থাকে।
Replication Types (রেপ্লিকেশন ধরন)
রেপ্লিকেশন ব্যবহার করে ডেটার কপি বিভিন্নভাবে তৈরি করা হতে পারে, যার মধ্যে কিছু সাধারণ ধরন হল:
- Master-Slave Replication (Primary-Replica):
- এই ধরনের রেপ্লিকেশনে একমাত্র Master (মূল সার্ভার) ডেটা লেখার জন্য ব্যবহৃত হয়, এবং এক বা একাধিক Slave (রেপ্লিকা সার্ভার) শুধুমাত্র Master-এর ডেটার কপি ধরে রাখে। ডেটা লেখার পর এটি রেপ্লিকা সার্ভারে স্বয়ংক্রিয়ভাবে কপি হয়।
- Master-Master Replication (Multi-Master Replication):
- এই ধরনের রেপ্লিকেশনে একাধিক Master সার্ভার থাকে, এবং প্রতিটি সার্ভার তার ডেটা পরিবর্তন করার পাশাপাশি অন্য সার্ভারের ডেটা সিঙ্ক্রোনাইজড রাখে। এটি স্কেলিং এবং উচ্চ প্রাপ্যতার জন্য উপকারী, তবে কনফ্লিক্টের ঝুঁকি বেশি থাকে।
- Peer-to-Peer Replication:
- এখানে কোনো নির্দিষ্ট Master বা Slave নেই। প্রতিটি সার্ভার একটি "Peer" হিসেবে কাজ করে এবং একটি অপরের ডেটা সিঙ্ক্রোনাইজড রাখে।
Replication Setup (রেপ্লিকেশন সেটআপ)
রেডিস বা মাইএসকিউএল এর মতো সার্ভারে রেপ্লিকেশন কনফিগারেশন সেটআপ করার জন্য সাধারণত নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করা হয়:
- Master Server Setup (মূল সার্ভার কনফিগারেশন):
- মূল সার্ভারের কনফিগারেশন ফাইলে
bindএবংportসেটিংস চেক করতে হয়। log-binঅপশন সক্রিয় করতে হয় (যাতে সার্ভার লোগিং শুরু হয়) এবংserver-idনির্ধারণ করতে হয়।- প্রয়োজনীয় কনফিগারেশন যেমন read-only এবং replication সেটিংস করতে হয়।
- মূল সার্ভারের কনফিগারেশন ফাইলে
- Slave Server Setup (রেপ্লিকা সার্ভার কনফিগারেশন):
- রেপ্লিকা সার্ভারে
server-idনির্ধারণ করতে হয় এবং মূল সার্ভারের ঠিকানা দিয়েmaster-hostকনফিগার করতে হয়। - রেপ্লিকা সার্ভারে
read-onlyসেটিংস সক্ষম করতে হয় (যাতে এটি শুধুমাত্র ডেটা পড়ে, পরিবর্তন না করে)। - রেপ্লিকা সার্ভারটি মূল সার্ভারের সাথে সিঙ্ক্রোনাইজড রাখতে
START SLAVEকমান্ড ব্যবহার করতে হয়।
- রেপ্লিকা সার্ভারে
- Syncing Data (ডেটা সিঙ্ক্রোনাইজেশন):
- একবার রেপ্লিকা সার্ভার সেটআপ হয়ে গেলে, এটি মূল সার্ভারের সাথে সিঙ্ক্রোনাইজড হয় এবং সকল ডেটা স্বয়ংক্রিয়ভাবে কপি হয়।
- Monitoring Replication (রেপ্লিকেশন মনিটরিং):
- রেপ্লিকেশন চলাকালীন ডেটা সিঙ্ক্রোনাইজেশন পর্যবেক্ষণ করতে
SHOW SLAVE STATUSকমান্ড ব্যবহার করা হয় (মাইএসকিউএল-এ) বাINFO replication(রেডিস-এ)।
- রেপ্লিকেশন চলাকালীন ডেটা সিঙ্ক্রোনাইজেশন পর্যবেক্ষণ করতে
Data Backup with Replication
রেপ্লিকেশন ব্যাকআপ প্রক্রিয়াতে সহায়তা করতে পারে, কারণ রেপ্লিকা সার্ভারে সর্বশেষ ডেটা কপি রাখা হয়। মূল সার্ভারের ডেটা যদি কোনো কারণে হারিয়ে যায়, তবে আপনি রেপ্লিকা সার্ভার থেকে ডেটা পুনরুদ্ধার করতে পারেন। এখানে কিছু বিষয় যা মনে রাখতে হবে:
- Master Server Failure: যদি মূল সার্ভার ব্যর্থ হয়, তবে রেপ্লিকা সার্ভারকে Promote করে সেটিকে মূল সার্ভার হিসেবে ব্যবহার করা যেতে পারে।
- Slave Server as Backup: রেপ্লিকা সার্ভারকে নিয়মিত ব্যাকআপ সার্ভার হিসেবে ব্যবহার করা যেতে পারে, যেখানে ডেটা সংরক্ষণ করা হয় এবং বিপর্যয়ের সময় তা পুনরুদ্ধার করা হয়।
Data Recovery using Replication
রেপ্লিকেশন ব্যবহারের মাধ্যমে Data Recovery অত্যন্ত সহজ হয়। যদি মূল সার্ভারে কোনো ধরনের সমস্যা হয় বা ডেটা হারিয়ে যায়, তাহলে নিম্নলিখিত পদক্ষেপে ডেটা পুনরুদ্ধার করা সম্ভব:
- Promoting a Replica:
- যদি মূল সার্ভার ডাউন হয়ে যায়, তবে আপনি রেপ্লিকা সার্ভারটিকে Promote করে নতুন মূল সার্ভার হিসেবে ব্যবহার করতে পারেন।
- Restoring from Backup:
- যদি রেপ্লিকেশন বন্ধ থাকে, তবে আপনি রেপ্লিকা সার্ভারের ব্যাকআপ থেকে ডেটা পুনরুদ্ধার করতে পারেন এবং নতুন সার্ভারে সিঙ্ক্রোনাইজড রেপ্লিকেশন চালু করতে পারেন।
- Resuming Replication:
- যদি রেপ্লিকা সার্ভার থেকে কিছু ডেটা মিসিং হয়ে যায়, তবে আপনি
STOP SLAVEএবংSTART SLAVEকমান্ড ব্যবহার করে রেপ্লিকেশন পুনরায় শুরু করতে পারেন।
- যদি রেপ্লিকা সার্ভার থেকে কিছু ডেটা মিসিং হয়ে যায়, তবে আপনি
সারাংশ
Replication হল একটি গুরুত্বপূর্ণ ডেটা ব্যাকআপ এবং পুনরুদ্ধার প্রক্রিয়া, যা ডেটাবেসে একটি মূল সার্ভার এবং এক বা একাধিক রেপ্লিকা সার্ভারের মধ্যে ডেটার কপি তৈরি করে। এটি ডেটা সুরক্ষা, উচ্চ প্রাপ্যতা এবং বিপর্যয় পুনরুদ্ধারের জন্য একটি কার্যকরী সমাধান। রেপ্লিকেশন ব্যবহার করে, আপনি ডেটার কপি সহজেই ব্যাকআপ এবং পুনরুদ্ধার করতে পারেন, যা সিস্টেমের স্থিতিশীলতা এবং কর্মক্ষমতা নিশ্চিত করে।
Read-Write Splitting এবং High Availability হল দুটি গুরুত্বপূর্ণ কনসেপ্ট যা সাধারণত ডেটাবেস আর্কিটেকচার ও স্কেলেবিলিটি নিশ্চিত করতে ব্যবহৃত হয়। এই দুটি কৌশল ব্যবহৃত হয় যাতে ডেটাবেসের পারফরম্যান্স বৃদ্ধি পায় এবং এর সার্ভিস প্রদান করা যায় নিরবচ্ছিন্নভাবে, বিশেষত বৃহৎ পরিসরের অ্যাপ্লিকেশনে। নিচে এই দুটি কনসেপ্টের বিস্তারিত আলোচনা করা হলো।
Read-Write Splitting
Read-Write Splitting হল একটি কৌশল যা ডেটাবেসে রিড (পড়ার) এবং রাইট (লেখার) অপারেশনগুলো পৃথকভাবে পরিচালনা করতে সহায়তা করে। সাধারণত, এই কৌশলটি প্রধান ডেটাবেস সার্ভার (Master) এবং ক্লাস্টারড রিড-অনলি ডেটাবেস সার্ভার (Replica) এর মধ্যে বিভক্ত করা হয়।
কিভাবে কাজ করে?
- Master (প্রধান): লেখার (Write) সমস্ত অপারেশন, যেমন INSERT, UPDATE, DELETE প্রভৃতি Master Server-এ সম্পাদিত হয়।
- Replica (ক্লাস্টার): পড়ার (Read) সমস্ত অপারেশন, যেমন SELECT, Replica Servers-এ পরিচালিত হয়। রিড অপারেশনগুলো ব্যালেন্সড এবং লোড ভাগ করার জন্য একাধিক রিড রেপ্লিকা ব্যবহার করা যায়।
ফায়দা:
- পারফরম্যান্স বৃদ্ধি: রিড এবং রাইট অপারেশন আলাদা সার্ভারে ভাগ হয়ে যাওয়ায়, সার্ভারের লোড কমে এবং অ্যাপ্লিকেশন দ্রুত রেসপন্স দিতে পারে।
- লোড ভারসাম্য: Replica সার্ভারগুলোতে রিড কিউরিগুলির লোড ব্যালেন্স করা সম্ভব হয়, যা রাইট সার্ভারের উপর চাপ কমায়।
- স্কেলিং: রিড সার্ভারগুলোর সংখ্যা বাড়িয়ে আরও বেশি রিড অপারেশন পরিচালনা করা সম্ভব।
নকশা:
- Master-Slave Configuration: যেখানে একটি Master সার্ভার লেখার জন্য ব্যবহৃত হয় এবং একাধিক Slave বা Replica সার্ভারগুলি পড়ার জন্য ব্যবহৃত হয়।
চ্যালেঞ্জ:
- ডেটা সিঙ্ক্রোনাইজেশন: Master-এ লেখার পর Replica-এ ডেটা সিঙ্ক্রোনাইজেশন সঠিকভাবে নিশ্চিত করা প্রয়োজন, কারণ Replica-এ কিছু সময় দেরি হতে পারে।
- Consistency: যদি Master-এ কোন লেখা পরিবর্তন হয়, তবে Replica-তে তা প্রতিফলিত হতে কিছু সময় নিতে পারে, যার ফলে Eventual Consistency এর সমস্যা দেখা দিতে পারে।
High Availability (HA)
High Availability (HA) হল এমন একটি ব্যবস্থা বা কৌশল যা নিশ্চিত করে যে আপনার ডেটাবেস বা সার্ভিসটি সর্বদা উপলব্ধ থাকবে এবং কোনোভাবে ডাউন টাইম বা সিস্টেমের অচলাবস্থা থাকবে না। HA সাধারণত ফেলওভার এবং ডুপ্লিকেশন কৌশল ব্যবহার করে সিস্টেমের স্থিতিশীলতা এবং সার্ভিস অব্যাহত রাখে।
কিভাবে কাজ করে?
- Replication: ডেটাবেসের ডেটা একাধিক সার্ভারে কপি করা হয়। একাধিক সার্ভার থাকলে, মূল সার্ভারটি ব্যর্থ হলেও, Replica সার্ভার থেকে ডেটা রিকভারি করা সম্ভব।
- Failover: যদি Master সার্ভার ব্যর্থ হয়, তখন অটো-ফেলওভার প্রক্রিয়া শুরু হয়, যেখানে একটি Replica সার্ভার Master হিসেবে উন্নীত হয় এবং সার্ভিস চালু রাখে।
- Heartbeat: সার্ভারগুলির মধ্যে একটি "heartbeat" সিগন্যাল থাকে, যা সার্ভারের অবস্থান চেক করে এবং ব্যর্থতার ক্ষেত্রে failover প্রক্রিয়া সক্রিয় করে।
ফায়দা:
- দীর্ঘ সময় ধরে চলা সার্ভিস: HA নিশ্চিত করে যে অ্যাপ্লিকেশন বা ডেটাবেস সর্বদা উপলব্ধ থাকবে, এবং নেটওয়ার্ক, সার্ভার বা অন্যান্য উপাদান ব্যর্থ হলেও এটি কর্মক্ষম থাকবে।
- ব্যর্থতার সময় ডাউনটাইম কমানো: যখন কোনো সার্ভার ব্যর্থ হয়, তখন Failover প্রক্রিয়া শুরু হয়ে অন্য সার্ভার থেকে সার্ভিস সরবরাহ করতে থাকে, যা ডাউনটাইম কমিয়ে দেয়।
- ডেটা লস কমানো: ডেটার রেপ্লিকা থাকলে, একটি সার্ভারের ব্যর্থতার কারণে ডেটা হারানোর সম্ভাবনা কমে যায়।
নকশা:
- Active-Passive Configuration: এক বা একাধিক Passive সার্ভার থাকে যেগুলি মূল সার্ভারের ব্যর্থতার পর সক্রিয় হয়ে কাজ শুরু করে।
- Active-Active Configuration: একাধিক সার্ভার একই সময়ে সক্রিয়ভাবে কাজ করে এবং ব্যালেন্সড লোড প্রদান করে, এবং যদি এক সার্ভার ব্যর্থ হয়, অন্য সার্ভারটি সেই লোড নেয়।
চ্যালেঞ্জ:
- ফেলওভার সময়ে ডেটা কনসিসটেন্সি: Failover প্রক্রিয়াতে সঠিকভাবে ডেটা কনসিসটেন্ট রাখতে চ্যালেঞ্জ হতে পারে।
- বয়সের পার্থক্য (Lag): Replica সার্ভারগুলিতে lag থাকতে পারে, যার কারণে কিছু সময়ের জন্য পুরানো ডেটা দেখা যেতে পারে।
Read-Write Splitting এবং High Availability-এর পার্থক্য
| বৈশিষ্ট্য | Read-Write Splitting | High Availability (HA) |
|---|---|---|
| উদ্দেশ্য | রিড এবং রাইট অপারেশন আলাদা সার্ভারে ভাগ করা | সার্ভিসের অব্যাহত উপলব্ধতা এবং ডাউনটাইম কমানো |
| পদ্ধতি | Master-Slave (Read-Replica) Configuration | Failover, Replication, Heartbeat |
| ফায়দা | পারফরম্যান্স বৃদ্ধি, লোড ভারসাম্য | সার্ভিস স্থিতিশীলতা, ব্যর্থতায় অটোমেটিক রিকভারি |
| চ্যালেঞ্জ | ডেটা সিঙ্ক্রোনাইজেশন সমস্যা, Eventual Consistency | Failover তে ডেটা কনসিসটেন্সি সমস্যা |
| প্রধান লক্ষ্য | রিড অপারেশনগুলোর জন্য আলাদা সার্ভার ব্যবহার | সার্ভিস সর্বদা উপলব্ধ রাখা |
সারাংশ
- Read-Write Splitting ব্যবহার করা হয় ডেটাবেসের পারফরম্যান্স বাড়ানোর জন্য, যেখানে রিড এবং রাইট অপারেশনগুলো আলাদা সার্ভারে পরিচালনা করা হয়।
- High Availability (HA) ডেটাবেস বা সার্ভিসের স্থিতিশীলতা এবং সার্ভিসের অব্যাহত উপলব্ধতা নিশ্চিত করে। এটি ফেলওভার এবং Replication কৌশল ব্যবহার করে, যাতে সার্ভিস ব্যর্থ হলেও দ্রুত পুনরুদ্ধার করা যায়।
এটি গুরুত্বপূর্ণ যে Read-Write Splitting এবং High Availability একসাথে ব্যবহৃত হতে পারে একটি সিস্টেমে, যাতে পারফরম্যান্স বৃদ্ধি এবং সার্ভিস অব্যাহত রাখতে সাহায্য করা যায়।
Read more