RDM (Raw Device Mapping) disk yapısı günümüzde özellikle Oracle RAC ve Microsoft failover cluster gibi yapılarda sıkça karşılaştığımız bir çözümdür.

RDM, sanal makine disk erişimi için kullanılan iki methoddan birisidir. Diğer method hepimizin aşina olduğu Virtual Machine File System (VMFS) yapısıdır.

VMFS VMware tarafından birçok data center uygulaması için kullanılması önerilen yapı iken, RDM sanal makineler arası clustering, fiziksel-sanal clustering veya Sanal makine içerisinde koşan SAN-aware uygulamalar için kullanılabilecek yapıdır. RDM, fiziksel diske bir proxy görevi üstlenerek, sanal makinenin fiziksel storage aygıtını direkt olarak kullanabilmesini ve içerisinde tuttuğu metadata ile diskin yönetilebilmesini ve erişimin fiziksel cihaza yönlenebilmesini sağlar.

Bir microsoft failover cluster yapısı

Resim-1

RDM Konfigürasyonu:
RDM bazı uygulamalar için çok kullanışlı iken ESXi host seviyesinde düzgün konfigüre edilmezse bir eziyet haline dönüşebilir. Öyle ki, ESXi hostun boot olması RDM sayısına göre 45dk-90dk arasında sürebilir.

Bu durum clustering yapısında ki kalıcı SCSi rezervasyon durumundan kaynaklanmakta olup, ESXi host yeniden başlatıldığında boot aşamasında kendisine present edilmiş tüm LUN’ları sorgulamak/keşfetmek istemektedir. RDM’e başka bir node tarafından koyulmuş olan SCSi rezervasyonu ESXi hostun timeout olana kadar discover(keşfetme) işlemini sürdürmesini, ve sonuç olarak boot işleminin çok uzun sürmesine yol açmakta. Boot sonrası ise ESXi host yine RDM’e SCSi rezervasyonu yapmak istemekte bu da binlerce (bazen milyonlarca) “scsi reservation conflict”e sebep olmaktadır. Çok sayıda reservation conflict oluşması, host servislerini crash edebilmekte ve hostun vCenter’da not-responding duruma düşmesine sebep olabilmektedir.

ESXi hosta present edilmiş ve kullanılan RDM’leri tespit edebiliriz. ESXi hosta SSH ile bağlanarak şu iki komutu çalıştıralım ve 2.komut bize RDM diskleri gösterecektir.

1 #find /vmfs/volumes/ -type f -name ‘*.vmdk’ -size -1024k -exec grep -l ‘^createType=.*RawDeviceMap’ {} \; > /tmp/rdmsluns.txt
1 #for i in `cat /tmp/rdmsluns.txt`; do vmkfstools -q $i; done

Çıktısı:
Disk /vmfs/volumes/…/virtualrdm.vmdk is a Non-passthrough Raw Device Mapping
Maps to: vml.02000000006006048000019030091953303030313253594d4d4554

PowerCLI için aynı işlemden görebiliriz.
1 Get-Datastore | Get-HardDisk -DiskType “RawPhysical”,”RawVirtual” | Select “Filename”,”CapacityKB” | fl

Çıktısı:
Filename : [DatastoreName] DirectoryName/virtualrdm.vmdk
CapacityKB : 5760

İlgili RDM diskleri tespit ettikten sonra bu disklerin naa. ID’sini bulmamız gerekmekte bunun için bize sağlanmış olan vm ID’yi kullanıyoruz.

Esxcli storage core device list komutunu çalıştırarak içerisinde daha önceden bulmuş olduğumuz vm ID’yi aratarak ilgili diskin naa’sına ulaşabilirsiniz. Sonrasında bu RDM’i “perennially reserved” olarak işaretleyerek hem hostun standart bir sürede boot olmasını hem de scsi reservation conflict oluşmasını engellemiş olurusunuz.

1 #esxcli storage core device setconfig -d naa.id –perennially-reserved=true

Tekrar kontrol ettiğimizde çıktıda Is perennially reserved: true olmalıdır :
1 #esxcli storage core device list |less
naa.60060160ef0236001868469314b2e511:
Display Name:
Has Settable Display Name: false
Size: 0
Device Type: No device type
Multipath Plugin:
Devfs Path:
Vendor:
Model:
Revision:
SCSI Level: 0
Is Pseudo: true
Status: unknown
Is RDM Capable: false
Is Local: false
Is Removable: false
Is SSD: false
Is VVOL PE: true
Is Offline: true
Is Perennially Reserved: true