রেডিস সেন্টিনেল রেডিসের জন্য একটি সহজ এবং স্বয়ংক্রিয় উচ্চ প্রাপ্যতা (HA) সমাধান প্রদান করে। আপনি যদি মোঙ্গোডিবি নির্বাচন কীভাবে কাজ করে তার সাথে পরিচিত হন তবে এটি খুব বেশি দূরে নয়। শুরু করার জন্য, আপনার কাছে একটি প্রদত্ত মাস্টার আছে যা দাসদের N সংখ্যার প্রতিলিপি করে। সেখান থেকে, আপনার সেন্টিনেল ডেমন চলছে, তা আপনার অ্যাপ্লিকেশন সার্ভারে হোক বা সার্ভারে রেডিস চলছে। এগুলি মাস্টারের স্বাস্থ্যের উপর নজর রাখে৷
যদি একজন সেন্টিনেল সনাক্ত করে যে একজন মাস্টার অ-প্রতিক্রিয়াশীল, তবে এটি অন্যান্য সেন্টিনেলদের কাছে একটি SDOWN (সাবজেক্টিভলি ডাউন) বার্তা সম্প্রচার করবে। তারপর, একবার কোরামে পৌঁছে যে একজন মাস্টার ডাউন, এটি একটি ODOWN (উদ্দেশ্যমূলকভাবে নিচে) সম্প্রচার করবে এবং নতুন মাস্টার নির্বাচিত হবে। যেহেতু ODOWN রাজ্যে পৌঁছাতে সম্মত হওয়ার জন্য আপনার একটি কোরাম বা সংখ্যাগরিষ্ঠ সেন্টিনেল প্রয়োজন, তাই বন্ধন এড়াতে বিজোড় সংখ্যক সেন্টিনেল চালানো সর্বদা সর্বোত্তম অভ্যাস।
দ্রষ্টব্য:সেন্টিনেলের সাথে সেরা পারফরম্যান্সের জন্য 2.8 শাখা বা উচ্চতর রেডিসের সংস্করণ ব্যবহার করার জন্য এটি অত্যন্ত সুপারিশ করা হয়৷
এটি কিভাবে কাজ করে
সেন্টিনেলরা চলমান Redis দৃষ্টান্তগুলির কনফিগ ফাইলগুলি পুনরায় লেখার মাধ্যমে ব্যর্থতা পরিচালনা করে। চলুন একটি দৃশ্যের মধ্য দিয়ে যাওয়া যাক:
বলুন আমাদের একটি মাস্টার "A" আছে যা ক্রীতদাস "B" এবং "C" এর প্রতিলিপি করে। আমাদের অ্যাপ্লিকেশন সার্ভারে তিনটি সেন্টিনেল (s1, s2, s3) চলছে, যেগুলি Redis-কে লেখে। এই মুহুর্তে "A", আমাদের বর্তমান মাস্টার, অফলাইনে চলে যায়। আমাদের সেন্টিনেলরা সবাই "A" কে অফলাইন হিসেবে দেখে এবং একে অপরকে SDOWN বার্তা পাঠায়। তারপর তারা সবাই একমত যে "A" নিচে, তাই "A" ODOWN স্থিতিতে সেট করা হয়েছে৷ এখান থেকে, কে সবচেয়ে এগিয়ে তা দেখার জন্য একটি নির্বাচন হয় এবং এই ক্ষেত্রে "B" কে নতুন মাস্টার হিসাবে বেছে নেওয়া হয়।
"B" এর জন্য কনফিগার ফাইলটি সেট করা হয়েছে যাতে এটি আর কারো দাস না হয়। ইতিমধ্যে, "C" এর জন্য কনফিগার ফাইলটি পুনরায় লেখা হয়েছে যাতে এটি আর "A" এর স্লেভ নয় বরং "B"। এখান থেকে সবকিছু স্বাভাবিকভাবে চলতে থাকে। যদি "A" অনলাইনে ফিরে আসে, সেন্টিনেলরা এটিকে স্বীকৃতি দেবে এবং "A" কে "B" এর দাস হওয়ার জন্য কনফিগারেশন ফাইলটি পুনরায় লিখবে যেহেতু "B" বর্তমান মাস্টার।
কনফিগারেশন
সেন্টিনেল কনফিগার করা ততটা কঠিন নয় যতটা কেউ ভাবে। আসলে, সবচেয়ে কঠিন জিনিসগুলির মধ্যে একটি হল আপনার সেন্টিনেল প্রক্রিয়াগুলি কোথায় রাখবেন তা বেছে নেওয়া। আমি ব্যক্তিগতভাবে সেগুলিকে আপনার অ্যাপ সার্ভারে চালানোর পরামর্শ দিই যদি সম্ভব হয়। সম্ভবত আপনি যদি এটি সেট আপ করছেন, আপনি আপনার মাস্টারের কাছে লেখার প্রাপ্যতা সম্পর্কে উদ্বিগ্ন। যেমন, আপনার অ্যাপ্লিকেশন সার্ভার মাস্টারের সাথে কথা বলতে পারে কিনা সেন্টিনেলরা অন্তর্দৃষ্টি প্রদান করে। আপনার রেডিস ইনস্ট্যান্স সার্ভারেও সেন্টিনেল চালানোর জন্য আপনাকে অবশ্যই স্বাগত জানাই৷
কনফিগারেশন ধাপ দিয়ে শুরু করতে, অনুগ্রহ করে এখানে পাওয়া উদাহরণ ফাইলটি উল্লেখ করুন। এটি হল একটি উদাহরণ sentinel.conf যা উবুন্টু 14.04-এ Redis 2.8.4-এর সাথে পাওয়া যায়, কিন্তু Redis-এর যেকোনো 2.8.x সংস্করণের সাথে কাজ করা উচিত। আমি উপরে দুটি লাইন যোগ করার স্বাধীনতা নিয়েছি যা আমি অনুশীলনে ব্যবহার করতে চাই:
daemonize yes
logfile /var/log/redis/redis-sentinel.log
এটি সেন্টিনেল প্রক্রিয়াটিকে ডেমোনাইজ মোডে রাখে এবং এটির সমস্ত বার্তা stdout এর পরিবর্তে একটি লগ ফাইলে লগ করে৷
এখানে অনেকগুলি কনফিগারযোগ্য বিকল্প রয়েছে এবং বেশিরভাগই খুব ভাল মন্তব্য করা হয়েছে। যাইহোক, এই পোস্টের জন্য আমরা শুধু দুটির উপর ফোকাস করব।
সবচেয়ে গুরুত্বপূর্ণ অংশ হল সেন্টিনেলদের বলা যে আপনার বর্তমান মাস্টার কোথায় থাকেন। এটি এই লাইনে উল্লেখ করা হয়েছে:
sentinel monitor mymaster 127.0.0.1 6379 2
এটি সেন্টিনেলকে "মাইমাস্টার" (এটি একটি স্বেচ্ছাচারী নাম, আপনার উপযুক্ত মনে হলে এটির নাম দিতে নির্দ্বিধায়) এবং একটি প্রদত্ত পোর্টে একটি প্রদত্ত আইপি, সেইসাথে ব্যর্থতার জন্য একটি কোরাম পূরণ করতে কতজন সেন্টিনেল প্রয়োজন তা পর্যবেক্ষণ করতে বলে ( সর্বনিম্ন হচ্ছে 2)। আপনি সম্ভবত এখানে যে অংশগুলি পরিবর্তন করতে চান তা হল আপনার মাস্টারের আইপি ঠিকানা এবং এটি পোর্ট, যদি এটি স্ট্যান্ডার্ড পোর্ট 6379-এ না চলে।
পরবর্তী, আপনি নিম্নলিখিত লাইন পরিবর্তন করতে চাইতে পারেন:
sentinel down-after-milliseconds mymaster 30000
SDOWN-এ মাস্টার ঘোষণা করার আগে আপনি একজন প্রহরীকে অপেক্ষা করতে চান এমন সময়ের পরিমাণ। ডিফল্ট হল 30 সেকেন্ড, আমি সাধারণত এটিকে কিছুটা কমিয়ে 10 সেকেন্ড করতে চাই। আপনি এটি খুব কম কমাতে চান না; অন্যথায় আপনার ব্যর্থতা প্রায়শই ঘটতে সমস্যা হতে পারে।
অন্য কিছু বিকল্পের উপর কটাক্ষপাত করতে নির্দ্বিধায়. একটি যেটি অনেক ব্যবহারকারীর আগ্রহ হতে পারে তা হল বিজ্ঞপ্তি স্ক্রিপ্ট, যদি আপনি ব্যর্থ হওয়ার সময় ট্র্যাক রাখতে চান।
একবার আপনার sentinel.conf কনফিগার হয়ে গেলে, নিম্নলিখিত কমান্ড দিয়ে ডেমন শুরু করুন:
redis-server /path/to/sentinel.conf --sentinel
পরীক্ষা ব্যর্থতা
একবার আপনার সমস্ত সেন্টিনেলগুলি অনলাইন হয়ে গেলে, এটি সমস্ত সঠিকভাবে কনফিগার করা হয়েছে তা নিশ্চিত করতে ব্যর্থতার জন্য একটি ড্রাই রান করা সম্ভব৷
আগেরটা আগে. redis-cli এর মাধ্যমে আপনার সেন্টিনেলের সাথে সংযোগ করুন:
redis-cli -p 26379
আপনি যদি সেন্টিনেল সম্পর্কে কিছু তথ্য পেতে চান তবে এই কমান্ডটি চালান:
127.0.0.1:26379> INFO
এটি আপনাকে তথ্য দেবে, যেমন বর্তমান প্রভু কে, কতজন দাস আছে এবং কতজন সেন্টিনেল এটি পর্যবেক্ষণ করছে।
ফেইলওভার পরীক্ষা করতে, সহজভাবে চালান:
127.0.0.1:26379> SENTINEL failover mymaster
এটি বর্তমান মাস্টারের উপর একটি ODOWN বাধ্য করবে এবং একটি ব্যর্থতা ঘটবে। কিছুক্ষণ পরে, আপনি যদি আবার "INFO" কমান্ড চালান, তাহলে আপনি এখন একটি নতুন মাস্টার তালিকাভুক্ত দেখতে পাবেন।
উপসংহার
আশা করি এটি রেডিস এবং সেন্টিনেলকে রহস্যময় করতে সহায়ক হয়েছে। আপনার যদি কোনো প্রশ্ন থাকে, তাহলে নির্দ্বিধায় নীচে পোস্ট করুন!