Ticketing সার্ভার ডিপ্লয়মেন্ট
এনভায়রনমেন্ট ভ্যারিয়েবল
সার্ভার কনফিগারেশন সম্পূর্ণভাবে এনভায়রনমেন্ট ভ্যারিয়েবল দিয়ে হয়। কী কেস-অসংবেদনশীল, খালি মান মিসেট হিসেবে গণ্য হয়, আর ফ্ল্যাগ-জাতীয় মান শুধু 1/true/yes/on হলেই সত্য। Docker ইমেজ scratch-ভিত্তিক, তাই কনফিগ কোনো কনফিগ ফাইল ছাড়াই শুধু এনভায়রনমেন্ট ভ্যারিয়েবল দিয়ে ইনজেক্ট করা হয়।
| এনভায়রনমেন্ট ভ্যারিয়েবল | ডিফল্ট | বিবরণ |
|---|---|---|
PORT | 5225 | সিঙ্গেল মোডে লিসেন পোর্ট। ক্লাস্টার মোডে উপেক্ষিত, তখন CLUSTER_SELF-এর পোর্ট ব্যবহৃত হয় |
SOCKET_BIND | 0.0.0.0 | লিসেন ঠিকানা |
CLIENT_TOKENS | (নেই) | ক্লায়েন্ট প্রমাণীকরণ টোকেনের কমা-বিভক্ত তালিকা। মিসেট হলে খালি টোকেন অনুমোদিত |
CLUSTER_SELF | (নেই) | এই নোডের বিজ্ঞাপিত ঠিকানা, host:port। উপস্থিত থাকলে ক্লাস্টার মোড সক্রিয় হয় |
CLUSTER_PEERS | (নেই) | সব নোডের বিজ্ঞাপিত ঠিকানার কমা-বিভক্ত তালিকা। ঠিক ৩ বা ৫টি, সব নোডে একই ক্রম, অবশ্যই self অন্তর্ভুক্ত |
CLUSTER_TOKENS | (নেই) | পিয়ার-টু-পিয়ার প্রমাণীকরণ টোকেনের কমা-বিভক্ত তালিকা |
TLS_CERT / TLS_KEY | (নেই) | সার্টিফিকেট/প্রাইভেট কী PEM ফাইলের পাথ — TLS সক্রিয় করতে দুটোই একসাথে সেট করুন |
TLS_CA | (নেই) | পিয়ার সার্টিফিকেট যাচাইয়ের CA — মিসেট হলে সিস্টেম ট্রাস্ট স্টোরে ফিরে যায় |
TLS_SKIP_VERIFY | false | পিয়ার সার্টিফিকেট যাচাই বাদ দেয় — শুধু টেস্টের জন্য |
DOCKER | false | ক্লাস্টার মোডে অভ্যন্তরীণ লিসেন পোর্ট 5225/6225-এ আটকে রাখে — অফিসিয়াল ইমেজে ডিফল্টভাবে সেট করা |
DEBUG | বিল্ড-নির্ভর | 1/true হলে ডিবাগ লগিং সক্রিয় |
সম্পূর্ণ নিয়মের জন্য (পোর্ট নির্ধারণ, বিজ্ঞাপিত ঠিকানা, শূন্য-ডাউনটাইম টোকেন ঘোরানো ইত্যাদি) দেখুন কনফিগারেশন (এনভায়রনমেন্ট ভ্যারিয়েবল)।
সিঙ্গেল বনাম ক্লাস্টার
- সিঙ্গেল (১ নোড):
CLUSTER_*ছাড়া নোড একাই চলে। সবচেয়ে দ্রুত, কিন্তু পুনরায় চালুতে সংক্ষিপ্ত বিরতি হয়, আর স্টেট ইন-মেমরি বলে পুনরায় চালু হলে হারিয়ে যায় (leaseসুরক্ষা জাল)। - ক্লাস্টার (নিরবচ্ছিন্ন): ৩ বা ৫টি নোড। নোডগুলো Raft ঐকমত্যের মাধ্যমে একটি একক লক-স্টেট শেয়ার করে — শুধু লিডার অনুরোধ প্রক্রিয়া করে, আর প্রতিটি স্টেট পরিবর্তন সংখ্যাগরিষ্ঠ কমিটের পরই চূড়ান্ত হয়। লিডার মারা গেলে ০.৫-১ সেকেন্ডের মধ্যে নতুন লিডার নির্বাচিত হয়, এবং সংখ্যাগরিষ্ঠতা চালু থাকা পর্যন্ত লক-স্টেট ও সেবা চালু থাকে। বিস্তারিত ব্যাখ্যার জন্য দেখুন কার্যপ্রণালী এবং প্রোটোকল (ক্লাস্টার)।
- প্রতিটি ক্লাস্টার নোড ক্লায়েন্ট পোর্টের পাশাপাশি একটি Raft পোর্ট (ক্লায়েন্ট পোর্ট + ১০০০)-ও শোনে — ফায়ারওয়ালে দুটো পোর্টই খুলুন।
Kubernetes ক্লাস্টার ডিপ্লয়মেন্ট একটি StatefulSet + হেডলেস সার্ভিস ব্যবহার করে। প্রতিটি পডকে একটি স্থিতিশীল DNS নাম দিন (
ticketing-0.ticketing…,ticketing-1.ticketing…), সেই নামগুলোCLUSTER_PEERS-এ বসান, আর প্রতিটি পডেরCLUSTER_SELFdownward API (metadata.name) দিয়ে স্বয়ংক্রিয়ভাবে ইনজেক্ট করুন।
নিরবচ্ছিন্ন পুনরায় চালু (রোলিং)
মূল নিয়ম একটাই — সংখ্যাগরিষ্ঠতা সবসময় চালু থাকতে হবে (৩টির মধ্যে একসাথে সর্বোচ্চ ১টি বন্ধ)।
- ফলোয়ার দিয়ে শুরু করুন, একে একে পুনরায় চালু করুন। পুনরায় চালু হওয়া নোড রেপ্লিকেশন বা স্ন্যাপশট দিয়ে ধরে ফেললে পরেরটিতে যান।
- শেষে, লিডারকে নামান — ০.৫-১ সেকেন্ডের মধ্যে নতুন লিডার নির্বাচিত হয়, আর ক্লায়েন্ট স্বচ্ছভাবে সরে যায়।
- বন্ধ থাকা নোড আবার চালু করলে সেটি ফলোয়ার হিসেবে যোগ দেয়।
বিস্তারিত ধাপের জন্য দেখুন নিরবচ্ছিন্ন পুনরায় চালু (রোলিং) পদ্ধতি।
রেফারেন্স
- ইমেজ:
sarolab/ticketing· Github: saro-lab/ticketing - ক্লায়েন্ট (ব্রোকার)-এ প্রতিটি নোডের ঠিকানা নিবন্ধন করুন যাতে স্বয়ংক্রিয়ভাবে ফেইলওভার হয়। ভাষাভিত্তিক ব্যবহারের জন্য দেখুন লাইব্রেরি।