ما معمولا روی سرور های هاست ایران rule های متعدی برای کاربران اضافه می کنیم تا بتونیم از مشکلات احتمالی که توسط بعضی از کاربران به وجود میاد جلوگیری کنیم یا در بعضی شرایط بتوانیم سایتی که باعث اختلال سرور شده رو ردیابی و مسدود کنیم . این کار با نوشتن یک سری روبات که هر شب روی سرور اجرا می شن و بالا بردن حساسیت لوگ های سرور و البته بررسی روزانه لوگ ها , انجام می شه . این رو هم بگم که قرار نیست همه ی این فوت های کوزه گری رو من توی این وب لاگ بنویسم ولی بعضی ابزار های opensoure رو بد نیست به اطلاعا دیگران هم برسونیم. به عنوان مثال patch مربوط به mail() این امکان رو در هدر های ایمیل ارسال شده توسط این function در php بوجود میاره که شما ارسال کننده ی ایمیل رو از طریق اطلاعات مربوط به هدر اون شناسایی کنید .
شکل هدر ایمیل ها:
Code:
X-PHP-Script
for:
برای مثال :
Code:
X-PHP-Script: www.example.com/~user/testapp/send-mail.php for 10.0.0.1
توجه داشته باشید برای استفاده از این patch باید php خود رو مجدادا با این patch کامپایل کنید. البته در نسخه ی easyapache 3 خود cpanel11 این گزینه در قسمت advance قابل انتخاب هست.
نویسنده ی این patch فقط برای نسخه ی ۴٫۳٫۴ اون رو ارائه کرده ولی دیگران از اونجایی که این پروژه opensource بوده ادامش دادن و در حال حاضر در سایت http://choon.net/php-mail-header.php شما می توانید اخرین نسخه ی آماده شده برای php نسخه ی ۴ یا ۵ را دریافت کنید .
اطلاعات بیشتر را در سایت سازنده این patch بخوانید :
در مورد لود سرور میخوایم صحبت کنیم به نقل از wikipedia در اصل server load یعنی یک معیار دجیتال برای اندازه گیری مقدار و حجم عملیات هایی که در حال انجام روی سرور یا کامپیوتر شخصی انجام میشه و معمولا به صورت درصد و عددی بیان میشه خوب این رو میشه توی لینوکس با یکی از دستور ها ی uptime یا w با top فهمید .
به عنوان مثال
کد:
root@cpanel-4 [/home]# uptime 15:35:20 up 9 days, 4:55, 1 user, load average: 0.83, 1.20, 1.22 root@cpanel-4 [/home]#
اون ۳ عددی که اونجای می بینید نشون دهنده ی لود سرور در ۱ ؛ ۵ ؛ ۱۵ دقبقیه اخیره … یعنی در یک دقیقه ی پیش لود سرور ۴ ما ۰٫۸۳ درصد بود و در ۱۵ دقیقه ی گذشته ۱٫۲۲ درصد بوده .
server load چه عددی باشه یعنی خوبه؟ لود متعادل یعنی یک عدد بین ۱ و ۱٫۵ درصد برای هر CPU معمولی ( به کلمات دقت کنید .. .) وقتی واسه یه همچین سروری لود روی این اعداد باشه یعنی cpu داره همه ی task ها رو به خوبی و بدون مشکل انجام میده و به هیچ task ی wait نمیده …
اگه یه سرور با ۱۰۰ تا سایت داشتیم لود سرور روی ۰ بود یعنی خوبه ؟ نه اگه یک همچین اتفاقی براتون افتاد بدونید وب سرورتون down هست چون با ۱۰۰ تا سایت امکان نداره لود سرور ۰٫۰۰ باشه ..
خوب حالا اگه لود سرور از این اعداد استاندارد بالاتر بود , چه اتفاقی میفته؟ برای این سرور اگه لود از ۱ بالاتر بره task های اضافی میمونن توی صف (queue) بعد به نوبت میرن و انجام میشن .
خب مشکل خاصی پیش نمیاد همه کارشون رو انجام میدن فقط صدای مشتری ها درمیاد که سرور کند شده…. ولی وای به روزی که لود سرور از ۱۰ درصد (یعنی ۴-۵ برابر لود استاندارد اون سرور) این همون موقعیه که service هایی مثل apache و mysql شروع میکنند به fail شدن چون زیاد نمیتونند تو wait بمونند.
معمولا زودرنج ترین service ها به ترتیب mysql , mail server , apache هستند که سریع fail میشن و صدای همه در میاد.
ما یه سرور داریم از کجا بدونیم لودش چنده ؟ معمولا مشخص می کنند اون سرور چندتا cpu داره به عنوان مثال اگه یه سرور dual core باشه سرور لود اصلی اون عددی که اونجا نشون داده میشه تقسیتم بر ۲ هست .
این برای اینه که وقتی ما چند تا cpu داشته باشیم task ها بین این cpu ها تقسیم میشن و دستور های uptime و top و w مجموعشون رو نشون میده که عدد واقعی رو باید از تقسیم اون عدد بر تعداد cpu ها بدست اورد. سرور های xeon هر cpu به اندازه ۲ تا cpu کار می کنه یعنی dual xeon ها درواقع ۴ تا cpu حساب میشن.
مثلا در مثال بالا لود واقعی سرور ۴ ما در ۱۵ دقیقه ی گذشته ۰٫۳۰۵ درصد بوده چرا لود سرور بعضی وقت ها به طور ناگهانی زیاد میشه !؟ خوب این چیزیه که اکثر همکاران ما و مشتریانی که با سرور های dedicated و vps باهاش درگیر هستند .
لود بالای سرور دلایل مختلفی داره مه در زیر به اونها اشاره می کنم.
۱- سایت های بزرگ و فروم های پر تراکم:
اگر روی سرورتون سایت پربازدیدی مثل سایت های ماهواره ی یا تالار های گفتمان یا سایت های خدماتی دارید هاست می کنید یا به تازگی یکی از reseller های شما از این قبیل سایت ها هاست کرده شما با pick های cpu مواجه خواهید شد. دیلیلش اینه که معمولا این script ها برای این حجم کاربر optimize نشده و تعداد connection هایی که برای هرکاربر باز می کنه تا اطلاعات رو بهش نشون بده به قدری بالا میره که در یک لحظه سرویس mysql شاید بیش از ۱۰۰۰۰ task برای cpu داشته اونم فقط واسه یک سایت .
ما این مشکل رو برای سایت های phpnuke قدیمی داشتیم – در ابتدای کار هیچ مشکلی پیش نمیاد چون سایت طرف visitor ی نداره ولی بعد از ۵ -۶ ماه تا سایت پر بازدید میشه می بینیم حجم زیادی از resource بابت یه سایت کوچیک اشغال شده … (راه حلش اینه که این به ورژن optimize شده nuke که در ایجاد connection سرویس mysql بسیار خوب عمل میکمه ارتقا بدید مثل EVO nuke) بعضی وقت ها هم ایراد از script نیست واقعا حجم زیادی بازدید کننده داره سایت؛ مثل سایت p30download.com خوب هاست کردن چنین سایتی روی سرور shared ی که ازش انتظار پشتیبانی ۳۰۰-۴۰۰ سایت قدونیم قد دیگه داریم دیوانگیه … به طور کلیه هر سرور باید در حدی روش هاست بشه که هیچ سایتی برای سایت دیگر اختلالی ایجاد نکنه و همه به طور عادلانه از resource استفاده کنن.
نمیشه گفت روی هر سرور چند تا سایت میشه هاست کرد این به تجربه شما بستگی داره و اگر ۴-۵ سال به اصطلاح ما خاک سرور خورده باشید میتونید راحت حدث بزنید چند تا از چه نوع سایتی روی این سرور میشه هاست کرد.(اکثر شرکت های کم تجربه ی همکار هروفقت سرور شروع به fail کردن و down شدن کرد به فکر سرور جدید و balancing می افتند) البته ما برای شروع کار هر سرور طبق یک فرمولی تعداد سایت های مجاز رو حدث میزنیم و معمولا ۳۰ % از resource رو باز میگزاریم برای رشد احتمالی سایت ها و reseller های روی اون سرور یعنی از ۱۰۰ درصد روی ۷۰ درصد برنامه ریزی می کنیم .
۲- script های غیرمجاز و spammer ها اگر از ما سرویس داشته باشید میبینید در بالای همه ی سرور های cpanel به هقت زبان زنده ی دنیا و با warnning قرمز رنگ نوشتیم phpproxy, spamming و script هایی که از resource سرور بیش از حد استفاده می کنند upload نکنید . ولی باز هم کاربر ها با آگاهی یا بدون اگاهی از این فعالیت ها انجام میدن . اصولا سرور های shared برای سرویس های ارسال ایمل و خبرنامه یا proxy در نظر گرفته نشده و بی توجهی شما به این گونه موارد باعث میشه که سرور به مشکل بر بخوره..
بنابراین اگر خواهان سرویس stable هستید این موارد رو جدی بگیرید.
۳- بعضی وقت ها لود بالای سرور به خاطر اجرا شدن task های crontab خود سرور هست … به عنوان مثال backup گیری تولید stats ها از log های سرور و بقیه کارهای روزمره از این قبیل هستند. که ادمین سرور باید بر اساس تجربه و شناختی که روی این سرور داره ساعات خاصی رو برای انجام این کار ها تنظیم کنه مه هم روی هم نیافته و هم در ساعات پرترافیک باعث اختلال کار سرویس های مختلف نشه .
۴- زیاده فروشی؟؟؟ یا oversalling خب اکثر ما ایرانیا عادت داریم حداکثر استفاده رو از چیزی که داریم بکنیم . بعضی از این مسافر کش ها در سطح شهر ادم رو بیاد این مسئله میاندازند .
در بیشتر اوقات لود بالای سرور به همین خاطر هست ، و این هم به این دلیل است که شرکت ها بیش از اون resource که در دست دارند ارائه خدمات می کنند و این بعد از گذشت چند ماه خودش رو به صورت لود بالا و به مراتب down شدن سرویس ها نشون میده .
این تفکر که کاربر از این مقدار فضایی مه خریده استفاده نمیکنه غلط ترین تفکر یک مدیر سرور ه. اگر شما به عنوان مدیر سرور تمایل داشتید چنین کاری کنید باید چند نکته را در نظر داشته باشید . اول باید monitoring سرور ۲۴ ساعته باشه روی ۳ سرویس اصلی mysql – apache – mail تا به محض احساس مشکل بتونید دست به کار بشید. دوم بیش از ۷۰ – ۷۵ درصد از چیزی که فکر می کنید سرور میتونه تحمل کنه رو روش حساب نکیند. همیشه reseller ها و سایت هایی که هنوز شروع به کار نکردند رو در نظر بگیرید هیج وقت به مشکل بر نمی خورند.
گاهی اوقات لود بالا به خاطر restart شدن مدام سرویس هاست . بهترین راه برای کاهش فشار روی سرور restart کردن سرویس هاست این باعث میشه که memory cache مربوط به اون سرویس از حافظه پاک بشه و جا برای request های جدید باز بشه . باید بگم که زمان این restart ها بسیار مهمه – بعضی از مدیران برای استفاده هرچه بیشتر در یک بازه ی زمانی بسیار کم سرویس ها رو restart می کنند این باعث میشه در لحظه start شدن سرویس لود سرور بالا بره و این بستگی به حجم request های اون سرویس در اون لحظه داره – اگر حجم خیلی زیاد باشه شاید با چنیدن باز restart هم سرویس start نشه . (البته فقط قرار بود دلیل لود بالا رو توضیح بدیم و وارد مسائل جانبی نشیم .
با این حال بزودی مطالب مفیدی در مورد مدیریت سرور های لینوکس ارادئه میدیم ) – لطفا غلط املائی و تایپی رو به بزرگواری خودتون ببخشید.
یا حق