İçeriğe geç
academia.sh

Ders 11 / 11

Yedekleme ve Dayanıklılık

Anlık görüntü ile yedeğin aynı yedi kayıp senaryosunda koşturulması: anlık görüntünün üç senaryoda 8/8, yedeğin yedi senaryoda 6/8 kalem getirmesi, ikisinin birlikte 56 kalemin 48'ini kurtarması, tam, artımlı ve ayrımsal yedekte bir dosya bozulduğunda kaybolan nokta sayısının 1, 18 ve 1 olması ve depolamanın 1.120, 91,3 ve 758,2 GiB'a ayrılması.

İçindekiler

Dört ders boyunca sınır hep aynı yönden ölçüldü: birinin sınırı geçmesi durumunda ne olacağı. Sınırın düşmesinin tek yolu bu değil. Bir depolama birimi arızalanır, bir konuk yanlışlıkla silinir, bir konak açılmaz hâle gelir — sınırı geçen kimse yoktur, yine de konuk kaybolur. Sanallaştırmanın bu soruya iki karşılığı var ve ikisi de “geri getirir” diye anılıyor: anlık görüntü ve yedek.

İkisi aynı şeyi getirmiyor. Anlık görüntü konakta, konuk imajının durduğu depolama biriminin üzerinde durur ve saklaması kısadır; yedek konak dışında durur, saklaması uzundur ve kapsamı bir listeyle sınırlıdır. Bu ders ikisini aynı yedi senaryoda koşturup kurtarılan ve kurtarılamayan kalemi ayrı ayrı sayar.

SA26 — Kurgu doğrulayıcı konuğu sekiz kalem taşır. SA27 — Anlık görüntü konakta, konuk imajının depolama biriminde durur; saklama 7 gün, alım aralığı 1 saattir. SA28 — Yedek konak dışında durur; saklama 90 gün, alım aralığı 24 saattir. SA29 — Yedeğin kapsamı dışında iki kalem vardır: yerel sırlar ve bellekteki oturum durumu; bu kapsam boşluğu Sunucu Yönetimi ve Sertleştirme kursunda ölçülmüştü, burada girdidir. SA30 — Bir yöntem, o senaryoda çalışıyorsa kapsamındaki bütün kalemleri getirir. SA31 — Yedek zinciri 28 günlük bir penceredir; boyutlar kurgudur.

Aynı Kayıp Senaryosunda İki Yöntem

// kayip.mjs — ayni kayip senaryolarinda anlik goruntu ile yedek: kurtarilan ve kurtarilamayan kalem.
// Kurgu dogrulayici konugu 8 kalem tasir. Kapsam bosluklari onceki kurstan girdidir.
const KALEM = ['isletim sistemi kok dosyalari', 'uygulama ikilileri', 'yapilandirma',
  'veritabani sayfalari', 'is emri kuyrugu', 'denetim gunlugu', 'yerel sirlar', 'bellekteki oturum durumu'];
const DISI = ['yerel sirlar', 'bellekteki oturum durumu'];       // yedegin kapsami disinda
const ANLIK = { kapsam: KALEM.length, saklama: 7, pencere: 1 };   // konakta, ayni depolama biriminde
const YEDEK = { kapsam: KALEM.length - DISI.length, saklama: 90, pencere: 24 };
// [senaryo, kaybin yasi (gun), depolama birimi kayboldu, konak kayboldu, konuk nesnesi silindi]
const SENARYO = [
  ['konuk dosya sisteminin bozulmasi', 0, false, false, false],
  ['yanlis yapilandirma (2 saat once)', 0, false, false, false],
  ['konuk icindeki dosyalarin sifrelenmesi', 0, false, false, false],
  ['30 gun once silinen kayit', 30, false, false, false],
  ['depolama biriminin kaybi', 0, true, false, false],
  ['konak makinenin kaybi', 0, false, true, false],
  ['yonetim arayuzunden silinen konuk', 0, false, false, true],
];
const anlikOk = ([, yas, b, k, s]) => !b && !k && !s && yas <= ANLIK.saklama;
const yedekOk = ([, yas]) => yas <= YEDEK.saklama;

const s = (x, n) => String(x).padStart(n);
console.log(`${KALEM.length} kalem; anlik goruntu kapsami ${ANLIK.kapsam}, saklama ${ANLIK.saklama} gun; `
  + `yedek kapsami ${YEDEK.kapsam}, saklama ${YEDEK.saklama} gun`);
console.log(`\n${'senaryo'.padEnd(40)}${s('anlik goruntu', 15)}${s('yedek', 8)}${s('en iyisi', 10)}`);
let a = 0, y = 0, en = 0;
for (const sen of SENARYO) {
  const ka = anlikOk(sen) ? ANLIK.kapsam : 0, ky = yedekOk(sen) ? YEDEK.kapsam : 0;
  a += ka; y += ky; en += Math.max(ka, ky);
  console.log(`${sen[0].padEnd(40)}${s(`${ka}/${KALEM.length}`, 15)}${s(`${ky}/${KALEM.length}`, 8)}`
    + `${s(`${Math.max(ka, ky)}/${KALEM.length}`, 10)}`);
}
const T = SENARYO.length * KALEM.length;
console.log(`${'toplam'.padEnd(40)}${s(`${a}/${T}`, 15)}${s(`${y}/${T}`, 8)}${s(`${en}/${T}`, 10)}`);
console.log(`\nanlik goruntu ${SENARYO.filter(anlikOk).length}/${SENARYO.length} senaryoda calisir, `
  + `calistiginda ${ANLIK.kapsam}/${KALEM.length} kalem getirir`);
console.log(`yedek ${SENARYO.filter(yedekOk).length}/${SENARYO.length} senaryoda calisir, `
  + `her seferinde ${DISI.length} kalem kapsam disi: ${DISI.join(', ')}`);
console.log(`ikisi birlikte ${en}/${T}; kurtarilamayan ${T - en} kalem`);
console.log(`veri kaybi penceresi: anlik goruntu ${ANLIK.pencere} saat, yedek ${YEDEK.pencere} saat`);
8 kalem; anlik goruntu kapsami 8, saklama 7 gun; yedek kapsami 6, saklama 90 gun

senaryo                                   anlik goruntu   yedek  en iyisi
konuk dosya sisteminin bozulmasi                    8/8     6/8       8/8
yanlis yapilandirma (2 saat once)                   8/8     6/8       8/8
konuk icindeki dosyalarin sifrelenmesi              8/8     6/8       8/8
30 gun once silinen kayit                           0/8     6/8       6/8
depolama biriminin kaybi                            0/8     6/8       6/8
konak makinenin kaybi                               0/8     6/8       6/8
yonetim arayuzunden silinen konuk                   0/8     6/8       6/8
toplam                                            24/56   42/56     48/56

anlik goruntu 3/7 senaryoda calisir, calistiginda 8/8 kalem getirir
yedek 7/7 senaryoda calisir, her seferinde 2 kalem kapsam disi: yerel sirlar, bellekteki oturum durumu
ikisi birlikte 48/56; kurtarilamayan 8 kalem
veri kaybi penceresi: anlik goruntu 1 saat, yedek 24 saat

İki sütun iki farklı biçimde eksik. Anlık görüntü çalıştığı yerde tam, çalışmadığı yerde sıfırdır: üç senaryoda sekiz kalemin sekizini getirir, dört senaryoda hiçbirini. Sıfırların hepsi aynı sebepten gelir — anlık görüntü kaybolan şeyin yanında durur. Depolama birimi, konak ya da konuk nesnesi gittiğinde anlık görüntüler de gider; otuz gün önceki kayıt ise yedi günlük saklamanın dışındadır.

Yedek her yerde eksik: yedisinde de çalışır ve her seferinde altı kalem getirir. Kaçırdığı iki kalem adıyla yazılıdır — yerel sırlar ve bellekteki oturum durumu — ve senaryodan bağımsız olarak kapsam dışıdır. Anlık görüntünün eksiği koşula bağlıdır, yedeğinki kapsama.

Alt satırlar toplamı veriyor: anlık görüntü 24/56, yedek 42/56, her senaryoda iyisi seçildiğinde 48/56. İki yöntem birbirinin yerine geçmiyor, birbirinin boşluğunu dolduruyor — ama kalan sekiz kalem hiçbir düzende gelmiyor ve hepsi anlık görüntünün çalışmadığı dört senaryodaki kapsam dışı kalemlerdir. Bunun üstüne veri kaybı penceresi eklenir: anlık görüntü bir, yedek yirmi dört saat.

Zincir Bozulduğunda Dönülebilen Nokta

Yedek de tek bir dosya değildir. Her gün tam kopya almak en pahalı düzendir; artımlı ve ayrımsal düzenler maliyeti düşürür ve karşılığında noktaları birbirine bağlar.

// yedekzincir.mjs — tam, artimli ve ayrimsal yedekte zincir bozuldugunda donulebilen nokta (MODEL).
// 28 gunluk pencere; gun 0'da tam yedek, sonraki her gun bir nokta. Boyutlar kurgudur.
const GUN = 28, TAM_GIB = 40, DELTA_GIB = 1.9, BOZUK = 10;

// nokta d'yi acmak icin gereken dosyalar (gun numaralari)
const GEREKEN = {
  tam: (d) => [d],
  artimli: (d) => Array.from({ length: d + 1 }, (_, i) => i),
  ayrimsal: (d) => (d === 0 ? [0] : [0, d]),
};
const BOYUT = {
  tam: () => GUN * TAM_GIB,
  artimli: () => TAM_GIB + (GUN - 1) * DELTA_GIB,
  ayrimsal: () => TAM_GIB + DELTA_GIB * ((GUN - 1) * GUN) / 2,
};
const kayip = (tur, bozuk) => Array.from({ length: GUN }, (_, d) => d)
  .filter((d) => GEREKEN[tur](d).includes(bozuk));

const s = (x, n) => String(x).padStart(n);
console.log(`${GUN} gun, gun 0'da tam yedek; tam ${TAM_GIB} GiB, gunluk delta ${DELTA_GIB} GiB`);
console.log(`\n${'tur'.padEnd(11)}${s('dosya', 6)}${s('nokta basina dosya', 20)}`
  + `${s(`gun ${BOZUK} bozuk: kayip`, 22)}${s('donulebilen en yeni', 21)}${s('depolama GiB', 14)}`);
for (const tur of Object.keys(GEREKEN)) {
  const n = Array.from({ length: GUN }, (_, d) => GEREKEN[tur](d).length);
  const k = kayip(tur, BOZUK);
  const saglam = Array.from({ length: GUN }, (_, d) => d).filter((d) => !k.includes(d));
  console.log(`${tur.padEnd(11)}${s(GUN, 6)}${s(n[0] === n[GUN - 1] ? n[0] : `${Math.min(...n)}-${Math.max(...n)}`, 20)}`
    + `${s(`${k.length} nokta`, 22)}${s(`gun ${Math.max(...saglam)}`, 21)}${s(BOYUT[tur]().toFixed(1), 14)}`);
}
console.log(`\ntam yedek (gun 0) bozulursa kaybolan nokta: `
  + Object.keys(GEREKEN).map((t) => `${t} ${kayip(t, 0).length}`).join(', '));
console.log(`ayrimsal, artimliya gore ${(BOYUT.ayrimsal() / BOYUT.artimli()).toFixed(1)} kat depolama ister`
  + ` ve gun ${BOZUK} bozuldugunda ${kayip('artimli', BOZUK).length - kayip('ayrimsal', BOZUK).length}`
  + ' nokta daha kurtarir');
28 gun, gun 0'da tam yedek; tam 40 GiB, gunluk delta 1.9 GiB

tur         dosya  nokta basina dosya   gun 10 bozuk: kayip  donulebilen en yeni  depolama GiB
tam            28                   1               1 nokta               gun 27        1120.0
artimli        28                1-28              18 nokta                gun 9          91.3
ayrimsal       28                 1-2               1 nokta               gun 27         758.2

tam yedek (gun 0) bozulursa kaybolan nokta: tam 1, artimli 28, ayrimsal 28
ayrimsal, artimliya gore 8.3 kat depolama ister ve gun 10 bozuldugunda 17 nokta daha kurtarir

Üç türün nokta sayısı aynı: yirmi sekiz. Fark noktaların birbirine ne kadar bağlı olduğudur. Tam düzende her nokta bir dosyadır ve bir dosyanın bozulması yalnız o noktayı götürür. Artımlı düzende gün 27’yi açmak yirmi sekiz dosyanın yirmi sekizini ister; gün 10’daki tek dosya bozulduğunda on sekiz nokta birden gider ve dönülebilen en yeni nokta gün 9’a düşer. Ayrımsal düzende her nokta iki dosyadır ve gün 10’un bozulması yalnız gün 10’u götürür.

Depolama sütunu takası yazıyor: 1.120, 91,3 ve 758,2 GiB. Artımlı düzen en ucuzu ve en kırılganıdır; ayrımsal düzen 8,3 kat depolama karşılığında aynı bozulmada on yedi nokta daha kurtarır. Yedek türü bir depolama kararı gibi görünür; ölçüldüğünde bir bağımlılık kararı olduğu çıkar. Üçünün ortak zayıflığı son satırdadır: tam yedeğin kendisi bozulursa artımlı ve ayrımsal düzenlerde yirmi sekiz noktanın yirmi sekizi birden gider.

Kopyanın Nerede Durduğu

Zincir bağımlılığı ölçüldü; kopyanın nerede durduğu ayrı bir sayıdır. Aynı senaryolar bu kez kopya kümesi üzerinde koşuyor.

// kopya.mjs — kopya dagilimi: hangi senaryoda kac kopya hayatta kaliyor (MODEL).
// [ad, konum, cevrimici mi, ayni yonetim kimligiyle silinebilir mi, kurtarma dakikasi]
const KOPYA = [
  ['konak anlik goruntusu', 'konak', true, true, 8],
  ['sube sunucusunda yedek', 'sube', true, true, 45],
  ['merkez nesne deposunda yedek', 'merkez', true, true, 210],
  ['merkezde cevrimdisi kopya', 'merkez', false, false, 720],
];
const SENARYO = [
  ['konak makinenin kaybi', (k) => k[1] === 'konak'],
  ['sube tesisinin kaybi', (k) => k[1] === 'konak' || k[1] === 'sube'],
  ['merkez nesne deposunun kaybi', (k) => k[1] === 'merkez' && k[2]],
  ['yonetim kimliginin ele gecirilmesi', (k) => k[3]],
  ['konuk icindeki dosyalarin sifrelenmesi', () => false],
];
const kalan = (liste, yiten) => liste.filter((k) => !yiten(k));
const s = (x, n) => String(x).padStart(n);
console.log(`${'senaryo'.padEnd(40)}${s('kalan', 7)}   en hizli kurtarma`);
let enkotu = KOPYA.length;
for (const [ad, yiten] of SENARYO) {
  const k = kalan(KOPYA, yiten);
  const hizli = k.length ? k.reduce((a, b) => (b[4] < a[4] ? b : a)) : null;
  enkotu = Math.min(enkotu, k.length);
  console.log(`${ad.padEnd(40)}${s(`${k.length}/${KOPYA.length}`, 7)}   `
    + (hizli ? `${hizli[0]} (${hizli[4]} dk)` : 'yok'));
}
const konum = new Set(KOPYA.map((k) => k[1])).size;
console.log(`\n${KOPYA.length} kopya, ${konum} konum; en kotu senaryoda kalan ${enkotu}`);
const cevrimici = KOPYA.filter((k) => k[2]);
const sonra = Math.min(...SENARYO.map(([, y]) => kalan(cevrimici, y).length));
console.log(`cevrimdisi kopya cikarilinca kopya ${KOPYA.length} -> ${cevrimici.length}, `
  + `en kotu senaryoda kalan ${enkotu} -> ${sonra}`);
senaryo                                   kalan   en hizli kurtarma
konak makinenin kaybi                       3/4   sube sunucusunda yedek (45 dk)
sube tesisinin kaybi                        2/4   merkez nesne deposunda yedek (210 dk)
merkez nesne deposunun kaybi                3/4   konak anlik goruntusu (8 dk)
yonetim kimliginin ele gecirilmesi          1/4   merkezde cevrimdisi kopya (720 dk)
konuk icindeki dosyalarin sifrelenmesi      4/4   konak anlik goruntusu (8 dk)

4 kopya, 3 konum; en kotu senaryoda kalan 1
cevrimdisi kopya cikarilinca kopya 4 -> 3, en kotu senaryoda kalan 1 -> 0

Üç fiziksel senaryoda en az iki kopya ayakta kalıyor. Dördüncü satır ötekilerden farklıdır: yönetim kimliğinin ele geçirilmesi hiçbir donanımı yok etmez, yine de dört kopyanın üçünü birden götürür — o üçü aynı kimliğin silebildiği çevrimiçi kopyalardır ve konum çeşitliliği burada bir şey ifade etmez.

Son satır ölçünün özetidir: çevrimdışı kopya çıkarıldığında kopya sayısı dörtten üçe iner, ama en kötü senaryoda kalan kopya birden sıfıra düşer. Dayanıklılık kopya sayısı değil, kopyaları aynı anda yok edebilen kalem sayısıdır.

Kurtarma Testi

Bütün bu sayılar bir varsayıma dayanıyor: yedek dosyası okunabilir. Bu varsayımın sınanmasına kurtarma testi denir; Sunucu Yönetimi ve Sertleştirme kursundaki geri yükleme tatbikatının aynısıdır ve orada ölçülmüştü. Bu kursun ölçüsüyle söylenecek tek şey şudur: kurtarma testi yapılmadığında kurtarma sınırını geçmek için gereken kalem birdir — bir bozuk dosya, bir kapsam dışı kalem ya da bir okunamayan anahtar — ve o kalem yerindeyse erişilebilen kurtarma noktası sıfırdır.

Özet

  • Yedi kayıp senaryosunda anlık görüntü 3’ünde çalışır ve çalıştığında 8/8 kalem getirir; yedek 7’sinde çalışır ve her seferinde 6/8 getirir.
  • Anlık görüntünün eksiği koşula bağlıdır — kaybolan şeyin yanında durur; yedeğinki kapsama bağlıdır ve iki kalem senaryodan bağımsız olarak dışarıda kalır.
  • İki yöntem toplamda 56 kalemin 48’ini kurtarır; kalan 8 kalem hiçbir düzende gelmez. Veri kaybı penceresi anlık görüntüde 1, yedekte 24 saattir.
  • Yirmi sekiz noktalı zincirde bir dosyanın bozulması tam düzende 1, artımlı düzende 18, ayrımsal düzende 1 nokta götürür; depolama sırasıyla 1.120, 91,3 ve 758,2 GiB’dir. Tam yedeğin kendisi bozulursa artımlı ve ayrımsal düzenlerde 28 noktanın 28’i birden gider.
  • Dört kopyalı düzende en kötü senaryo yönetim kimliğinin ele geçirilmesidir ve 3 kopyayı birden götürür; çevrimdışı kopya çıkarıldığında en kötü senaryoda kalan kopya 1’den 0’a iner.
  • Kurtarma testi yapılmadığında kurtarma sınırını geçmek için gereken kalem birdir ve o kalem yerindeyse erişilebilen kurtarma noktası sıfırdır.

Kurs Kapanışı

Ders Sınırın adı Geçmek için gereken kalem Düşerse erişilen kalem
Bilgisayar Donanım Bileşenleri 8 bileşen, 43 kalem uzaktan 1–3, fiziksel 0 3–43; bellenim tek başına 43
İşletim Sistemi Aileleri yönetici sınırı, 14 istek ailelere göre 1, 2, 3 13, 9, 5 istek
Kurulum ve Yapılandırma varsayılan sınırı, 20 kalem 1 riskli kalem 17 kalem; sertleştirmeden sonra 5
Dosya İzinleri ve Sahiplik izin sınırı, 70 istek sahiplikte 1 nesnenin tüm izin kararları; 6 sapma
Grafik Arayüz ve Komut Satırı denetim izi sınırı, 21 kayıt silinebilen 1 kalem 10 kayıt görünmez; 3 iş izsiz
Sorun Giderme Yöntemi belirti–neden sınırı, 16 olasılık 3,50 adım; kötü sırada 5,81 14 senaryo tek nedene; 2 ayrılamaz
Hipervizör Türleri hipervizör sınırı, 19 ve 26 kalem komşuya 1; donanıma 2 ve 3 15/19 ve 22/26
Konuk ve Konak Sistem paylaşım sınırı, 11 kalem 4 yolda 1, 10 yolda 2, 2 yolda 3 16 yolun 6’sı kapatılamaz
Sanal Makine Yönetimi klon ve anlık görüntü sınırı, 7 sır ortak sırda 1 24 makine; geri dönüşte 17 açık
Konteyner ile Karşılaştırma yalıtım sınırı, 52 kalem konuk 2, bölme 1, iç içe 3 39/52, 52/52, iç içe 9/52
Yedekleme ve Dayanıklılık kurtarma sınırı, 56 kalem bozuk dosyada 1 8 kalem kurtarılamaz; 18 nokta

Üçüncü sütun kursun kuralını on bir satırda aynı biçimde okutuyor: yalıtım bir sıfat değil, sınırı geçmek için aynı anda yanlış olması gereken kalem sayısıdır; o sayı bir ise sınır yoktur. On bir satırın on birinde en az bir “1” var. Bir riskli varsayılan kalemi, bir sahiplik kaydı, silinebilen bir denetim kaydı, bir ortak sır, bir bozuk yedek dosyası — hepsi tek başına yeterlidir ve hiçbiri bir kaçış yolu kullanmaz.

Sayının birden büyük olduğu yerler üç kaynaktan geliyor: katman üstüne katman (donanıma iki ve üç kalem, iç içe düzende üç), doğrulama zinciri (imzalı açılış gereken kalemi bire karşı dörde çıkarır) ve bölünmüş ayrıcalık (yönetici sınırı bir ailede bir, ötekinde üç kalem). Üçünün de bedeli yazılıdır — dört ek yama kalemi, her güncellemede yeniden imzalanan üç halka, yönetici olunsa da erişilemeyen dokuz istek. Bedeli yazılmayan bir sınır ölçülmemiştir.

Dördüncü sütun sınırın yetmediği yeri gösteriyor: kapatılamayan altı paylaşım yolu, kurtarılamayan sekiz kalem, ayrılamayan iki neden ve hiç kapanmayan bir kurulum kalemi. Hiçbiri daha iyi bir yapılandırmayla kapanmıyor.

Bütün bu sayılar tek bir makinede ve üzerindeki konuk sistemlerde ölçüldü. Ama şube sunucusu yalnız başına durmuyor: sayaç uç noktaları ve saha ekiplerinin dizüstü bilgisayarları ona, kendisi de merkeze bağlanıyor. Bu bağlantıların her biri işletim sisteminin çizdiği sınırın dışından geçen bir yoldur; ne izin bitleri ne hipervizör ne de bölme onu görür. M24/K03 Ağ Güvenliği bu soruyla başlar: iki makine arasındaki her bağlantı kaç yol açıyor ve o yolları kim sayıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat