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