آپاچی؛ شب ۲۷: توزیع بار و رفتار هنگام خرابی backend
فهرست نوشته
دو backend میتوانند ظرفیت و امکان ادامهٔ سرویس بدهند، اما دادهٔ نشست و درخواست نیمهتمام خودکار حل نمیشود. امشب توزیع درخواست و خرابی یک عضو را اندازه میگیریم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: backend A روی 8080 از شب بیستوچهارم؛ backend B مستقل روی 8081 با متن backend B. config TLS backend شب قبل بازیابی شده باشد.
کلاستر کوچک#
backend B را با همان فرمان http.server، پوشهٔ جدا و پورت 8081 روی loopback اجرا کن. در Debian sudo a2enmod proxy_balancer lbmethod_byrequests slotmem_shm را اجرا کن؛ در RHEL همین ماژولها را در -M تأیید کن.
نگاشت ریشهٔ app را جایگزین کن:
<Proxy "balancer://labcluster">
BalancerMember http://127.0.0.1:8080 retry=5 connectiontimeout=2 timeout=10
BalancerMember http://127.0.0.1:8081 retry=5 connectiontimeout=2 timeout=10
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://labcluster/
ProxyPassReverse / balancer://labcluster/
byrequests بر اساس تعداد درخواست توزیع میکند؛ الزاماً به معنای زمان پاسخ یا بار CPU برابر نیست. retry زمان بازبینی عضو خطادار است، نه تضمین تکرار امن هر عملیات برنامه.
for attempt in 1 2 3 4 5 6; do
curl -sS --cacert ~/apache-lab/pki/ca.crt \
--resolve app.example.test:443:192.168.56.10 https://app.example.test/
done
باید پاسخ هر دو عضو دیده شود؛ ترتیب دقیق را بهعنوان تضمین ننویس. یکی را متوقف کن و وضعیت درخواستهای تازه، زمان پاسخ و error log را ثبت کن. پس از زمان retry، بازگرداندن عضو را هم آزمایش کن.
سلامت برنامه با باز بودن پورت فرق دارد#
این مثال خرابی اتصال را بهصورت منفعل تشخیص میدهد. health check فعال با mod_proxy_hcheck و endpoint مناسب قابل طراحی است؛ پاسخ 200 یک صفحهٔ ثابت الزاماً سلامت پایگاه داده را نشان نمیدهد. sticky session هم جای اشتراک یا ذخیرهٔ پایدار نشست نیست.
تمرین و بازگشت: توضیح بده چرا درخواست پرداخت نیمهتمام را نباید کور دوباره فرستاد. مفهوم idempotency یعنی تکرار عملیات، اثر اضافه نسازد؛ پیادهسازی آن مسئولیت برنامه است. config تکbackend را بازیابی و نمونهٔ B را متوقف کن.
منبع: mod_proxy_balancer ، health check فعال .