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:
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:
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.
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:
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Compute Engine.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Autentikasi login Anda di terminal Cloud Shell:
gcloud auth application-default login
Command line akan memandu Anda menyelesaikan langkah-langkah otorisasi.
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
Di Cloud Shell, buat clone repositori GitHub:
cd ~/ git clone https://github.com/GoogleCloudPlatform/knfsd-cache-utils.git
Setel tag Git ke versi baik yang diketahui (dalam hal ini
v0.9.0
):cd ~/knfsd-cache-utils git checkout tags/v0.9.0
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:
- Membuat resource Compute Engine tanpa alamat IP eksternal.
- Membangun konektivitas internet untuk VM pribadi untuk mengkonfigurasi perangkat lunak.
- Menggunakan Identity-Aware Proxy (IAP) untuk penerusan TCP menghubungkan ke sumber daya.
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.
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
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.
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
Setelah VM dimulai, buka tunnel SSH ke VM tersebut:
gcloud compute ssh build@$BUILD_MACHINE_NAME \ --zone=$BUILD_MACHINE_ZONE \ --project=$GOOGLE_CLOUD_PROJECT
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.
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.
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
Setelah tunnel SSH dibuat, dan command line menargetkan instance
nfs-proxy-build
, beralihlah keRoot
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.
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.
Di Cloud Shell, tetapkan variabel berikut:
export IMAGE_NAME=knfsd-image export IMAGE_DESCRIPTION="first knfsd image from tutorial" export IMAGE_LOCATION=us
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
Setelah disk image dibuat, hapus instance tersebut:
gcloud compute instances delete $BUILD_MACHINE_NAME \ --zone=$BUILD_MACHINE_ZONE
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
.
Di Cloud Shell, buka direktori skrip
nfs-server
yang telah didownload:cd ~/knfsd-cache-utils/tutorial
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.
Di Cloud Shell, tetapkan variabel berikut:
export PROXY_NAME=nfs-proxy
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
, danactimeo
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 sederhanaproxy-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 GitHubknfsd-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.
Di Konsol Google Cloud, buka halaman Instance VM.
Untuk terhubung ke
nfs-client
, di kolom Connect, klik SSH.Di jendela SSH
nfs-client
, instal alat NFS yang diperlukan padanfs-client
:sudo apt-get install nfs-common -y
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.
Pada jendela SSH
nfs-client
yang Anda buka di bagian sebelumnya, salin filetest
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.
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.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Pelajari lebih lanjut tentang praktik terbaik pengelolaan image.
- Pelajari lebih lanjut tentang pekerjaan yang telah dilakukan dengan komunitas developer Linux terkait ekspor ulang NFS.
- Pelajari lebih lanjut tentang pengelolaan dan konfigurasi keseluruhan NFS di Ubuntu.
- Pelajari lebih lanjut cara menskalakan deployment KNFSD menggunakan MIG dan Load Balancer
di
repositori GitHub
knfsd-cache-utils
. - Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.