HAPROXY(1) General Commands Manual HAPROXY(1)

haproxy - پراکسی معکوس و متعادل‌کننده بار سریع و قابل‌اعتماد HTTP

haproxy -f <configuration file|dir> [-L name] [-n maxconn] [-N maxconn] [-C <dir>] [-v|-vv] [-d] [-D] [-W] [-Ws] [-q] [-V] [-c] [-p <pidfile>] [-dk] [-ds] [-de] [-dp] [-db] [-dM[<byte>]] [-m <megs>] [-x <unix_socket>] [{-sf|-st} pidlist...]

برنامه HAProxy یک پراکسی معکوس TCP/HTTP است که به‌ویژه برای محیط‌هایی با دسترسی‌پذیری بالا (High Availability) مناسب است. در واقع، این برنامه می‌تواند:

  • درخواست‌های HTTP را بر اساس کوکی‌های تخصیص‌یافته به صورت ایستا هدایت کند؛
  • بار کاری را میان چندین سرور توزیع کرده و با استفاده از کوکی‌های HTTP پایداری نشست (Session Persistence) را تضمین نماید؛
  • در صورت از کار افتادن سرور اصلی، ترافیک را به سرورهای پشتیبان منتقل کند؛
  • اتصالات به درگاه‌های ویژه‌ای که به پایش سرویس اختصاص یافته‌اند را بپذیرد؛
  • پذیرش اتصالات جدید را بدون قطع اتصالات موجود متوقف سازد؛
  • هدرهای HTTP را در هر دو جهت اضافه، اصلاح یا حذف کند؛
  • درخواست‌های منطبق بر یک الگوی خاص را مسدود نماید؛
  • کلاینت‌ها را بر اساس کوکی‌های برنامه به سرور برنامه‌کاربردی مناسب متصل نگه دارد؛
  • وضعیت دقیق سیستم را در قالب صفحات HTML به کاربران احراز هویت شده از طریق یک URI رهگیری‌شده از برنامه گزارش دهد.

این برنامه به منابع بسیار کمی نیاز دارد. معماری مبتنی بر رخداد (Event-driven) آن اجازه می‌دهد تا هزاران اتصال همزمان را روی صدها نمونه به آسانی و بدون به خطر انداختن پایداری سیستم مدیریت کند.

مسیر فایل یا پوشه پیکربندی را مشخص می‌کند. اگر آرگومان یک پوشه باشد، فایل‌های درون آن (و فقط فایل‌ها) به ترتیب لغوی (با استفاده از LC_COLLATE=C) اضافه می‌شوند؛ تنها فایل‌های غیرمخفی با پسوند .cfg اضافه خواهند شد.
نام نظیر (peer) نمونه محلی را تنظیم می‌کند. نظیرها در بخش پیکربندی peers تعریف می‌شوند و برای همگام‌سازی جدول‌های چسبندگی (stick tables) میان نمونه‌های مختلف به کار می‌روند. اگر این گزینه مشخص نشود، نام میزبان محلی به عنوان نام نظیر استفاده می‌شود. این نام در متغیر محیطی $HAPROXY_LOCALPEER صادر شده و می‌تواند در فایل پیکربندی استفاده شود.
حد بالایی را برای تعداد کل اتصالات همزمان تعیین می‌کند.
حد بالایی را برای تعداد اتصالات همزمان به ازای هر شنونده (listener) تعیین می‌کند.
پیش از بارگذاری هرگونه فایل، دایرکتوری را به <dir> تغییر می‌دهد.
نسخه HAProxy را نمایش می‌دهد.
نسخه HAProxy و تمام گزینه‌های زمان ساخت را نمایش می‌دهد.
برنامه را در پیش‌زمینه و با فعال بودن حالت اشکال‌زدایی (دیباگ) آغاز می‌کند. هنگامی که پراکسی در این حالت اجرا می‌شود، تمام اتصالات، قطع‌شدن‌ها، برچسب‌های زمانی و هدرهای HTTP را در خروجی استاندارد می‌ریزد. این گزینه هرگز نباید در یک اسکریپت راه‌اندازی (init script) استفاده شود، زیرا مانع از راه‌اندازی کامل سیستم خواهد شد.
برنامه را در حالت دیمن (پس‌زمینه) آغاز می‌کند.
برنامه را در حالت سرپرست-کارگر (master-worker) آغاز می‌کند. می‌تواند هم در حالت پیش‌زمینه و هم در حالت دیمن استفاده شود.
برنامه را در حالت سرپرست-کارگر همراه با پشتیبانی از اعلان systemd آغاز می‌کند. این گزینه به systemd اطلاع می‌دهد که چه زمانی فرایند آماده است. این حالت، اجرا در پیش‌زمینه را تحمیل می‌کند.
نمایش پیام‌ها در خروجی را غیرفعال می‌کند.
پیام‌ها را در خروجی نمایش می‌دهد حتی اگر -q یا 'quiet' مشخص شده باشد. برخی اطلاعات درباره نظرسنج‌ها (pollers) و فایل پیکربندی هنگام راه‌اندازی نمایش داده می‌شوند.
تنها فایل پیکربندی را بررسی می‌کند و در صورت عدم وجود خطا با کد 0 خارج می‌شود، یا در صورت یافتن خطای نگارشی (syntax) با کد 1 خروج می‌کند.
از فرایند می‌خواهد که در حالت دیمن، شناسه فرایند (PID) هر یک از فرزندان خود را، یا در حالت سرپرست-کارگر، PID فرایند سرپرست را در این فایل بنویسد.
استفاده از kqueue(2) را غیرفعال می‌کند. قابلیت kqueue(2) تنها در سیستم‌های BSD در دسترس است.
استفاده از درگاه‌های رخداد (event ports) را غیرفعال می‌کند. درگاه‌های رخداد تنها در سیستم‌های SunOS مشتق‌شده از Solaris 10 و جدیدتر (از جمله سیستم‌های illumos) در دسترس هستند.
استفاده از epoll(7) گمانه‌زنانه (speculative) را غیرفعال می‌کند. قابلیت epoll(7) تنها در لینوکس 2.6 و برخی سیستم‌های سفارشی لینوکس 2.4 در دسترس است.
استفاده از epoll(7) را غیرفعال می‌کند. قابلیت epoll(7) تنها در لینوکس 2.6 و برخی سیستم‌های سفارشی لینوکس 2.4 در دسترس است.
استفاده از poll(2) را غیرفعال می‌کند. ممکن است به جای آن از select(2) استفاده شود.
استفاده از splice(2) را که در هسته‌های قدیمی‌تر معیوب است، غیرفعال می‌کند.
حالت پس‌زمینه را غیرفعال می‌کند (در پیش‌زمینه می‌ماند، که برای اشکال‌زدایی مفید است). برای اشکال‌زدایی، گزینه '-db' بسیار سودمند است زیرا به طور موقت حالت دیمن و حالت چندفرایندی را غیرفعال می‌کند. بدین ترتیب سرویس را می‌توان به سادگی با فشردن Ctrl-C و بدون نیاز به ویرایش فایل پیکربندی یا اجرای اشکال‌زدایی کامل، متوقف کرد.
تمام نواحی حافظه تخصیص‌یافته را با مقدار <byte> مشخص‌شده مقداردهی اولیه می‌کند. این کار شناسایی باگ‌های ناشی از دسترسی به حافظه مقداردهی‌نشده را آسان‌تر می‌سازد، البته به بهای این‌که به تمام حافظه تخصیص‌یافته یک بار دسترسی پیدا می‌کند. اگر <byte> مشخص نشود، مقدار پیش‌فرض آن 0x50 (کاراکتر اسکی 'P') خواهد بود.
محدودیت مصرف حافظه را حداکثر تا سقف <megs> مگابایت اعمال می‌کند.
پس از راه‌اندازی، سیگنال FINISH را به PIDهای موجود در pidlist ارسال می‌کند. فرایندهایی که این سیگنال را دریافت می‌کنند پیش از خروج، منتظر می‌مانند تا تمام نشست‌ها به پایان برسند. این گزینه باید در انتهای دستور مشخص شود و پس از آن هر تعداد PID قرار گیرد. از نظر فنی، سیگنال‌های SIGTTOU و SIGUSR1 ارسال می‌شوند.
پس از راه‌اندازی، سیگنال TERMINATE را به PIDهای موجود در pidlist ارسال می‌کند. فرایندهایی که این سیگنال را دریافت می‌کنند بلافاصله خاتمه یافته و تمام نشست‌های فعال را می‌بندند. این گزینه باید در انتهای دستور مشخص شود و پس از آن هر تعداد PID قرار گیرد. از نظر فنی، سیگنال‌های SIGTTOU و SIGTERM ارسال می‌شوند.
تلاش می‌کند به سوکت یونیکس متصل شود و تمام سوکت‌های شنود را از فرایند قبلی بازیابی کند. در صورت امکان، سپس به جای مقید کردن (bind) سوکت‌های جدید، از این سوکت‌ها استفاده خواهد شد.
در حالت سرپرست-کارگر، یک واسط خط فرمان (CLI) سرپرست ایجاد می‌کند. این CLI امکان دسترسی به CLI هر یک از کارگرها را فراهم می‌کند. برای اشکال‌زدایی مفید است و راهی مناسب برای دسترسی به فرایندی است که در حال خروج است.

از آنجا که HAProxy می‌تواند درون یک محیط chroot اجرا شود، نمی‌تواند به صورت قابل‌اعتماد به /dev/log دسترسی پیدا کند. به همین دلیل، برای ارسال گزارش‌های خود به سرور (حتی اگر سرور محلی باشد) از پروتکل UDP استفاده می‌کند. کاربرانی که در دریافت گزارش‌ها با مشکل مواجه می‌شوند باید اطمینان حاصل کنند که دیمن syslog آن‌ها به سوکت UDP گوش می‌دهد. چندین توزیع لینوکس که همراه با syslogd از بسته sysklogd عرضه می‌شوند، UDP را به طور پیش‌فرض غیرفعال دارند. برای فعال کردن UDP، باید گزینه -r به دیمن ارسال شود.

برخی سیگنال‌ها معنای ویژه‌ای برای دیمن haproxy دارند. به طور کلی، این سیگنال‌ها میان دیمن‌ها رد و بدل می‌شوند و نیازی به استفاده مستقیم توسط مدیر سیستم ندارند.

به دیمن اعلام می‌کند که تمامی پراکسی‌ها را متوقف کرده و پس از بسته شدن همه نشست‌ها خارج شود. از این سیگنال اغلب به عنوان سیگنال «توقف نرم» (soft-stop) یاد می‌شود.
در حالت سرپرست-کارگر، پیکربندی را بازخوانی کرده و یک سیگنال توقف نرم به فرایندهای قدیمی ارسال می‌کند.
به دیمن اعلام می‌کند که شنود روی تمام سوکت‌ها را متوقف کند. به صورت داخلی توسط گزینه‌های -sf و -st استفاده می‌شود.
به دیمن اعلام می‌کند که پس از دریافت SIGTTOU، شنود روی تمام سوکت‌ها را از سر بگیرد. به صورت داخلی هنگام بروز مشکل در جریان پیکربندی مجدد بدون وقفه (hot reconfiguration) به کار می‌رود.
هر دو سیگنال می‌توانند برای متوقف ساختن سریع دیمن استفاده شوند.
وضعیت تمام پراکسی‌ها و سرورها را درون گزارش‌ها می‌ریزد. عمدتاً برای اهداف عیب‌یابی استفاده می‌شود.
اطلاعات مربوط به استخرهای حافظه (memory pools) را در خروجی خطای استاندارد (stderr) می‌ریزد. عمدتاً برای اهداف اشکال‌زدایی استفاده می‌شود.
این سیگنال در سیستم‌های فاقد MSG_NOSIGNAL رهگیری شده و نادیده گرفته می‌شود.

مستندات بسیار کامل‌تری را می‌توانید در فایل configuration.txt بیابید. در سیستم‌های دبیان، این فایل در مسیر /usr/share/doc/haproxy/configuration.txt.gz قرار دارد.

برنامه HAProxy توسط Willy Tarreau نوشته شده است. این صفحه راهنما توسط Arnaud Cornet و Willy Tarreau به نگارش درآمده است.

17 August 2007