Men-deploy proxy cache NFS ruang kernel di Compute Engine

Last reviewed 2023-10-03 UTC

Tutorial ini menunjukkan cara men-deploy, mengonfigurasi, dan menguji proxy cache Network File System (NFS) berbasis Linux di Compute Engine. Arsitektur yang dijelaskan dalam tutorial ini dirancang untuk skenario saat data hanya baca disinkronkan pada tingkat byte dari server file asal NFS (seperti server file NFS lokal) ke Google Cloud atau disinkronkan sesuai permintaan dari satu sumber utama tepercaya ke beberapa replika hanya baca.

Tutorial ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:

  • Membangun versi kustom sistem operasi Linux.
  • Menginstal dan mengonfigurasi software dengan skrip startup di Compute Engine.
  • Mengonfigurasi dan mengelola sistem file NFS.

Arsitektur ini tidak mendukung penguncian file. Arsitektur ini paling cocok untuk pipeline yang menggunakan nama file unik untuk melacak versi file.

Arsitektur

Arsitektur dalam tutorial ini memiliki Daemon NFS ruang kernel (KNFSD) yang bertindak sebagai cache dan proxy NFS. Penyiapan ini memberi akses node komputasi berbasis cloud ke penyimpanan lokal yang cepat dengan melakukan migrasi data saat klien NFS memintanya. Node klien NFS menulis data secara langsung kembali ke server file asal NFS menggunakan cache write-through. Diagram berikut menampilkan arsitektur ini:

Arsitektur menggunakan proxy KNFSD di Google Cloud.

Dalam tutorial ini, Anda akan men-deploy dan menguji sistem proxy KNFSD. Anda dapat membuat dan mengonfigurasi server NFS tunggal, proxy KNFSD tunggal, dan klien NFS tunggal, semuanya di Google Cloud.

Sistem proxy KNFSD bekerja dengan memasang volume dari server NFS dan mengekspor ulang volume tersebut. Klien NFS memasang volume yang diekspor ulang dari proxy. Saat klien NFS meminta data, proxy KNFSD akan memeriksa berbagai tabel cache untuk menentukan apakah data tersebut berada secara lokal. Jika data sudah ada di cache, proxy KNFSD akan segera menyajikan data. Jika data yang diminta tidak ada dalam cache, proxy akan memigrasikan data, memperbarui tabel cache-nya, lalu menyajikan data. Proxy KNFSD menyimpan data file dan metadata pada tingkat byte, sehingga hanya byte yang digunakan yang akan ditransfer saat diminta.

Proxy KNFSD memiliki dua lapisan cache: L1 dan L2. L1 adalah cache blok standar dari sistem operasi yang berada di RAM. Jika volume data melampaui RAM yang tersedia, cache L2 diterapkan menggunakan FS-Cache, yaitu modul kernel Linux yang menyimpan data dalam cache secara lokal di disk. Dalam deployment ini, Anda penggunaan SSD lokal sebagai cache L2, meskipun Anda dapat mengonfigurasi sistem dengan beberapa cara.

Untuk menerapkan arsitektur dalam tutorial ini, Anda dapat menggunakan alat NFS standar, yang kompatibel dengan NFS versi 2, 3, dan 4.

Deployment KNFSD dalam arsitektur hybrid

Dalam arsitektur hybrid, klien NFS yang berjalan di Google Cloud meminta data saat diperlukan. Permintaan ini dibuat ke proxy KNFSD yang menyajikan data dari cache lokal jika data tersedia. Jika data tidak ada dalam cache, proxy akan mengelola komunikasi kembali ke server lokal. Sistem dapat memasang satu atau beberapa server asal NFS. Proxy mengelola semua komunikasi dan migrasi data yang diperlukan melalui VPN atau Dedicated Interconnect kembali ke server asal NFS lokal. Diagram berikut menunjukkan deployment KNFSD ini dalam arsitektur hybrid:

Arsitektur hybrid menggunakan deployment KNFSD.

Konektivitas hybrid berada di luar cakupan tutorial ini. Untuk mengetahui informasi tentang topik lanjutan seperti pertimbangan untuk men-deploy ke arsitektur hybrid, penskalaan untuk menghasilkan performa tinggi, dan menggunakan metrik dan dasbor untuk pemecahan masalah dan penyesuaian, lihat Topik alur kerja lanjutan.

Tujuan

  • Men-deploy dan menguji sistem proxy KNFSD.
  • Membuat dan mengonfigurasi komponen berikut di Google Cloud:
    • Disk image kustom
    • Proxy KNFSD
    • Server NFS
    • Klien NFS
  • Memasang proxy NFS pada klien NFS.
  • Menyalin file dari server NFS melalui proxy NFS ke klien NFS.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk penggunaan Anda, pertimbangkan Biaya Traffic Keluar Jaringan untuk data yang ditulis dari Google Cloud kembali ke penyimpanan lokal, dan biaya untuk konektivitas hybrid.

Sebelum memulai

Untuk panduan referensi ini, Anda memerlukan project Google Cloud. Anda dapat membuat project baru atau memilih project yang sudah dibuat:

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Aktifkan API Compute Engine.

    Mengaktifkan API

  4. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  5. Autentikasi login Anda di terminal Cloud Shell:

    gcloud auth application-default login
    

    Command line akan memandu Anda menyelesaikan langkah-langkah otorisasi.

  6. Tetapkan variabel lingkungan

    export GOOGLE_CLOUD_PROJECT=PROJECT_NAME
    gcloud config set project $GOOGLE_CLOUD_PROJECT
    

    Ganti PROJECT_NAME dengan nama project yang Anda buat atau yang Anda pilih sebelumnya.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Mendownload file konfigurasi tutorial

  1. Di Cloud Shell, buat clone repositori GitHub:

    cd ~/
    git clone https://github.com/GoogleCloudPlatform/knfsd-cache-utils.git
    
  2. Setel tag Git ke versi baik yang diketahui (dalam hal ini v0.9.0):

    cd ~/knfsd-cache-utils
    git checkout tags/v0.9.0
    
  3. Buka direktori image di repositori kode Anda:

     cd ~/knfsd-cache-utils/image
    

Mengonfigurasi jaringan Anda

Untuk kemudahan deployment, tutorial ini menggunakan VPC jaringan. Agar Anda dapat menggunakan SSH untuk terhubung ke berbagai resource untuk konfigurasi dan pemantauan, tutorial ini juga men-deploy alamat IP eksternal.

Praktik terbaik dan arsitektur referensi untuk desain VPC berada di luar cakupan tutorial ini. Namun, saat Anda mengintegrasikan resource ini ke lingkungan hybrid, sebaiknya ikuti praktik terbaik yang mencakup hal berikut:

Untuk mengonfigurasi jaringan Anda, lakukan hal berikut:

  • Di Cloud Shell, tetapkan variabel berikut:

    export BUILD_MACHINE_NETWORK=default
    export BUILD_MACHINE_SUBNET=default
    

Membuat mesin build proxy NFS

Di bagian ini, Anda akan membuat lalu login ke VM yang bertindak sebagai mesin build proxy NFS Anda. Kemudian, jalankan skrip penginstalan yang disediakan untuk mengupdate versi Kernel dan menginstal semua software yang diperlukan untuk sistem proxy KNFSD. Skrip penginstalan software dapat memerlukan waktu beberapa menit untuk dijalankan, tetapi Anda hanya perlu menjalankannya sekali.

  1. Di Cloud Shell, tetapkan variabel berikut:

    export BUILD_MACHINE_NAME=knfsd-build-machine
    export BUILD_MACHINE_ZONE=us-central1-a
    export IMAGE_FAMILY=knfsd-proxy
    export IMAGE_NAME=knfsd-proxy-image
    
  2. Luncurkan instance VM:

    gcloud compute instances create $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-standard-16 \
      --project=$GOOGLE_CLOUD_PROJECT \
      --image=ubuntu-2004-focal-v20220615 \
      --image-project=ubuntu-os-cloud \
      --network=$BUILD_MACHINE_NETWORK \
      --subnet=$BUILD_MACHINE_SUBNET \
      --boot-disk-size=20GB \
      --boot-disk-type=pd-ssd \
      --metadata=serial-port-enable=TRUE
    

    Anda mungkin menerima pesan peringatan yang menunjukkan perbedaan ukuran disk. Anda dapat mengabaikan pesan ini.

  3. Buat file tar software yang diperlukan untuk diinstal, lalu salin file tersebut ke mesin build:

    tar -czf resources.tgz -C resources .
    gcloud compute scp resources.tgz build@$BUILD_MACHINE_NAME: \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  4. Setelah VM dimulai, buka tunnel SSH ke VM tersebut:

    gcloud compute ssh build@$BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  5. Setelah tunnel SSH dibuat dan command line menargetkan instance knfsd-build-machine, jalankan skrip penginstalan:

    tar -zxf resources.tgz
    sudo bash scripts/1_build_image.sh
    

    Skrip ini meng-clone repositori Kode Kernel Ubuntu, mengupdate versi kernel, dan menginstal software tambahan. Karena ada clone repositori yang terlibat, skrip dapat memerlukan waktu lama untuk diselesaikan.

  6. Setelah skrip penginstalan selesai dan menampilkan perintah SUCCESS, mulai ulang mesin build:

    sudo reboot
    

    Saat mesin build Anda dimulai ulang, pesan berikut akan ditampilkan:

    WARNING: Failed to send all data from [stdin]
    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255]
    

    Error ini terjadi saat Cloud Shell kembali dari mesin build proxy NFS ke mesin host Anda. Anda dapat mengabaikan error ini.

  7. Setelah VM dimulai ulang, buka kembali tunnel SSH ke VM tersebut:

    gcloud compute ssh $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  8. Setelah tunnel SSH dibuat, dan command line menargetkan instance nfs-proxy-build, beralihlah ke Root dan periksa versi OS Anda:

    uname -r
    

    Outputnya mirip dengan berikut ini, yang menunjukkan bahwa update software berhasil:

    linux <$BUILD_MACHINE_NAME> 5.13.*-gcp ...
    

    Jika output tidak mirip dengan contoh sebelumnya, selesaikan hingga membuat mesin build proxy NFS untuk mencoba lagi perintah.

  9. Bersihkan disk lokal dan matikan mesin build:

    sudo bash /home/build/scripts/9_finalize.sh
    

    Peringatan berikut akan ditampilkan:

    userdel: user build is currently used by process 1431
    userdel: build mail spool (/var/mail/build) not found
    

    Peringatan ini terjadi saat Cloud Shell kembali dari mesin build proxy NFS ke mesin host Anda. Anda dapat mengabaikan error ini.

Membuat disk image kustom

Di bagian ini, Anda akan membuat image kustom dari instance. Image kustom disimpan di bucket Cloud Storage multi-regional yang berlokasi di Amerika Serikat.

  1. Di Cloud Shell, tetapkan variabel berikut:

    export IMAGE_NAME=knfsd-image
    export IMAGE_DESCRIPTION="first knfsd image from tutorial"
    export IMAGE_LOCATION=us
    
  2. Buat disk image:

    gcloud compute images create $IMAGE_NAME \
      --project=$GOOGLE_CLOUD_PROJECT \
      --description="$IMAGE_DESCRIPTION" \
      --source-disk=$BUILD_MACHINE_NAME \
      --source-disk-zone=$BUILD_MACHINE_ZONE \
      --storage-location=$IMAGE_LOCATION
    
  3. Setelah disk image dibuat, hapus instance tersebut:

    gcloud compute instances delete $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE
    
  4. Jika diminta untuk melanjutkan, tekan Y.

    Saat menghapus instance $BUILD_MACHINE_NAME, Anda akan melihat perintah yang menunjukkan bahwa disk yang terpasang di VM akan dihapus. Karena Anda baru saja menyimpan image kustom, Anda tidak lagi memerlukan disk sementara ini dan disk tersebut dapat dihapus dengan aman.

Membuat server asal NFS

Seperti yang disebutkan sebelumnya, arsitektur ini dirancang untuk menghubungkan resource berbasis cloud ke server file lokal. Untuk menyederhanakan proses dalam tutorial ini, buat resource cadangan yang berjalan di project Google Cloud Anda untuk menyimulasikan koneksi ini. Anda menamai resource cadangan nfs-server. Penginstalan dan penyiapan software dimuat dalam skrip startup. Untuk informasi selengkapnya, periksa skrip, ~/knfsd-cache-utils/tutorial/nfs-server/1_build_nfs-server.sh.

  1. Di Cloud Shell, buka direktori skrip nfs-server yang telah didownload:

    cd ~/knfsd-cache-utils/tutorial
    
  2. Buat server NFS pengganti:

    gcloud compute \
      --project=$GOOGLE_CLOUD_PROJECT instances create nfs-server \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-highcpu-2 \
      --maintenance-policy=MIGRATE \
      --image-family=ubuntu-2004-lts \
      --image-project=ubuntu-os-cloud \
      --boot-disk-size=100GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=nfs-server \
      --metadata-from-file startup-script=nfs-server-startup.sh
    

    Proses skrip ini dapat memerlukan waktu beberapa menit. Anda mungkin melihat pesan peringatan yang menunjukkan bahwa ukuran disk Anda kurang dari 200 GB. Anda dapat mengabaikan peringatan ini.

Membuat proxy NFS

Di bagian ini, Anda akan membuat proxy NFS. Saat dimulai, proxy akan mengonfigurasi penyimpanan lokal, menyiapkan opsi pemasangan untuk server NFS, dan mengekspor hasil yang di-cache. Skrip startup yang disediakan mengatur sebagian besar alur kerja ini.

  1. Di Cloud Shell, tetapkan variabel berikut:

    export PROXY_NAME=nfs-proxy
    
  2. Membuat VM nfs-proxy:

    gcloud compute instances create $PROXY_NAME \
      --machine-type=n1-highmem-16 \
      --project=$GOOGLE_CLOUD_PROJECT \
      --maintenance-policy=MIGRATE \
      --zone=$BUILD_MACHINE_ZONE \
      --min-cpu-platform="Intel Skylake" \
      --image=$IMAGE_NAME \
      --image-project=$GOOGLE_CLOUD_PROJECT \
      --boot-disk-size=20GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=$PROXY_NAME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --metadata-from-file startup-script=proxy-startup.sh
    

    Anda mungkin melihat pesan peringatan bahwa ukuran disk Anda kurang dari 200 GB. Anda dapat mengabaikan peringatan ini.

    Skrip startup mengonfigurasi perintah pemasangan NFS dan memungkinkan Anda menyesuaikan sistem. Setelan untuk versi NFS, sinkronisasi atau asinkron, nocto, dan actimeo adalah beberapa variabel yang mungkin ingin Anda optimalkan melalui skrip startup. Untuk mengetahui informasi selengkapnya tentang setelan ini, lihat mengoptimalkan sistem file NFS.

    Perintah pada langkah ini menentukan flag --metadata-from-file yang memasukkan skrip startup ke dalam template gambar Anda. Dalam tutorial ini, Anda akan menggunakan skrip sederhana proxy-startup.sh. Skrip ini menyertakan beberapa variabel standar dan tidak menyertakan banyak opsi yang mungkin Anda gunakan jika mengintegrasikannya ke pipeline. Untuk kasus penggunaan lanjutan lainnya, lihat repositori GitHub knfsd-cache-utils.

Membuat klien NFS

Pada langkah ini, Anda akan membuat satu klien NFS (bernama nfs-client) untuk berdiri yang mungkin lebih besar Grup Instance Terkelola (MIG) dan performa konstan dalam skala besar.

  • Di Cloud Shell, buat klien NFS:

    gcloud compute \
      --project=$GOOGLE_CLOUD_PROJECT instances create nfs-client \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-highcpu-8 \
      --network-tier=PREMIUM \
      --maintenance-policy=MIGRATE \
      --image-family=ubuntu-2004-lts \
      --image-project=ubuntu-os-cloud \
      --boot-disk-size=10GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=nfs-client
    

    Anda mungkin melihat pesan peringatan bahwa ukuran disk Anda kurang dari 200 GB. Anda dapat mengabaikan peringatan ini.

Memasang proxy NFS pada klien NFS

Pada langkah ini, buka sesi SSH terpisah pada klien NFS, lalu instal proxy NFS. Anda akan menggunakan shell yang sama ini untuk menguji sistem di bagian berikutnya.

  1. Di Konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Untuk terhubung ke nfs-client, di kolom Connect, klik SSH.

  3. Di jendela SSH nfs-client, instal alat NFS yang diperlukan pada nfs-client:

    sudo apt-get install nfs-common -y
    
  4. Buat direktori pemasangan dan instal proxy NFS:

    sudo mkdir /data
    sudo mount -t nfs -o vers=3 nfs-proxy:/data /data
    

Menguji sistem

Semua resource Anda sudah dibuat. Di bagian ini, Anda akan menjalankan pengujian dengan menyalin file dari server NFS melalui proxy NFS ke klien NFS. Saat pertama kali menjalankan pengujian, data berasal dari server asal. Proses ini dapat memerlukan waktu lebih dari satu menit.

Saat menjalankan pengujian untuk kedua kali, datanya disajikan dari cache yang disimpan di SSD Lokal proxy NFS. Transfer ini tidak memerlukan banyak waktu untuk menyalin data, hal ini memvalidasi bahwa caching mempercepat transfer data.

  1. Pada jendela SSH nfs-client yang Anda buka di bagian sebelumnya, salin file test dan lihat output terkait:

    time dd if=/data/test.data of=/dev/null iflag=direct bs=1M status=progress
    

    Output-nya akan mirip dengan berikut ini, yang berisi baris yang menunjukkan ukuran file, waktu untuk transfer, dan kecepatan transfer:

    10737418240 bytes (11 GB, 10 GiB) copied, 88.5224 s, 121 MB/s
    real    1m28.533s
    

    Dalam transfer ini, file disajikan dari persistent disk server NFS, sehingga terbatas oleh kecepatan disk server NFS.

  2. Jalankan perintah yang sama untuk kedua kalinya:

    time dd if=/data/test.data of=/dev/null iflag=direct bs=1M status=progress
    

    Output-nya akan mirip dengan berikut ini, yang berisi baris yang menunjukkan ukuran file, waktu untuk transfer, dan kecepatan transfer:

    10737418240 bytes (11 GB, 10 GiB) copied, 9.41952 s, 948 MB/s
    real    0m9.423s
    

    Dalam transfer ini, file disajikan dari cache di proxy NFS, sehingga proses transfer selesai lebih cepat.

Anda telah menyelesaikan deployment dan pengujian proxy cache KNFSD.

Topik alur kerja lanjutan

Bagian ini berisi informasi tentang cara men-deploy ke arsitektur hybrid, penskalaan performa tinggi, dan penggunaan metrik serta dasbor untuk pemecahan masalah dan penyesuaian.

Karakteristik performa dan ukuran resource

Seperti yang disebutkan sebelumnya, tutorial ini menggunakan proxy KNFSD tunggal. Oleh karena itu, menskalakan sistem melibatkan modifikasi resource proxy individual guna mengoptimalkan CPU, RAM, jaringan, kapasitas penyimpanan, atau performa. Dalam tutorial ini, Anda telah men-deploy KNFSD pada VM Compute Engine tunggal dengan opsi berikut:

  • 16 vCPU, RAM 104 GB (n1-highmem-16).
    • Dengan 16 vCPU dan arsitektur Sandy Bridge atau arsitektur lain yang lebih mutakhir, Anda dapat mengaktifkan kecepatan jaringan maksimum 32 Gbps.
  • Persistent Disk sebesar 10 GB sebagai boot disk.
  • 4 disk SSD lokal Konfigurasi ini menyediakan sistem file 1,5 TB berkecepatan tinggi.

Meskipun di luar cakupan tutorial ini, Anda dapat menyesuaikan skalanya arsitektur dengan membuat beberapa {i>proxy<i} KNFSD di MIG dan dengan menggunakan Load balancer TCP untuk mengelola koneksi antara klien NFS dan {i>proxy<i} NFS. Untuk selengkapnya informasi tersebut, lihat Repositori GitHub knfsd-cache-utils yang berisi skrip Terraform, contoh kode untuk deployment, dan berbagai FAQ yang akan membahas penskalaan beban kerja.

Pertimbangan untuk deployment hybrid

Dalam banyak deployment, bandwidth koneksi dari lokal ke cloud merupakan faktor utama yang perlu dipertimbangkan saat mengonfigurasi sistem. Konektivitas hybrid berada di luar cakupan tutorial ini. Untuk ringkasan opsi yang tersedia, lihat dokumentasi konektivitas hybrid. Untuk panduan tentang praktik terbaik dan pola desain, lihat seri Bangun arsitektur hybrid dan multicloud menggunakan Google Cloud.

Menjelajahi metrik

Dasbor dapat berguna dalam memberikan masukan terkait metrik untuk digunakan dalam penyesuaian performa dan pemecahan masalah secara keseluruhan. Meskipun mempelajari metrik berada di luar cakupan tutorial ini, tetapi akan tersedia dasbor metrik saat Anda men-deploy sistem multi-node yang ditentukan dalam knfsd-cache-utils repositori GitHub.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah berikutnya