RHEL/CENTOS 8 Linux Sunuculara ISCSI Disk Eklemek

Merhabalar,

Bu makalemde RHEL 8 / CentOS 8 linux sunucularda ISCSI initiator yapılandırma adımlarını detaylarıyla paylaşacağım. Aslında burada anlattığım yöntem, genel olarak tüm linux sunucular için kullanılabilecek yöntemdir.

ISCSI, Internet Small Computer System Interface’in kısaltmasıdır. Blok katmanında (block layer) depolamaya erişildiğinden, ISCSI’yi bir blok depolama (block storage) alanı olarak düşünebiliriz. Temel olarak iSCSI, RAW depolama aygıtlarını, bir IP network üzerinden paylaşmak için blok düzeyinde kullanılan bir protokoldür. Buna SAN teknolojisi, yani iSCSI SAN diyoruz. IP network üzerinden çalıştığı için, NFS veya SMB gibi NAS teknolojileri ile karıştırmamak gerekiyor. Bunlar arasındaki farklar pek bilinmiyor ve sanki hepsi aynı kefeye konuyor gibi gözlemliyorum… NFS ve SMB, IP network üzerinden de çalışırlar ancak Dosya Sistemi Katmanı (File System Layer) üzerinde çalışırlar. Fakat iSCSI’de RAW blokları üzerinde çalışıyoruz.

iSCSI SAN Mimarisi

Bir ISCSI SAN altyapısı kurarken, bir sunucuyu ISCSI target olarak yapılandırırız. ISCSI target, paylaşılan depolama aygıtlarına erişim hizmetini sağlayan sunucudur. RHEL veya CentOS 8’i, ISCSI target olarak yapılandırdığınızda, paylaşılan depolama aygıtları genellikle LVM mantıksal birimleridir, fakat disklerin tamamı da olabileceği gibi, belli bazı bölümleri de olabilirler.

Diğer sunucu ISCSI initiator olarak kullanılacaktır. ISCSI initiator, SAN’a bağlanan sunucudur. SAN’a bağlandıktan sonra ISCSI initiator, bu paylaşım alanlarını ek bir disk olarak görür.

ISCSI initiator, ağdaki hedefleri (target’lara) bağlanırken, keşfetme (discover etme), kimlik doğrulama (authentication) ve oturum açma (login) gibi süreçlerden geçer. Bu süreçlerin sonunda, ISCSI LUN’larına erişim gerçekleşir.

Önemli NOT

ISCSI target üzerinde yedekli bir ağ bağlantısı kullanırken, kaç tane network arayüzü varsa, ISCSI initiator, SAN cihazını SAN’ın her farklı yolu için bir kez daha görecektir. Bu durum, paylaşılan aynı disk aygıtının birden fazla kere sunulduğu bir duruma yol açabilir. Gereksiz yolların bulunduğu böyle bir kurulumda, SAN aygıtının doğru adreslendiğinden emin olmak için, ISCSI initiator’ın, çok yollu sürücüyü (multipath) çalıştıracak şekilde yapılandırılması gerekir.

Kurulum Detaylarım

Aşağıdaki tabloda, bu çalışmayı yaparken kullandığım sunucu ve storage altyapısına ait bilgiler görülmektedir.

Hostname komutuyla, sunucu ismini doğrulayabilirsiniz.

hostname

Hangi linux versiyonunu kullandığınızı da aşağıdaki komutla öğrenebilirsiniz.

cat /etc/redhat-release

ISCSI target olarak FreeNAS storage kullandım. FreeNAS storage kurulumu, konfigürasyonu ve ISCSI LUN’ların oluşturulup, paylaşıma nasıl açılacağıyla ilgili detaylı makaleme aşağıdaki linkten de ulaşabilirsiniz.

Bu kurulumu yaptığınızı ya da bunun dışında herhangi bir ISCSI target kullandığınızı varsayarak işlemlerime başlıyorum.

iSCSI Initiator yapılandırması

RHEL / CentOS 7/8 üzerindeki ISCSI Initiator (veya istemci), iscsi-initiator-utils paketi ile birlikte kurulur. Bu paketin, sisteminizde yüklü olup olmadığını, aşağıdaki rpm komutuyla kontrol edebilirsiniz ve mevcut değilse dnf ya da yum komutunu kullanarak yükleyebilirsiniz.

rpm -q iscsi-initiator-utils

dnf install iscsi-initiator-utils -y

1. ISCSI Initiator ismini düzenleme

Kullandığımız sunucuyu, initiator olarak kullanarak mevcut bir LUN’a bağlayacağız. Initiator ismini görmek için /etc/iscsi/initiatorname.iscsi dosyasını açabiliriz ve istersek kendimize göre düzenleyerek yapılandırabiliriz. Ben ilgili düzenlemeleri, nano komutuyla ilgili dosya üzerinde aşağıdaki şekilde düzenlemeleri yapıyorum.

nano /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2020-05.com.isleyen:node-1

Bu işlemden sonra, iscsid arka plan programını yeniden başlatın.

systemctl restart iscsid

2. ISCSI LUN discover işlemleri

FreeNAS storage üzerinde 50 GB boyutunda bir LUN oluşturdum. Bunun, yaklaşık 45 GB kadar kullanım alanı oldu. Discover edilecek LUN’lar arasında, target olarak bu diski kullanacağım.

ISCSI discover işlemi yapılırken, üç farklı bağımsız değişkene ihtiyacınız vardır:

  • –type sendtargets: Discover modunda, ISCSI hedeflerinin nasıl bulunacağını anlatır.
  • –portal: Bu argüman, iscsiadm komutuna, keşfi gerçekleştirmek için hangi IP adresinin ve bağlantı noktasının adresleneceğini bildirir. Bağımsız değişken olarak bir IP adresi veya node ismi kullanabilirsiniz ve isteğe bağlı olarak bir bağlantı noktası da belirleyebilirsiniz. Herhangi bir bağlantı noktası belirtilmezse, varsayılan bağlantı noktası olarak default ISCSI portu olan 3260 portu kullanılır.
  • –discover: Bu argüman, iscsid servisine bir discovery işlemi gerçekleştirmesini söyler.

Hedefteki iSCSI LUN’ları keşfetmek için iscsiadm ana istemci aracını kullanacağız. Aşağıdaki komutu daha kısa da yazabilirsiniz ve fark olmayacaktır. Target üzerinde yapılandırılmış tüm diskleri aşağıdaki gibi göreceksiniz.

iscsiadm –mode discovery –type sendtargets –portal 20.20.20.7 -discover 20.20.20.7:3260,-1 iqn.2020-05.com.isleyen:node-1

Discovery işleminden sonra, database güncellendiği görülür.

ls -l  /var/lib/iscsi/nodes

 ls -l /var/lib/iscsi/send_targets/20.20.20.7,3260/

3. ISCSI Bağlantısının sağlanması

ISCSI hedefine bağlanabildiğimizi ve bizim için yapılandırılmış LUN’ların bilgilerinin bize gönderildiğini gördük. Şimdi sırada, istediğimiz LUN’a bağlanma işlemi var. Bağlanmak istediğimiz target iqn.2005-10.org.freenas.ctl:centos8-iscsi olduğu için, aşağıdaki komutu kendinize göre düzenleyerek uygulayın. FreeNAS tarafında herhangi bir kimlik doğrulama işlemi yaptırmadım ve direkt olarak bağlanabilmesine olanak sağlamıştım.

iscsiadm –mode node –targetname iqn.2005-10.org.freenas.ctl:centos8-iscsi –login

Başarıyla login olduk.

Bu komutta, aşağıdaki gibi birkaç seçenek kullanılabilir:

  • –mode node: iscsiadm’nin, “node” moduna girmesini bildirir. Hedefle, gerçek bağlantının kurulabileceği moddur.
  • –targetname: ISCSI discovery işlemi sırasında, keşfedilen hedefin adını belirtir.
  • –portal: Target tarafından dinlenen IP adresi ve bağlantı portu noktasıdır.
  • –login: Hedef üzerinde, kimlik doğrulaması yapar ve yeniden başlatma sırasında bağlantının yeniden kurulabilmesini sağlamak için kimlik bilgilerini de kaydeder.

Login işleminden sonra ISCSI hedefiyle aramızda bir oturum açılmış olur. Hem oturum, hem de node bağlantısı, -P seçeneği kullanılarak izlenebilir.

iscsiadm –mode node -P 1

ISCSI hedefine bağlantı yaptıktan sonra, hedef tarafından sunulan yeni ISCSI cihazlarını ya da disklerini görebilmemiz gerekiyor. Aşağıdaki komut ile bu kontrolü yapabilirsiniz.

lsscsi

4. Kalıcı ISCSI bağlantısını yönetme

Bir ISCSI target sunucusunda oturum açtıktan sonra, bağlantılar otomatik olarak kalıcı olur. Dolayısıyla yeniden başlatma sırasında, ISCSI istemcisinde iscsid ve iscsi hizmetleri başlatıldığında, bu hizmetlerin otomatik olarak yeniden bağlanmak için yerel olarak depolanan ISCSI yapılandırmasını okuyabileceği anlamına gelmektedir.

Bu nedenle, iSCSI sunucusuna bir kez başarıyla bağlandığınızda yapılandırma dosyalarına herhangi bir şey koymanıza gerek yoktur.

Fakat fstab dosyasına, bazı limitasyonlardan dolayı mecburen bir kayıt girmemiz gerekiyor. Bunun nedenine ilerleyen adımlarda değineceğim.

Aşağıdaki komut ile disklerin kontrolünü yapabiliriz. Diskimiz sdb olarak 45 Gb boyutunda bulunmuş durumda…

fdisk -l

5. ISCSI bağlantısını koparmak istersek…(isteğe bağlı)

Sunucuyu yeniden başlattıktan sonra, ISCSI bağlantısının geri yüklenmesine ihtiyacınız yoksa, önce aşağıdaki komutu kullanarak gerçek oturumun bağlantısını kesmeniz ve oturumu kapatmanız gerekir.

iscsiadm –mode node –targetname iqn.2005-10.org.freenas.ctl:centos8-iscsi –portal 20.20.20.7 -u

Logging out of session [sid: 1, target: iqn.2005-10.org.freenas.ctl:centos8-iscsi, portal: 20.20.20.7,3260]
Logout of [sid: 1, target: iqn.2005-10.org.freenas.ctl:centos8-iscsi, portal: 20.20.20.7,3260] successful.

Daha sonra, karşılık gelen IQN alt dizinini ve tüm içeriğini silmeniz gerekir. Bunu aşağıdaki komutla yapabilirsiniz.

iscsiadm –mode node –targetname iqn.2005-10.org.freenas.ctl:centos8-iscsi –portal 20.20.20.7 -o delete

ipucu :

iscsi.service hizmetini durdurun ve mevcut tüm yapılandırmayı temizlemek için /var/lib/iscsi/nodes altındaki tüm dosyaları silin. Bunu yaptıktan sonra iscsi.service’i yeniden başlatın ve discovery işlemini yeniden başlatarak tekrar oturum açın.

6. ISCSI Aygıtlarının Mount İşlemi

Bir ISCSI cihazı mount etmek için birkaç konuya dikkat etmeniz gerekir. İlk olarak, bende /dev/sdb olarak görünen ISCSI diski, SAN yapılandırmanızdaki topoloji değişikliğinden dolayı bir sonraki bağlanışında, farklı bir aygıt adı olarak görünebilir. Bu nedenle, /etc/fstab dosyasında /dev/sdb şeklinde tanım yapmak akıllıca bir fikir değildir. Bunun yerine bir dosya sistemi UUID’si kullanmalısınız. Her dosya sistemi otomatik olarak bir UUID alır ve değişmez.

Bu UUID bilgisini aşağıdaki komutla alabilirsiniz.

blkid /dev/sdb

Bu komut çıktı vermeyecektir. Çünkü ISCSI diskte bir partition oluşturmadık ve şu an RAW disk olarak sistemde ekli durumda. Yapılandırmayı bitirdiğimiz zaman ilerleyen adımlarda bu komutla UUID bilgisini alacağız.

lsblk

6.1. Yeni disk için partition table oluşturmak

Partition oluşturmak için, öncelikle kullanmak istediğimiz bölümleme standardını belirtmemiz gerekir. GPT daha modern bölümleme standardı iken, MBR standardı işletim sistemleri arasında daha geniş destek sunar. Özel bir gereksiniminiz yoksa, bu noktada GPT kullanmak muhtemelen daha iyidir. Böylece yüksek kapasiteli disk genişletme operasyonları da problemsiz gerçekleşebilir. MBR diskler, 2 TB üstüne çıkamaz.

Partition yapısını oluşturmak için parted komutlarına ve paketine ihtiyacımız olacak. Sisteminizde parted yüklü olup olmadığını aşağıdaki komut ile görebilirsiniz. Yüklü değilse dnf ya da yum komutlarıyla yüklemesini yapabilirsiniz.

rpm -qa | grep parted

dnf install parted

Aşağıdaki komut ile, sunucumuz üzerindeki diskleri ve bölümlerini görebiliriz. Komut çıktısında, önceki adımlarda discover edilen ve raw disk olarak bağlanmış olan ISCSI diski, /dev/sdb olarak görüyoruz.

parted -l

“Unrecognized disk label“ şeklinde bir hata mesajı görüyoruz, çünkü herhangi bir partition table etiketi yok şu an.

GPT standardını seçerek diski formatlamak için, aşağıdaki komutu kullanıyoruz.

parted /dev/sdb mklabel gpt

MBR biçimini kullanmak istiyorsanız, yukarıdaki komut yerine şu komutu kullanın.

parted /dev/sdb mklabel msdos

6.2. Yeni partition oluşturmak

Biçim seçildikten sonra, aşağıdaki komutla, sürücünün tamamını kapsayacak şekilde bir bölüm oluşturabilirsiniz:

parted -a opt /dev/sdb mkpart primary ext4 0% 100%

Buraya kadar olan kısımda, partition table oluşturarak, hiçbir bölümleme yapmadan diskin tamamını kullanabilmek için konfigürasyon yaptık. Henüz bir dosya formatı seçmedik.

blkid /dev/sdb

Aşağıdaki komutla da yeni disk üzerinde oluşturduğumuz bölümleri görebiliriz.

lsblk

NOT:

Linux’ta dosya sistemi oluştururken, tüm diski değil, disk içinde bir bölümü seçmemiz gerekiyor. Linux’ta disklerin sda, sdb, hda, vb. adları vardır. Yukarıdaki adımlarda yaptığımız gibi, kullanılabilir alanlar oluşturduğumuzda, bu disklerdeki bölümlerin sonuna birer sayı eklenir. Bu yüzden sdb değil de sdb1 gibi bir şey kullanmak isteriz. Yukarıda yaptığımız ve tüm alanı kullandığımız komut sonrası, bunu anlamlandırmak için sdb1 alanı oluşturulmuş oldu.

6.3. Yeni partition üzerinde dosya sistemi oluşturmak

Kullanılabilir bir bölümümüz olduğuna göre, bunu ext4 ya da istediğimiz başka bir dosya sistemi olarak biçimlendirebiliriz. Bunu yapmak için mkfs.ext4 komutunu kullanacağız.

-L opsiyonunu seçerek bir bölüm etiketi de ekleyebiliriz. Bu belirli sürücüyü tanımanıza yardımcı olacak bir ad seçmenizi öneriyorum. En azından ISCSI disk olduğunu belirtecek bir etiket kullanmanız iyi olur.

Bizim kullanacağımız alan, /dev/sdb1 olacak ve ext4 formatlamak için aşaıdaki komutu kullanıyoruz.

Anlaşılabilir olması için, -L opsiyonuyla ISCSI_Partition şeklinde etiket verdim.

mkfs.ext4 -L ISCSI_Partition /dev/sdb1

İşlem başarılı şekilde tamamlandı. Bakınız UUID şimdi oluşturuldu. Bu UUID bilgisini, ilerleyen adımlarda fstab altında tanımlayacağız.

Bölüm etiketini daha sonraki bir tarihte değiştirmek istiyorsanız e2label komutunu kullanabilirsiniz:

e2label /dev/sdb1 yeni_etiket

Bölümün adını, etiketini ve UUID’sini bulmak isterseniz, çeşitli opsiyonlarla birlikte lsblk komutunu kullanabilirsiniz.

lsblk –fs

Sürümünüz uygun alanların tümünü göstermiyorsa, bunları manuel olarak da isteyebilirsiniz.

lsblk -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT

6.4. Yeni dosya sistemini mount etmek

Artık dosya sistemini, kullanım için mount edebiliriz.

Dosya Sistemi Hiyerarşi Standardı, geçici olarak mount edilen dosya sistemleri için /mnt veya altındaki bir alt dizinin kullanılmasını önerir. Daha kalıcı depolama alanlarını nereye mount edeceğiniz konusu da size kalan bir konudur. Böylece nasıl bir düzen istiyorsanız, kendinize göre şekillendirebilirsiniz.

Bu makale için, ISCSI diskimizi /mnt/iscsi_disk altına yerleştireceğiz. Bunun için öncelikle /mnt altına iscsi_disk isimli bir dizin oluşturuyorum ve sonra da /dev/sdb1 diskini bu dizine mount ediyorum.

mkdir -p /mnt/iscsi_disk

mount -o defaults /dev/sdb1 /mnt/iscsi_disk

Önemli not:

Kalıcı ISCSI bağlantıları oluştururken ikinci sorun, normalde /etc/fstab dosyasının ağ kullanılabilir olmadan önce işlenmesidir. Dolayısıyla ISCSI diskinin mount edilebildiğinden emin olmak için /etc/fstab içinde _netdev mount veya başka bir seçenek kullanmanız gerekir.

Bu nedenle, bir ISCSI bağlantının kalıcı olarak yapılandırıldığından emin olmak için, /etc/fstab dosyasına aşağıdaki gibi bir girdi ekleyin.

UUID-XXXXXXXX-XXXX-XXXX-XXXXXXXX    /iscsi       ext4     _netdev   0 2

6.5. Dosya sisteminin boot sırasında otomatik mount edilmesi

Önemli not kısmında bahsettiğim işlemin detayını bu adımda gerçekleştireceğiz. Sunucu her restart sonrası önyüklendiğinde, yeni dosya sistemini otomatik olarak mount etmek istiyorsanız, /etc/fstab dosyasını düzenlememiz gerekiyor.

nano /etc/fstab

Daha önce, dosya sistemimiz için çeşitli dosya sistemi tanımlayıcılarını görüntülemek için, lsblk –fs komutunu kullandık (NAME,FSTYPE,LABEL,UUID,MOUNTPOINT). Aşağıdaki formatta belirttiğim herhangi bir yazım şeklini, bu dosyada kullanabilirsiniz.

/etc/fstab

. . .

## Aşağıdaki üç satırdan herhangi bir formatı kullanabilirsiniz.

# /dev/sdb1 /mnt/iscsi_disk ext4 defaults 0 2

# UUID= 81736d1e-247b-4cc6-97dc-22fde8694750 /mnt/iscsi_disk ext4 defaults 0 2

# LABEL= ISCSI_Partition /mnt/iscsi_disk ext4 defaults 0 2

Ben UUID ile başlayan satırı, bu dosyanın en sonuna ekleyeceğim. Ekledikten sonra dosyayı kaydedip çıkabilirsiniz.

Diskimiz tamamen formatlanmış, mount edilmiş ve kullanıma hazır duruma gelmiş oldu. Disk içeriğini listeleyip çeşitli kontroller yapabiliriz.

Sunucumuzu restart edelim ve boot aşamasında, ISCSI diskin otomatik mount olup olmadığını görelim. Örneğin dosya oluşturup içerik listeleme vs gibi basit kontroller yapalım.

mkdir /mnt/iscsi_disk/isleyen.net

ls -l /mnt/iscsi_disk/

Diskimiz kullanılabilir durumda ve okuma yazma yapabiliyoruz.

Ayrıca, bir test dosyası oluşturarak, dosyanın okuma ve yazma özelliklerine sahip olduğunu da kontrol edebiliriz:

echo “success” | sudo tee /mnt/iscsi_disk/isleyen.net_test_file

Yazmanın doğru şekilde yürütüldüğünden emin olmak için test dosyasını geri okuyun.

Linux sunucumuza, ISCSI disk ekleme adımlarının tamamı bu kadar. Ilerleyen makalelerimde RedHat/CentOS High Availability Cluster kurulumları da yapacağım için, ISCSI storage konusunu özellikle ve tüm detaylarıyla işlemek istedim.

Yararlı olması dileğiyle.

Yusuf İşleyen