HAProxy که مخفف High Availability Proxy است، یک سرور پراکسی مبتنی بر TCP و HTTP است که روی لینوکس، سولاریس و FreeBSD اجرا میشود. این ابزار برای متعادلسازی بار برنامهها به کار میرود تا درخواستها بین چند سرور توزیع شوند و اطمینان حاصل شود که برنامهها همیشه برای کاربران در دسترس هستند.
به طور پیشفرض، در بسیاری از نصبهای Rocky Linux 8، HAProxy برای نوشتن لاگهای خود در فایل پیکربندی نشده است. این راهنمای سریع روش پیکربندی لاگینگ HAProxy با Rsyslog با استفاده از سوکت دامنه یونیکس برای افزایش قابلیت اطمینان، سرعت و امنیت را توضیح میدهد.
برای انجام این آموزش، شما نیاز به یک سرور با سیستم عامل Rocky Linux 8 دارید که باید یک کاربر غیر روت با دسترسیهای مدیریتی داشته باشد.
برای نصب HAProxy، دستور زیر را اجرا کنید:
dnf install haproxy
زمانی که پیغام Is this ok [y/N]: دریافت کردید، کلید y را زده و ENTER را فشار دهید تا نصب انجام شود.
پس از نصب HAProxy، با دستور systemctl سرویس را فعال و راهاندازی کنید:
systemctl enable haproxy
systemctl start haproxy
با فعال شدن سرویس HAProxy، آن را اجرا کنید تا مطمئن شوید با تنظیمات پیشفرض روی سرور شما اجرا میشود.
سپس وضعیت HAProxy را بررسی کنید تا مطمئن شوید سرویس در حال اجرا است:
systemctl status haproxy
خروجی باید شامل بخش active (running) باشد. اگر وضعیت به درستی نمایش داده شد، HAProxy به درستی اجرا میشود و میتوانید به مرحله تنظیم لاگینگ بروید.
بعد از تایید اجرا بودن HAProxy، میتوانید تنظیمات مربوط به لاگینگ را انجام دهید.
برای پیکربندی دستورات لاگینگ HAProxy، فایل /etc/haproxy/haproxy.cfg را با ویرایشگر مورد علاقه خود باز کنید:
vi /etc/haproxy/haproxy.cfg
وارد حالت INSERT شوید (دکمه i) سپس خط log 127.0.0.1 local2 را پیدا کرده و با افزودن # در ابتدای خط آن را کامنت کنید:
سپس مستقیماً بعد از آن خط، این دستور را اضافه کنید:
log /dev/log local0
بخش مربوط به لاگینگ در /etc/haproxy/haproxy.cfg باید مشابه نمونه زیر باشد:
chroot /var/lib/haproxy
log /dev/log local0
خط chroot اهمیت دارد زیرا فرآیند HAProxy را محدود به دسترسی به فایلها فقط در دایرکتوری /var/lib/haproxy میکند. خط log /dev/log local0 نیز یک فایل داخل این دایرکتوری ایجاد میکند که Rsyslog برای جمعآوری لاگها از آن استفاده خواهد کرد.
بعد از اتمام ویرایش، ذخیره کرده و خارج شوید (ESC سپس :wq و ENTER).
گام بعدی ایجاد دایرکتوری /var/lib/haproxy/dev است که به صورت پیشفرض وجود ندارد:
mkdir -p /var/lib/haproxy/dev
systemctl restart haproxy
اکنون HAProxy پیکربندی شده تا لاگهای خود را به سوکت دامنه یونیکس در مسیر /var/lib/haproxy/dev/log ارسال کند.
در مرحله بعد، باید Rsyslog را تنظیم کنید تا این سوکت را ایجاد کرده و به آن دسترسی داشته باشد.
پیکربندی پیشفرض Rsyslog در Rocky Linux 8 لاگهای HAProxy را دریافت نمیکند. برای تنظیم، یک فایل جدید /etc/rsyslog.d/99-haproxy.conf باز کنید:
vi /etc/rsyslog.d/99-haproxy.conf
در حالت INSERT خطوط زیر را وارد کنید:
$AddUnixListenSocket /var/lib/haproxy/dev/log
:programname, startswith, "haproxy" /var/log/haproxy.log
& stop
خط اول به Rsyslog میگوید که یک سوکت دامنه یونیکس در مسیر مشخصشده ایجاد کند. بخش دوم تعیین میکند لاگهای دریافتی از این سوکت در فایل /var/log/haproxy.log ذخیره شوند.
فایل را ذخیره کرده و خارج شوید (ESC سپس :wq و ENTER).
اکنون Rsyslog پیکربندی شده تا لاگها را از سوکت بخواند و در فایل مورد نظر ذخیره کند.
قبل از راهاندازی مجدد Rsyslog باید وضعیت SELinux را بررسی کنید:
getenforce
اگر خروجی Permissive یا Disabled بود، Rsyslog را با دستور زیر راهاندازی مجدد کنید:
systemctl restart rsyslog
پس از این، میتوانید لاگها را در /var/log/haproxy.log ببینید. به مرحله بعد – آزمایش لاگینگ HAProxy – بروید تا مطمئن شوید همه چیز درست کار میکند.
اگر SELinux در حالت Enforcing بود، نیاز است یک ماژول SELinux اضافه کنیم تا اجازه دسترسی به سوکت به Rsyslog داده شود.
برای این کار ابتدا یک فایل سیاست Type Enforcement ایجاد کنید. یک فایل جدید به نام rsyslog-haproxy.te بسازید:
vi rsyslog-haproxy.te
در حالت INSERT خطوط زیر را وارد کنید:
module rsyslog-haproxy 1.0;
require {
type rsyslogd_t;
type haproxy_var_lib_t;
class unix_stream_socket connectto;
class dir { getattr search open };
}
#============= rsyslogd_t ==============
allow rsyslogd_t haproxy_var_lib_t:dir { getattr search open };
allow rsyslogd_t haproxy_var_lib_t:unix_stream_socket connectto;
این فایل نام ماژول و قوانین دسترسی لازم را مشخص میکند. پس از اتمام ذخیره کنید و خارج شوید (ESC سپس :wq و ENTER).
بسته checkpolicy را نصب کنید تا بتوانید فایل سیاست را به ماژول SELinux کامپایل کنید:
dnf install checkpolicy
حالا با استفاده از دستور زیر فایل TE را به یک ماژول SELinux تبدیل کنید:
checkmodule -M -m -o rsyslog-haproxy.mod rsyslog-haproxy.te
سپس یک بسته سیاست برای بارگذاری بسازید:
semodule_package -o rsyslog-haproxy.pp -m rsyslog-haproxy.mod
و در نهایت آن را بارگذاری کنید:
semodule -i rsyslog-haproxy.pp
صبر کنید تا عملیات تمام شود و سپس با این دستور مطمئن شوید که ماژول بارگذاری شده است:
semodule -l | grep haproxy
در نهایت Rsyslog را ریستارت کنید:
systemctl restart rsyslog
اکنون سیاست SELinux تنظیم شده تا HAProxy و Rsyslog بتوانند روی سوکت مشترک خود ارتباط برقرار کنند.
برای آزمایش لاگینگ، یک درخواست HTTP به HAProxy ارسال کنید و فایل لاگ جدید را بررسی کنید.
به طور پیشفرض، بسته HAProxy یک تنظیمات پیشفرض دارد که یک شنونده HTTP روی پورت ۵۰۰۰ ایجاد میکند. این تنظیم به یک سرور backend غیرموجود اشاره دارد، پس هر درخواست HTTP پاسخ خطای ۵۰۳ دریافت خواهد کرد.
برای تولید یک درخواست HTTP با Curl این دستور را اجرا کنید:
curl http://localhost:5000
باید خروجی مانند زیر دریافت کنید:
503 Service Unavailable
اکنون، در /var/log/haproxy.log پاسخهای ۵۰۳ را جستجو کنید:
grep "NOSRV.+503" /var/log/haproxy.log
این خطها نشاندهنده درخواست curl شما هستند که تثبیت میکند HAProxy و Rsyslog با استفاده از سوکت مشترک به درستی پیکربندی شدهاند.
در این آموزش سریع، HAProxy را برای لاگینگ به یک سوکت دامنه یونیکس پیکربندی کردید. همچنین Rsyslog را تنظیم کردید تا این سوکت را ایجاد و خوانده و در صورت نیاز سیاست SELinux را برای اجازه دسترسی بین HAProxy و Rsyslog اضافه کردید.
از همراهی شما با ParminCloud سپاسگزاریم.



نظرات کاربران