سرور مجازی برای دیتابیس
راهنمای انتخاب سرور مجازی برای دیتابیس. چرا حافظه تعیینکننده است، چه زمانی دیتابیس را جدا کنید و چطور آن را از اینترنت پنهان نگه دارید.
قیمتها، شروع از تهران
هزینه بهصورت روزانه از کیف پول شما کسر میشود. هر زمان سرور را حذف کنید، کسر هزینه متوقف میشود. ارقام زیر مربوط به ارزانترین لوکیشن است؛ قیمت در سایر لوکیشنها متفاوت است.
| پردازنده | حافظه | دیسک NVMe | هزینه روزانه | تقریباً ماهانه | |
|---|---|---|---|---|---|
| ۱ هسته | ۱ گیگابایت | ۳۰ گیگابایت | ۲۸,۰۰۰ تومان | ۸۴۰,۰۰۰ تومان | ساخت سرور |
| ۲ هسته | ۲ گیگابایت | ۵۰ گیگابایت | ۴۴,۰۰۰ تومان | ۱,۳۲۰,۰۰۰ تومان | ساخت سرور |
| ۲ هسته | ۴ گیگابایت | ۸۰ گیگابایت | ۶۲,۰۰۰ تومان | ۱,۸۶۰,۰۰۰ تومان | ساخت سرور |
| ۴ هسته | ۸ گیگابایت | ۱۶۰ گیگابایت | ۱۱۴,۰۰۰ تومان | ۳,۴۲۰,۰۰۰ تومان | ساخت سرور |
قیمتها بدون احتساب مالیات بر ارزش افزوده است و در صورتحساب نهایی اضافه میشود. رقم ماهانه تقریبی و بر پایه ۳۰ روز محاسبه شده است. منابع دلخواه خود را میتوانید در صفحه ساخت سرور دقیقتر تنظیم کنید.
دیتابیس با بقیه سرویسها یک تفاوت مهم دارد: حافظه برای آن از پردازنده مهمتر است. دلیلش ساده است — دیتابیس دادههای پرکاربرد را در حافظه نگه میدارد و اگر آنجا جا شوند، پاسخها از رم میآیند. اگر جا نشوند، هر درخواست باید به دیسک برود و سرعت چند مرتبه افت میکند.
پس سؤال درست موقع خرید این است: «چقدر از دادههای من مرتب خوانده میشود؟» نه «چند هسته پردازنده بگیرم؟»
انتخاب منابع
| اندازه داده فعال | پردازنده | حافظه | دیسک |
|---|---|---|---|
| کمتر از ۱ گیگابایت | ۱ هسته | ۲ گیگابایت | ۳۰ گیگابایت |
| ۱ تا ۴ گیگابایت | ۲ هسته | ۸ گیگابایت | ۸۰ گیگابایت |
| ۴ تا ۱۰ گیگابایت | ۴ هسته | ۱۶ گیگابایت | ۱۵۰ گیگابایت |
| بیش از ۱۰ گیگابایت | ۴ هسته به بالا | ۳۲ گیگابایت به بالا | ۲۰۰ گیگابایت به بالا |
منظور از «داده فعال» کل حجم دیتابیس نیست، بلکه بخشی است که مرتب خوانده میشود. یک دیتابیس ۵۰ گیگابایتی که فقط رکوردهای سه ماه اخیرش پرسوجو میشوند، به ۵۰ گیگابایت رم نیاز ندارد.
دیسک را دو تا سه برابر حجم دیتابیس بگیرید. دیتابیس علاوه بر داده، فایلهای لاگ تراکنش، ایندکسها و فضای موقت عملیات نگهداری هم میخواهد. دیسک پر روی سرور دیتابیس یکی از بدترین حالتهایی است که ممکن است پیش بیاید.
یک سرور یا دو سرور؟
سؤال رایجی است و پاسخ آن به مقیاس شما بستگی دارد:
| دیتابیس روی همان سرور | سرور دیتابیس جدا | |
|---|---|---|
| هزینه | کمتر | بیشتر |
| پیچیدگی | کمتر | شبکه و امنیت اضافه |
| ارتقای مستقل منابع | ندارد | دارد |
| اشتراک بین چند برنامه | سخت | ساده |
| تأخیر ارتباط | تقریباً صفر | تأخیر شبکه اضافه |
برای بیشتر پروژهها، دیتابیس روی همان سرور برنامه انتخاب درست و سادهتری است. جداسازی وقتی ارزش پیدا میکند که چند برنامه از یک دیتابیس استفاده کنند یا بخواهید منابع دیتابیس را مستقل از برنامه ارتقا دهید.
اگر جدا کردید، حتماً هر دو سرور را در یک لوکیشن بگیرید. دیتابیسی که در قارهای دیگر از برنامهتان است، تأخیر شبکه را به هر کوئری اضافه میکند.
امنیت: تنها قاعدهای که نباید بشکنید
دیتابیس شما نباید از اینترنت در دسترس باشد. نقطه.
# پستگرس: در postgresql.conf
listen_addresses = 'localhost'
# بررسی اینکه روی چه رابطی گوش میدهد
ss -tlnp | grep 5432
اگر خروجی 0.0.0.0:5432 بود، دیتابیس شما روی اینترنت باز است. رباتهای اسکن
پورتهای دیتابیس را مرتب جستجو میکنند و رمزهای پیشفرض را امتحان میکنند؛
این یکی از رایجترین راههای نشت داده است.
اگر با داکر کار میکنید، دقت کنید که
-p 5432:5432سرویس را روی همه رابطهای شبکه باز میکند و قوانین داکر معمولاً بر تنظیمات UFW اولویت دارند. شکل درست-p 127.0.0.1:5432:5432است. توضیح بیشتر در صفحه سرور برای داکر.
اگر واقعاً باید از سرور دیگری وصل شوید، بهجای باز کردن پورت روی اینترنت، از تونل SSH یا شبکه خصوصی استفاده کنید.
پیش از ارتقای سرور، این را بررسی کنید
وقتی دیتابیس کند میشود، اولین واکنش معمولاً خرید منابع بیشتر است. در بیشتر موارد مشکل جای دیگری است:
۱. نبود ایندکس مناسب — رایجترین دلیل. کوئریای که کل جدول را میخواند روی هیچ سروری سریع نمیشود.
۲. کوئریهای بد — یک JOIN نادرست میتواند میلیونها ردیف تولید کند.
۳. تنظیمات پیشفرض — پستگرس با تنظیماتی نصب میشود که برای کوچکترین ماشینها امن باشد، نه بهینه برای سرور شما.
پیش از ارتقا، کوئریهای کند را پیدا کنید و پلن اجراییشان را ببینید. اغلب یک ایندکس، اثری بیشتر از دو برابر کردن حافظه دارد.
تعداد اتصالهای همزمان
مسئلهای که معمولاً هنگام رشد ترافیک ظاهر میشود و با ارتقای سرور حل نمیشود.
هر اتصال باز به دیتابیس مقداری حافظه میگیرد. اگر برنامه شما برای هر درخواست اتصال تازهای باز کند، در ترافیک بالا تعداد اتصالها به سقف میرسد و درخواستهای بعدی با خطا برمیگردند — در حالی که پردازنده و حافظه سرور هنوز آزادند.
راهحل بالا بردن سقف اتصال نیست؛ استخر اتصال است. یک لایه واسط تعداد محدودی اتصال باز نگه میدارد و آنها را بین درخواستها به اشتراک میگذارد. بیشتر فریمورکها این قابلیت را دارند و برای پستگرس ابزارهای اختصاصی هم وجود دارد.
نشانهاش روشن است: خطای «تعداد اتصال بیش از حد» در حالی که منابع سرور آزاد است. اگر این را دیدید، پیش از ارتقای سرور سراغ استخر اتصال بروید.
بکآپ
برای دیتابیس، بکآپ اختیاری نیست. دو نکته:
- اسنپشات جایگزین بکآپ دیتابیس نیست. اسنپشات از دیسکی که در حال نوشتن است ممکن است وضعیت ناسازگاری بگیرد. برای دیتابیس، از ابزار خروجی خود دیتابیس استفاده کنید.
- بکآپ آزمایشنشده بکآپ نیست. هر چند وقت یکبار بازیابی را روی یک دیتابیس آزمایشی امتحان کنید.
روش خودکار و رمزنگاریشده نگهداری بکآپ خارج از سرور در راهنمای بکآپ خودکار با Restic آمده است.
راهاندازی
آموزش نصب PostgreSQL روی اوبونتو مسیر نصب و تنظیمات اولیه امن را پوشش میدهد.
پیش از هر چیز، سرور را امن کنید — راهنمای امنسازی سرور لینوکس.
نگهداری
| کار | دستور | چه زمانی |
|---|---|---|
| بکآپ دیتابیس | pg_dump یا معادل آن |
روزانه |
| آزمایش بازیابی بکآپ | بازیابی روی دیتابیس آزمایشی | فصلی |
| بررسی فضای دیسک | df -h |
هفتگی |
| بررسی کوئریهای کند | لاگ کوئری کند | ماهانه |
| بهروزرسانی سیستم | apt update && apt upgrade |
هفتگی |
جمعبندی
سرور مجازی برای دیتابیس را بر اساس حافظه انتخاب کنید، نه پردازنده؛ داده فعال باید در رم جا شود. دیسک را دو تا سه برابر حجم دیتابیس بگیرید و حتماً NVMe.
مهمترین کار امنیتی این است که دیتابیس فقط روی لوکالهاست گوش بدهد. و پیش از خرید منابع بیشتر، ایندکسها و کوئریهای کند را بررسی کنید — اغلب مشکل آنجاست.
سوالهای پرتکرار
برای دیتابیس چقدر رم لازم است؟ +
قاعده کاربردی این است که بخش پرکاربرد دادهها باید در حافظه جا شود. اگر دیتابیس شما ۲ گیگابایت است و بیشتر آن مرتب خوانده میشود، ۴ گیگابایت رم بگیرید تا هم دیتابیس و هم سیستمعامل جا شوند.
دیتابیس را روی همان سرور برنامه بگذارم یا جدا؟ +
برای پروژههای کوچک و متوسط، همان سرور کافی و سادهتر است. جداسازی وقتی ارزش دارد که بخواهید منابع را مستقل ارتقا دهید یا چند برنامه از یک دیتابیس استفاده کنند.
چرا دیتابیس من کند است؟ +
در بیشتر موارد مشکل نبود ایندکس مناسب است، نه کمبود منابع. پیش از ارتقای سرور، کوئریهای کند را پیدا کنید و پلن اجرایی آنها را بررسی کنید.
آیا باید پورت دیتابیس را باز کنم؟ +
خیر، مگر آنکه واقعاً از سرور دیگری به آن وصل شوید. دیتابیس باید فقط روی ۱۲۷.۰.۰.۱ گوش بدهد. دیتابیسی که پورتش روی اینترنت باز باشد ظرف چند ساعت پیدا و امتحان میشود.
NVMe واقعاً تفاوتی ایجاد میکند؟ +
بله، و بیشتر از آنچه در معیارهای ساده دیده میشود. دیتابیس عملیات تصادفی زیادی روی دیسک انجام میدهد و دقیقاً همینجاست که NVMe نسبت به دیسکهای قدیمیتر برتری چشمگیری دارد.
چند وقت یکبار بکآپ بگیرم؟ +
بستگی دارد چقدر داده از دست دادن برایتان قابل تحمل است. برای بیشتر کسبوکارها بکآپ روزانه حداقل است. مهمتر از دفعات، آزمایش دورهای بازیابی است.
آموزشهای مرتبط
آموزش نصب PostgreSQL روی اوبونتو
نصب PostgreSQL روی اوبونتو از مخزن رسمی PGDG؛ ساخت کاربر و دیتابیس، دسترسی امن از راه دور با pg_hba.conf، تنظیم فایروال، تیونینگ پایه و بکآپ.
ادامه مطلببکآپ خودکار سرور با Restic روی فضای ذخیرهسازی ابری
راهاندازی بکآپ خودکار سرور با Restic؛ رمزنگاری سمت سرور، ارسال به فضای S3، زمانبندی با systemd، سیاست نگهداری نسخهها و تمرین بازیابی.
ادامه مطلبامنسازی سرور لینوکس با کلید SSH، فایروال UFW و Fail2ban
راهنمای عملی امنسازی سرور لینوکس؛ ورود با کلید SSH، بستن ورود روت، فایروال UFW، مسدودسازی حملههای brute-force با Fail2ban و بهروزرسانی خودکار امنیتی.
ادامه مطلبکاربردها دیگر
آخرین بهروزرسانی: ۰۹ مرداد ۱۴۰۵