Tek bir ESSD, ESSD AutoPL veya başka bir NVMe özellikli cloud diski aynı alandaki 16 adede kadar ECS örneğiyle aynı anda paylaşmak için çoklu iliştirmeyi kullanın; ya da bölge yedekli depolama ESSD'sini aynı bölgedeki düğümler arasında paylaşın. NVMe Kalıcı Rezervasyon (PR) ile birleştirilen çoklu iliştirme, iş yüklerinize kesin yazma izni denetimiyle paylaşılan depolama erişimi sunar ve ACK kümesinde verimli veri paylaşımının yanı sıra hızlı yük devretmeyi mümkün kılar.
Kullanım senaryoları
-
Veri paylaşımı: Bir düğüm paylaşılan bir NVMe diske veri yazdıktan sonra, bağlı olan diğer tüm düğümler bu veriyi anında okuyabilir. Tek bir konteyner görüntüsü NVMe diskte saklanarak aynı işletim sistemini çalıştıran birden fazla örnek tarafından yüklenebilir; bu sayede depolama maliyetleri düşer ve okuma/yazma performansı artar.
-
Yüksek kullanılabilirlik yük devretmesi: Oracle Real Application Clusters (RAC), SAP High-performance ANalytic Appliance (HANA) ve cloud-native yüksek kullanılabilirlik (HA) veritabanları gibi geleneksel kümelenmiş veritabanları tek hata noktasına (SPOF) karşı savunmasızdır. Paylaşılan bir NVMe disk, bir işlem düğümü arızalandığında bile depolamanın erişilebilir kalmasını sağlar. İş yükünüzü birincil/ikincil modda dağıtın: birincil örnek arızalandığında, yazma izinlerini iptal etmek için bir NVMe PR komutu çalıştırın ve ardından ikincil örneği terfi ettirin. Bu yaklaşım bölünmüş beyin yazmalarını önler ve veri tutarlılığını garanti eder. Yük devretme sırası şu şekildedir:
Birincil veritabanı örneği (Veritabanı Örneği 1) arızalanır ve trafiğe yanıt vermeyi durdurur.
Veritabanı Örneği 1'e yazmayı engellemek ve Veritabanı Örneği 2'ye yazma erişimi vermek için bir NVMe PR komutu çalıştırın.
Veritabanı Örneği 2'yi Veritabanı Örneği 1 ile aynı duruma geri yükleyin (örneğin, günlükleri yeniden oynatarak).
Veritabanı Örneği 2 birincil örnek olarak görevi devralır.
PR, NVMe teknik özelliklerinin bir parçasıdır. İşlem düğümlerinin verileri beklendiği şekilde yazmasını sağlamak amacıyla disk düzeyinde okuma ve yazma izinlerini denetler. Ayrıntılar için bkz. NVM Express Base Specification .
-
Dağıtılmış veri önbelleği hızlandırma: Object Storage Service (OSS) üzerine kurulu veri göllerinde ardışık yazma aktarım hızı yüksek olsa da gecikme süresi uzundur ve rastgele okuma/yazma performansı düşüktür. Yüksek hızlı, çoklu iliştirme destekli bir cloud diski işlem düğümleri arasında paylaşılan bir önbellek katmanı olarak ekleyerek erişim performansını önemli ölçüde artırabilirsiniz.
-
Makine öğrenimi: Örnek veriler etiketlendikten ve yazıldıktan sonra, ağ üzerinden kopyalamaya gerek kalmadan paralel eğitim için düğümlere dağıtılabilir. Her işlem düğümü doğrudan paylaşılan diskten okuma yaparak transfer gecikmesini azaltır ve büyük ölçekli model eğitimini hızlandırır.
Faturalama
Çoklu iliştirme özelliği ek ücret oluşturmaz. NVMe protokolünü destekleyen kaynaklar orijinal faturalama yöntemlerine göre ücretlendirilir. Cloud disk fiyatlandırması için bkz. Elastic Block Storage birimleri.
Sınırlamalar
Tek bir NVMe cloud disk aynı anda aynı alandaki en fazla 16 ECS örneğine iliştirilebilir.
Birden fazla düğümden bir cloud diske eş zamanlı olarak okuma ve yazma yapmak için cloud diski
volumeDeviceskullanarak bağlayın. Bu yöntem diski blok aygıtı olarak bağlar ve dosya sistemi erişimini desteklemez. PersistentVolumeClaim (PVC) tanımınızdavolumeMode: BlockveaccessModes: ReadWriteManykullanın.Tüm sınırlamaların tam listesi için bkz. Çoklu iliştirme özelliğinin sınırlamaları.
Ön koşullar
Başlamadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
Kubernetes 1.20 veya sonraki bir sürümü çalışan yönetilen bir ACK kümesi. Oluşturma adımları için bkz. ACK yönetilen küme oluşturma.
v1.24.10-7ae4421-aliyun veya sonraki bir sürümde csi-plugin ve csi-provisioner bileşenleri. Yükseltme için bkz. csi-plugin ve csi-provisioner bileşenlerini yönetme.
Aynı alanda bulunan ve çoklu iliştirme özelliğini destekleyen en az iki düğüm. Desteklenen örnek aileleri için bkz. Çoklu iliştirme özelliğinin sınırlamaları.
-
Aşağıdaki iki gereksinimi de karşılayan kapsayıcılı bir uygulama:
Birden fazla çoğaltmanın aynı cloud diskine eş zamanlı erişimini destekler.
NVMe Rezervasyonu veya eşdeğer bir mekanizma kullanarak veri tutarlılığını sağlar.
Arka plan bilgisi için şunları inceleyebilirsiniz:
Uygulama örneği
Aşağıdaki örnek uygulama, paylaşılan bir NVMe blok aygıtı üzerinde kira tabanlı lider seçimi gösterir. Birden fazla çoğaltma, doğrudan diske yazılan bir kira için yarışır. Aynı anda yalnızca bir çoğaltma kirayı elinde tutar; yenilemeyi durdurduğunda başka bir çoğaltma NVMe Rezervasyon komutlarını kullanarak kirayı ele geçirir.
Önemli tasarım notları:
Blok aygıtını açmak için
O_DIRECTkullanılır; bu, sayfa önbelleğini atlayarak okumaların diske gerçekten yazılan veriyi yansıtmasını sağlar.-
Örnek, Linux çekirdeğinin basitleştirilmiş Rezervasyon arayüzünü (
<linux/pr.h>ioctl'ları) kullanır. Ayrıcalıklı yetkiler gerektiren alternatifler:C:
ioctl(fd, NVME_IOCTL_IO_CMD, &cmd);CLI:
nvme-cli
Tam NVMe Rezervasyon teknik özellikleri için bkz. NVMe Specification.
1. Adım: Uygulamayı dağıtın ve çoklu iliştirmeyi yapılandırın
Çoklu iliştirmeyi etkinleştiren bir StorageClass, blok aygıtı olarak yapılandırılmış bir PVC ve kira uygulaması görüntüsünü kullanan bir StatefulSet oluşturun.
-
Aşağıdaki içerikle
lease.yamladlı bir dosya oluşturun. Kapsayıcı görüntüsü adresini kendi görüntü adresinizle değiştirin.ÖnemliNVMe Rezervasyonu düğüm düzeyinde etkilidir. Aynı düğümde birden fazla pod çalışıyorsa birbirlerini etkileyebilirler. Bu örnek, bunu önlemek için
podAntiAffinitykullanır.Kümenizde NVMe protokolünü kullanmayan düğümler varsa, zamanlamayı NVMe uyumlu düğümlerle sınırlamak için düğüm benzeşimini yapılandırın.
Aşağıdaki tabloda çoklu iliştirme ile standart bağlama yapılandırmaları arasındaki temel farklar özetlenmiştir:
Kaynak Alan Çoklu iliştirme Standart bağlama StorageClass parameters.multiAttach"true"Gerekli değil PVC accessModesReadWriteManyReadWriteOncePVC volumeModeBlockFilesystemBirim bağlama Yöntem volumeDevices— doğrudan blok aygıtı erişimivolumeMounts— dosya sistemi bağlama -
Uygulamayı dağıtın:
kubectl apply -f lease.yaml
2. Adım: Çoklu iliştirmeyi ve Rezervasyonu doğrulayın
Birden fazla düğümün aynı diske okuma ve yazma yapabildiğini doğrulayın
Pod günlüklerini görüntülemek için aşağıdaki komutu çalıştırın:
kubectl logs -l app=lease-test --prefix -f
Beklenen çıktı:
[pod/lease-test-0/lease] Register as key 4745d0c5cd9a2fa4
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
lease-test-1 hemen lease-test-0 tarafından yazılan veriyi okur; bu durum çoklu iliştirmenin çalıştığını doğrular.
NVMe Rezervasyonunun etkin olduğunu doğrulayın
-
Cloud disk kimliğini alın:
kubectl get pvc data-disk -ojsonpath='{.spec.volumeName}' -
İki düğümden herhangi birinde oturum açın ve aşağıdaki komutu çalıştırın.
2zxxxxxxxxxxxkısmını, önceki adımdaki disk kimliğinded-sonrasındaki kısım ile değiştirin.nvme resv-report -c 1 /dev/disk/by-id/nvme-Alibaba_Cloud_Elastic_Block_Storage_2zxxxxxxxxxxxBeklenen çıktı:
NVME Reservation status: gen : 3 rtype : 1 regctl : 1 ptpls : 1 regctlext[0] : cntlid : ffff rcsts : 1 rkey : 4745d0c5cd9a2fa4 hostid : 4297c540000daf4a4*****rtype: 1(write exclusive) veregctl: 1değerleri NVMe Rezervasyonunun etkin olduğunu doğrular.
Rezervasyonun başarısız bir düğümden gelen yazmaları engellediğini doğrulayın
-
lease-test-0çalıştıran düğümde oturum açın ve bir arızayı simüle etmek için işlemi duraklatın:pkill -STOP -f /usr/local/bin/lease -
30 saniye bekleyin ve ardından günlükleri kontrol edin:
kubectl logs -l app=lease-test --prefix -fBeklenen çıktı:
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease [pod/lease-test-1/lease] Remote is dead, preempting [pod/lease-test-1/lease] Register as key 4745d0c5cd9a2fa4 [pod/lease-test-1/lease] Refreshed lease [pod/lease-test-1/lease] Refreshed lease [pod/lease-test-1/lease] Refreshed leaselease-test-1kirayı ele geçirdi ve birincil olarak görevi devraldı. -
lease-test-0düğümünde duraklatılan işlemi devam ettirin:pkill -CONT -f /usr/local/bin/lease -
Günlükleri tekrar kontrol edin:
kubectl logs -l app=lease-test --prefix -fBeklenen çıktı:
[pod/lease-test-0/lease] failed to write lease: Invalid exchangelease-test-0artık diske yazma yapamaz.Invalid exchangehatası, Rezervasyonun daha önce birincil olan düğümden gelen yazma G/Ç işlemini başarıyla engellediğini ve kira kapsayıcısının otomatik olarak yeniden başlatıldığını doğrular.
Sonraki adımlar
NVMe cloud diskinizde alan kalmazsa bkz. Cloud disk birimini genişletme.