آموزش تنظیم NFS Server با Block Storage روی Ubuntu 22.04

به اشتراک بگذارید

how-to-set-up-an-nfs-server-using-block-storage

فهرست مطالب

NFS یا Network File System یک پروتکل توزیع‌شده برای اشتراک‌گذاری فایل‌هاست که امکان مانت کردن دایرکتوری‌های راه‌دور روی سرور شما را فراهم می‌کند. این ابزار به شما اجازه می‌دهد فضای ذخیره‌سازی را در مکانی دیگر مدیریت کنید و از چندین کلاینت به آن دسترسی داشته باشید. NFS راهکاری استاندارد و کارآمد برای دسترسی به منابع اشتراکی در شبکه است، به‌ویژه در مواردی که نیاز به دسترسی مداوم به فایل‌ها دارید. Block Storage نیز نوعی ذخیره‌سازی مبتنی بر شبکه است که معمولاً توسط ارائه‌دهندگان هاستینگ ارائه می‌شود و برای اشتراک‌گذاری باید به سرور متصل شود. در این آموزش، نحوه نصب و پیکربندی NFS Server روی Ubuntu 22.04، ایجاد مانت‌های NFS و تنظیم دسترسی کلاینت را توضیح می‌دهیم.

پیش‌نیازهای تنظیم NFS Server

برای شروع، موارد زیر را آماده کنید:

  • دو سرور Ubuntu 22.04 (یکی به‌عنوان host و دیگری به‌عنوان client) با کاربر sudo غیرروت و فایروال فعال. اطمینان حاصل کنید که سرورها برای میزبانی و شبکه بهینه شده‌اند.
  • شبکه خصوصی (در صورت امکان) برای ارتباط امن‌تر بین سرورها.
  • Block Storage متصل به سرور host. مسیر مانت Block Storage را یادداشت کنید (مثلاً /mnt/volume-nyc3-01).
  • آدرس‌های IP سرورهای host و client (ترجیحاً از شبکه خصوصی).

برای عملکرد بهینه، استفاده از سرورهایی با شبکه 10gbit توصیه می‌شود تا سرعت و IOPS بهتری داشته باشید.

گام 1: نصب کامپوننت‌های موردنیاز

برای تنظیم NFS Server، باید بسته‌های لازم را روی سرور host و client نصب کنید.

روی سرور Host

روی سرور host، بسته nfs-kernel-server را نصب کنید تا امکان اشتراک‌گذاری دایرکتوری‌ها فراهم شود. ابتدا بسته‌ها را به‌روزرسانی کنید:

sudo apt update
sudo apt install nfs-kernel-server

روی سرور Client

روی سرور client، بسته nfs-common را نصب کنید که قابلیت‌های NFS را بدون اجزای سرور فراهم می‌کند:

sudo apt update
sudo apt install nfs-common

اکنون هر دو سرور آماده پیکربندی هستند.

گام 2: ایجاد دایرکتوری‌های اشتراکی روی Host

برای اشتراک‌گذاری، یک دایرکتوری روی Block Storage متصل‌شده به host ایجاد می‌کنیم. فرض کنید Block Storage شما در مسیر /mnt/volume-nyc3-01 مانت شده است. دایرکتوری اشتراکی به نام nfs ایجاد کنید:

sudo mkdir -p /mnt/volume-nyc3-01/nfs

چون این دایرکتوری با sudo ایجاد شده، مالک آن root است. برای بررسی:

ls -dl /mnt/volume-nyc3-01/nfs/

خروجی شبیه این خواهد بود:

drwxr-xr-x 2 root root 4096 Sep 27 16:19 /mnt/volume-nyc3-01/nfs/

برای امنیت، NFS عملیات root روی کلاینت را به nobody:nogroup تبدیل می‌کند. بنابراین، مالکیت دایرکتوری را تغییر دهید:

sudo chown nobody:nogroup /mnt/volume-nyc3-01/nfs/

اکنون آماده تنظیم اشتراک این دایرکتوری هستید.

گام 3: پیکربندی NFS Exports روی سرور Host

برای اشتراک‌گذاری دایرکتوری، فایل پیکربندی NFS را ویرایش کنید. فایل /etc/exports را باز کنید:

sudo nano /etc/exports

خط زیر را برای دایرکتوری اشتراکی اضافه کنید، با جایگزینی client_ip با آدرس IP کلاینت:

/mnt/volume-nyc3-01/nfs/    client_ip(rw,sync,no_subtree_check)

گزینه‌های استفاده‌شده:

  • rw: امکان خواندن و نوشتن برای کلاینت.
  • sync: تغییرات را قبل از پاسخ به دیسک می‌نویسد (ایمن‌تر اما کندتر).
  • no_subtree_check: بررسی زیرشاخه را غیرفعال می‌کند تا از مشکلات تغییر نام فایل جلوگیری شود.

فایل را ذخیره کنید و ببندید (در nano: Ctrl+X، Y، Enter).

سرویس NFS را ری‌استارت کنید:

sudo systemctl restart nfs-kernel-server

گام 4: تنظیم فایروال روی سرور Host

برای اطمینان از دسترسی کلاینت به NFS، فایروال را بررسی و تنظیم کنید:

sudo ufw status

خروجی ممکن است شبیه این باشد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

برای اجازه ترافیک NFS از کلاینت، پورت 2049 را باز کنید:

sudo ufw allow from client_ip to any port nfs

وضعیت فایروال را بررسی کنید:

sudo ufw status

خروجی باید شامل پورت 2049 باشد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
2049                       ALLOW       203.0.113.24        
OpenSSH (v6)               ALLOW       Anywhere (v6)

گام 5: ایجاد نقاط مانت و مانت کردن دایرکتوری‌ها روی Client

برای دسترسی به اشتراک NFS، باید دایرکتوری host را روی کلاینت مانت کنید. ابتدا یک دایرکتوری خالی روی کلاینت ایجاد کنید:

sudo mkdir -p /nfs/general

هشدار: اگر دایرکتوری انتخاب‌شده حاوی فایل باشد، پس از مانت کردن مخفی می‌شوند. از خالی بودن دایرکتوری مطمئن شوید.

اشتراک را با آدرس IP سرور host مانت کنید:

sudo mount host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general

برای بهبود IOPS در برخی بارهای کاری، می‌توانید از گزینه nconnect استفاده کنید:

sudo mount -o nconnect=8 host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general

برای بررسی مانت شدن اشتراک:

df -h

خروجی شامل اشتراک مانت‌شده خواهد بود:

Filesystem                   Size  Used Avail Use% Mounted on
tmpfs                        198M  972K  197M   1% /run
/dev/vda1                     50G  3.5G   47G   7% /
tmpfs                        989M     0  989M   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
/dev/vda15                   105M  5.3M  100M   5% /boot/efi
tmpfs                        198M  4.0K  198M   1% /run/user/1000
10.124.0.3:/mnt/volume-nyc3-01/nfs/   25G  5.9G   19G  24% /nfs/general

برای بررسی فضای استفاده‌شده:

du -sh /nfs/general

خروجی ممکن است شبیه این باشد:

4.0K    /nfs/general

گام 6: تست دسترسی به NFS

برای تست دسترسی، یک فایل آزمایشی در اشتراک ایجاد کنید:

sudo touch /nfs/general/test

مالکیت فایل را بررسی کنید:

ls -l /nfs/general/test

خروجی:

-rw-r--r-- 1 nobody nogroup 0 Sep 28 18:05 /nfs/general/test

چون رفتار پیش‌فرض NFS استفاده شده، فایل‌های ایجادشده توسط root کلاینت به nobody:nogroup تعلق دارند.

گام 7: مانت خودکار دایرکتوری‌های NFS در بوت

برای مانت خودکار اشتراک در زمان بوت، فایل /etc/fstab را ویرایش کنید:

sudo nano /etc/fstab

خط زیر را به انتهای فایل اضافه کنید:

host_ip:/mnt/volume-nyc3-01/nfs/    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

فایل را ذخیره کنید و ببندید. این تنظیم باعث مانت خودکار اشتراک در بوت می‌شود.

گام 8: حذف مانت NFS

اگر دیگر نیازی به اشتراک ندارید، از دایرکتوری خارج شوید و آن را unmount کنید:

cd ~
sudo umount /nfs/general

برای بررسی حذف اشتراک:

df -h

خروجی دیگر شامل اشتراک NFS نخواهد بود:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  972K  197M   1% /run
/dev/vda1        50G  3.5G   47G   7% /
tmpfs           989M     0  989M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda15      105M  5.3M  100M   5% /boot/efi
tmpfs           198M  4.0K  198M   1% /run/user/1000

برای جلوگیری از مانت خودکار، خط مربوطه در /etc/fstab را حذف کنید یا با # کامنت کنید.

نتیجه‌گیری

در این آموزش، یک NFS Server با استفاده از Block Storage روی Ubuntu 22.04 تنظیم کردید، دایرکتوری‌های اشتراکی ایجاد کردید و آن‌ها را روی کلاینت مانت کردید. همچنین فایروال را برای دسترسی ایمن پیکربندی کردید. توجه داشته باشید که NFS رمزنگاری ندارد، بنابراین برای امنیت بیشتر، از شبکه خصوصی یا تونل‌های رمزنگاری‌شده مانند VPN استفاده کنید. برای اطلاعات بیشتر، مستندات رسمی NFS یا منابع آموزشی ذخیره‌سازی را کاوش کنید.