haproxy: অ্যাপ সেশন লাথি না দিয়ে সার্ভার রক্ষণাবেক্ষণ কীভাবে প্রস্তুত করবেন?


13

সমস্যাটি

ব্যালেন্স ওয়েব সার্ভারগুলি লোড করতে আমি হ্যাপ্রোক্সি ব্যবহার করছি। আমি অতিরিক্ত কুকিগুলির সাথে সেশন অধ্যবসায় ব্যবহার করি কারণ কিছু অ্যাপ্লিকেশনগুলি সেশন ফাইলগুলি ব্যবহার করে এবং এগুলি সার্ভারের মধ্যে সিঙ্ক্রোনাইজ হয় না।

রক্ষণাবেক্ষণের জন্য আমি কোনও সার্ভার অক্ষম করতে চাই, তবে সেশন না ভেঙে। সুতরাং আমি বিদ্যমান ক্লায়েন্টদের তাদের অ্যাপ্লিকেশন সেশন চালিয়ে যাওয়ার অনুমতি দিতে চাই, তবে নতুন ক্লায়েন্টকে গ্রহণ করবেন না।

haproxy আচরণ

  • আমি "রক্ষণাবেক্ষণে যেতে" একটি সার্ভার সেট করেছি
  • যদি কোনও ক্লায়েন্টের কুকি সেট থাকে তবে "রক্ষণাবেক্ষণে যেতে" হিসাবে চিহ্নিত হলেও সার্ভারটি ব্যবহার করুন
  • যদি কোনও নতুন ক্লায়েন্ট (কুকিবিহীন) আসে তবে এটি অন্য সার্ভারে পরিচালিত হবে
  • সমস্ত ক্লায়েন্টরা তাদের অ্যাপ্লিকেশন সেশন শেষ করার পরে, আর কোনও ক্লায়েন্টের কাছে এই নির্দিষ্ট সার্ভারে কুকি সেট করা থাকবে না এবং ব্যবহারকারীর বাধা ছাড়াই এটিকে বন্ধ করে দেওয়া ভাল।

আপনি কি মনে করেন যে এটি কিছু হ্যাপ্রোক্সি কনফিগারেশন দ্বারা অর্জনযোগ্য? নাকি এটি করার কোনও চতুর উপায় আছে?

অন্যান্য উপায়

এই প্রয়োজনীয়তা অর্জনের অন্যান্য উপায়গুলির অস্তিত্বহীন তালিকা:

  • সার্ভারের মধ্যে সেশন ফাইলগুলি সিঙ্ক্রোনাইজ করা (বেশ কয়েকটি সার্ভারের মধ্যে ফাইলগুলি সিঙ্ক্রোনাইজ করার জন্য একটি উপায় প্রয়োজন বা একটি সাধারণ একক মাউন্টপয়েন্ট)
  • সেশন তথ্য (অ্যাপ্লিকেশন আচরণ পরিবর্তন করার প্রয়োজন) সংরক্ষণ করতে ডাটাবেস ব্যবহার করুন

আরো বিস্তারিত

আমি এই ধরণের কনফিগারেশন ব্যবহার করি:

frontend https-in
   bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
   reqadd X-Forwarded-Proto:\ https

   acl APP1 hdr(host) -i APP1.atac.local
   use_backend APP1 if APP1

   default_backend _default

backend APP1
   redirect scheme https if !{ ssl_fc }
   mode http
   balance roundrobin
   cookie HAPROXY_SESSION insert indirect
   option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
   server SRV1 SRV1_IP:PORT cookie SRV1 check
   server SRV2 SRV2_IP:PORT cookie SRV2 check

আমি যদি কেবল এসআরভি 1 অক্ষম করি (হ্যাপ্রোক্সি ক্লাইম কমান্ড সহ), আমি মনে করি এসআরভি 1 এ খোলা সমস্ত অ্যাপ্লিকেশন সেশন বর্তমান এইচটিটিপি "সেশন" শেষ হওয়ার পরে ভেঙে যাবে। এটা কি সঠিক?


আপনার সার্ভারটি কি এইচটিটিপি মোড বা টিসিপি মোডে চলছে?
অস্টিনিয়ান

1
@austinian; তিনি কীভাবে কুকিজের উপর ভিত্তি করে ভারসাম্য রক্ষা এবং অধ্যবসায়ের বিষয়ে কথা বলছেন (সম্ভবত টিসিপি মোড এ জাতীয় বৈশিষ্ট্যগুলি সরবরাহ করে না) হিসাবে দেখা হচ্ছে সম্ভবত এইচডিপি মোড seeing
গ্রেগল

@ খ্রিস্টোফ, আপনি কি আপনার 'হ্যাপ্রোক্সি আচরণ' বিভাগে বর্ণিত কনফিগারেশনটি চেষ্টা করেছেন, কারণ এটি কাজ করা উচিত।
গ্রেগল

@ গ্রেগল, ঠিক আছে, আমি এটাই ভাবছি। যদি সে এইচটিটিপি মোড ব্যবহার করে এবং সার্ভারটিকে কেবল রক্ষণাবেক্ষণ মোডে সেট করে, তবে এটি নতুন সেশনগুলি গ্রহণ করা বন্ধ করবে তবে বৈধ সেশনগুলি শেষ হওয়ার আগ পর্যন্ত তা বাঁচিয়ে রাখবে। টিসিপি মোডে আপনার এখনও কুকিজ ইত্যাদি থাকতে পারে, তবে তারপরে এটি HAProxy- এর কোনও অর্থ হবে না।
অস্টিনিয়ান

@ খ্রিস্টোফ, আপনি আপনার রক্ষণাবেক্ষণের সময়কে আরও কম করার জন্য "আরও চতুর উপায়" ব্যবহার করার চেষ্টা করছেন বা আপনি রক্ষণাবেক্ষণের জন্য অপেক্ষা করার সময় সেশনগুলি নিখুঁতভাবে শেষ করার উপায় খুঁজছেন?
অস্টিনিয়ান

উত্তর:


6

ওয়েব ম্যানেজমেন্ট ইন্টারফেস ব্যবহার করে সার্ভারটি ড্রেন মোডে রাখুন। এটি আপনার সন্ধানের সঠিক কার্যকারিতা সরবরাহ করে।


3
আপনি Maint তা সেট করেন তাহলে, এটা পাঠানো বন্ধ যাচ্ছে কোন হিসাবে রূপরেখা এটি ট্রাফিক, এখানে । বরং, তিনি এটিকে ড্রেন মোডে রাখতে চান এবং stick-tableঅধ্যবসায় দেওয়ার জন্য মেয়াদোত্তীর্ণতার সাথে ব্যবহার করতে চান।
গ্রেগএল

@ গ্রেগল, ওফস, এখনই ঠিক করছে
অস্টিনিয়ান

আপনার উত্তর, অস্টিনিয়ান এবং @ গ্রেডএল জন্য ধন্যবাদ। আমি চেষ্টা করব। শক্ত অংশটি স্টিক-টেবিলের সাথে থাকবে বলে আমি মনে করি। আমাকে এই স্টিক-টেবিলের নিকাশী মোড সার্ভারে সেট করা কুকি সহ প্রতিটি ক্লায়েন্টকে সংরক্ষণ করার একটি উপায় খুঁজে পেতে হবে।
ক্রিস্টোফ ড্রেভেট-ড্রাগুয়েট

ঠিক আছে, মনে হচ্ছে ড্রেন মোডটি আমার ক্ষেত্রে যথেষ্ট, ইতিমধ্যে কুকি সেট থাকা সেশনগুলি এখনও নিষ্কাশিত সার্ভার ব্যবহার করে এবং নতুন সেশনগুলি অন্য সার্ভারগুলিতে পরিচালিত হয়।
ক্রিস্টোফ ড্রেভেট-ড্রাগুয়েট

1
আপনি ওয়েব ইন্টারফেসে মোডগুলি কীভাবে পরিবর্তন করবেন? এটি কেবল তথ্যবহুল বলে মনে হচ্ছে।
কাগনোনিক

9

আপনি যদি আপনার হ্যাপ্রোক্সি কনফিগারেশনগুলির সাথে যোগাযোগের জন্য সকেট ব্যবহার করেন, আপনি নিম্নরূপভাবে ড্রেন অবস্থায় একটি সার্ভার রাখতে পারেন:

echo "set server backend/serv state drain" | sudo socat stdio /etc/haproxy/haproxysock

আরও কমান্ড এখানে ! উবুন্টুতে socat ইনস্টল এই যান উত্তর

আমি এটি হ্যাপ্রোক্সি ১..3.৩ সংস্করণ দিয়ে পরীক্ষা করেছি :)


1

অন্যান্য উপায়

সার্ভারের মধ্যে সেশন ফাইলগুলি সিঙ্ক্রোনাইজ করা (বেশ কয়েকটি সার্ভারের মধ্যে ফাইলগুলি সিঙ্ক্রোনাইজ করার জন্য একটি উপায় প্রয়োজন বা একটি সাধারণ একক মাউন্টপয়েন্ট)

যদি আপনার ব্যাকএন্ড সার্ভারগুলি অ্যাপ্লিকেশনগুলির জন্য পিএইচপি ব্যবহার করে তবে আপনি তাদের মধ্যে সেশনগুলি সিঙ্ক করতে মেমক্যাচ ব্যবহার করতে পারেন।

এছাড়াও কাউচবেস-সার্ভার বাক্সের বাইরে মেমকেচে প্রতিলিপি করতে পারে।
অবশ্যই এটি সেশনের অনুলিপি জন্য কাউচবেস-সার্ভার ব্যবহার করার জন্য একধরণের ওভারকিল :)


যদিও এটি আরও ভাল উপায় হবে তবে এর কোডের পরিবর্তন দরকার, আমি মনে করি। সুতরাং আমি আমাদের বর্তমান অ্যাপ্লিকেশনগুলির জন্য উত্তরগুলি অস্টিনিয়ান এবং গ্রেগল ব্যবহার করব যা সেশনগুলি সিঙ্ক করে না।
ক্রিস্টোফ ড্রেভেট-ড্রাগুয়েট

যদি আপনার কোডটি কোনও কাস্টম সেশন হ্যান্ডলারটি সেট না করে থাকে তবে সেশনগুলির জন্য ম্যাকচেচি ব্যবহার করার জন্য আপনাকে পিএইচপি জন্য কোনও কোড পরিবর্তন করার দরকার নেই। এগুলি সমস্ত কোডে নয়, php.ini এ কনফিগার করা আছে।
Cha0s

ঠিক আছে, Cha0s, আমি এটি তাকান।
ক্রিস্টোফ ড্রেভেট-ড্রাগুয়েট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.