Linux İşletim Sistemlerinde Cluster Yapılandırması

LinuxAllBu makalemizde “Linux İşletim Sistemlerinde Cluster Yapılandırması”nı inceleyeceğiz. Kurulumu “Red Hat Enterprise Linux 6.4” işletim sistemi üzerine yapacağız.

Cluster Nedir ?

Cluster, hizmet ve uygulamaların kullanılabilirliğini artırmak için birlikte çalışan bağımsız bilgisayarların oluşturduğu bir gruptur. Kümelenmiş sunucular (Cluster Servers) fiziksel kablolarla ve yazılımlarla bağlanır. Sunuculardan biri başarısız olursa, başka bir sunucu Failover adı verilen bir işlem sayesinde hizmet sunmaya başlar. Kurulum için sunucularımızda en az 2 adet ağ (ethernet) kartı ve cluster (kümeleme) yapılandırmamızı tutacak bir “Quorum” disk alanına ihtiyacımmız bulunmaktadır. Ağ kartlarımızın biri public dediğimiz ağımıza hizmet etmek için kullanılacak diğer ağ kartımızsa cluster (kümeleme) sunucularımızın bir birleriyle konuşabilmesi için “interconnect” dediğimiz ağ için gereklidir. Önerilen yapıda cluster sunucularımızın konuşacağı “interconnect” bağlantısının sağlanacağı ağ anahtarı (switch) cihazının ayrı bir cihaz olmalıdır. Eğer bu sağlanamıyorsa en azından ağ anahtarı üzerinden “interconnect” kartlarımızın bağlanacağı portların ayrı bir “VLAN” olması sağlıklı olacaktır. Klasik ve basit cluster yapısı iki server dan oluşur, bunlara node (üye) denilir. Üyeler arası iletişim için bir “private (interconnect) network” vardır  ve cluster dışı iletişim için bir “public network” mevcuttur. Ayrıca her üyenin erişebileceği bir depolama ünitesi vardır. Depolama ünitesi üzerindeki cluster kullanımı için olan bütün diskleri her her üye görür. Üyelerin hepsi bütün diskleri görse de bir anda bir diske sadece bir üye ulaşabilir. Mesela “Highly Available” bir yazılımınızı çalıştırıyorsunuz. Bu yazılımın kullandığı disk Cluster’ın shared disklerinden biri olur ve o an o yazılım hangi üye üzerinde çalışıyorsa o üye da o diskin sahibidir. Yazılımda çalıştığı üyenin IP Adresini bind eder ve public network üzerinden hizmet verir. Private network üzerinden de üyeler aralarında statü bilgilerini  (heartbeat) iletirler. Cluster ortamımızda en çok 16 sunucumuzu kullanabiliriz.

  • Kurulum Senaryosu

Kurulum işlemimizi Red Hat Enterprise Linux 6.4 işletim sistemi üzerinde yapacağız. Sunucularımızda 4 adet ethernet kartı olduğunu varsayalım bu kartlardan 3 tanesini “bonding” işlemi ile yapılandıracağız. Kalan 1 kartımızı ise cluster (kümeleme) sunucularımızın birbirleriyle konuşmasını sağlayacak “Interconnect” bağlantısı için yapılandıracağız. Sunucumuzda Cluster (kümeleme) yapılandırmamızın dosyalarını ve ayarlarını tutacağı “Quorum” disk alanımız olacak bu alan depolama ünitesinden tüm sunucularımızın ortak göreceği şekilde atanmalıdır. Quorum disk alanı için 1 GB büyüklüğünde bir alan yeterli olacaktır. Ayrıca Cluster (kümeleme) rolümüzü bir dosya sunucusu hizmeti için yapılandırdığımızı varsayarak yine depolama ünitesinden “data” isimli ortak diskimizin tüm sunucularımıza atanmış olmalıdır. Disklerimizin için “multipath” yapılandırmamızın yapılmış olması gerekmektedir.

1. Öncelikle sunucularımıza  işletim sistemimizi “Red Hat Enterprise Linux İşletim Sistemi Kurulumu” makalemizde anlatıldığı gibi kuruyoruz.

2. Yerel isim çözümleme dosyasına gerekli IP Adreslerimizi ve üyelerimizin isimlerini giriyoruz. Aynı zamanda ağ ortamımızda bulunan “DNS” Sunucumuza aşağıdaki adresleri kaydediyoruz. “DNS” kayıt işlemi yapılmazsa “cluster” kurulum işlemimizde sorun yaşayabiliriz.

# vim /etc/hosts

-- Dosyamızı açıyoruz ve aşağıdaki gibi düzenliyoruz.
-- Aynı adres ve isimlerimizi DNS sunucumuza kaydediyoruz.
(forward ve reverse kayıtlarıyla) DNS Sunucumuzda kayıtlı değilse
kurulum hata verecektir.

# Public
192.168.2.121           koraykey-cl1.localdomain.com    koraykey-cl1
192.168.2.122           koraykey-cl2.localdomain.com    koraykey-cl2

# Private (Interconnect - Ricci)
192.168.117.141         koraykey-cl1i.localdomin        koraykey-cl1i
192.168.117.142         koraykey-cl2i.localdomin        koraykey-cl2i

# Cluster
192.168.2.120           koraykey-cl.localdomain         koraykey-cl

-- DNS Kayıtlarımızı kontrol etmek için

-- Üye 1

# nslookup koraykey-cl2.localdomain
Server:         192.168.2.1
Address:        192.168.2.1#53

Name:   koraykey-cl2.localdomain
Address: 192.168.2.122

# nslookup koraykey-cl2i.localdomain
Server:         192.168.2.1
Address:        192.168.2.1#53

Name:   koraykey-cl2i.localdomain
Address: 192.168.117.142

-- Üye 2

# nslookup koraykey-cl1.localdomain
Server:         192.168.2.1
Address:        192.168.2.1#53

Name:   koraykey-cl1.localdomain
Address: 192.168.2.121

# nslookup koraykey-cl1i.localdomain
Server:         192.168.2.1
Address:        192.168.2.1#53

Name:   koraykey-cl1i.localdomain
Address: 192.168.117.141

3. Sunucularımızda gerekli işletim sistemi paketlerimizi kuruyoruz.

# yum -y install lvm2-cluster
# yum -y install gfs2-utils
# yum -y install luci

4. Sunucularımızda “Firewall”, “SELinux” ve “ACPI” servislerimizi durduruyoruz ve sunucularımızın açılışında başlamaması için kapatıyoruz.

-- Servislerimizi durduruyoruz.
# service iptables stop
# service ip6tables stop
# service acpid stop

-- Otomatik başlamaması için ayarlıyoruz.
# chkconfig iptables off 
# chkconfig ip6tables off 
# chkconfig acpid off

-- SELinux ayarımızı yapıyoruz.

# vim /etc/selinux/config
-- dosyasında bulunan 

SELINUX=disabled 

parametresini yukarıdaki gibi kapalı duruma getiriyoruz.

5. Sunucularımızda cluster (kümeleme) için çalışması gereken servislerimizi başlatıyoruz ve sunucularımızın açılışında otomatik başlaması için gerekli ayarları yapıyoruz.

-- Servislerimizi başlatıyoruz.

# service luci start
# service ricci start

-- Otomatik başlamasını ayarlıyoruz.

# chkconfig luci on 
# chkconfig ricci on

6. Cluster (Kümeleme) servisimizin kullanacağı “ricci” kullanıcısının parolasını belirliyoruz.

# passwd ricci

Changing password for user ricci.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

7. Sunucularımızda  cluster (kümeleme) hizmeti için kullanacağımız “Quorum” ve “Data” disklerimizi kontrol ediyoruz.

# ll /dev/sd*

-- İşletim Sistemi Disklerimiz
brw-rw---- 1 root disk 8,  0 Apr 22 00:09 /dev/sda
brw-rw---- 1 root disk 8,  1 Apr 22 00:09 /dev/sda1
brw-rw---- 1 root disk 8,  2 Apr 22 00:09 /dev/sda2

-- Cluster için Quorum ve Data Disklerimiz
brw-rw---- 1 root disk 8, 16 Apr 22 00:09 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 22 00:09 /dev/sdc

8. Cluster (Kümeleme) ön hazırlığımız tamamlandı. Şimdi aşağıdaki örnek adresten “Cluster” yönetim konsolumuza bağlanarak gerekli ayarlarımızı yapıyoruz.

https://koraykey-cl1.localdomain:8084

9. İnternet tarayıcımızla bağlandığımız yönetim konsolumuzda “root” kullanıcısı ile oturum açıyoruz.

RedHatCluster_1

10. Açılan konsolumuzda “Manage Cluster” sekmesine gelerek “Add” düğmesine tıklıyoruz.

RedHatCluster_2

11. Karşımıza gelen “Create New Cluster” pencerisine sunucularımızın bilgilerini yazıyoruz. Burada “Ricci Hostname” bölümüne Private (Interconnect) ağımızın isim bilgilerini yazıyoruz. Diğer seçenekleri aşağıdaki gibi yapılandırdıktan sonra “Create Cluster” düğmesine tıklıyoruz.

RedHatCluster_3

12. Sunucularımızda cluster (kümeleme) hizmeti yapılandırılırken bekliyoruz.

RedHatCluster_4

13. Sunucularımızda cluster (kümeleme) hizmeti kuruldu. Üyelerimizi aşağıdaki ekrandaki gibi görebiliriz.

RedHatCluster_5

14. Şimdi kullanacağımız disklerimizi yapılandıralım yazımızın başında kontrol ettiğimiz gibi “/dev/sdb” Quorum diskimiz olacak “/dev/sdc” Data diskimiz olacaktır. Şimdi bu disklerimizi cluster (kümeleme) sistemimize özel yapılandırıyoruz. Bu işlemler sadece bir üye üzerinde yapılacaktır.

-- Sadece bir üye üzerinde yapıyoruz.
-- Quorum Diskimizi Yaratıyoruz.

# mkqdisk -c /dev/sdb -l qdisk

mkqdisk v3.0.12.1
Writing new quorum disk label 'qdisk' to /dev/sdb.
WARNING: About to destroy all data on /dev/sdb; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
Initializing status block for node 3...
Initializing status block for node 4...
Initializing status block for node 5...
Initializing status block for node 6...
Initializing status block for node 7...
Initializing status block for node 8...
Initializing status block for node 9...
Initializing status block for node 10...
Initializing status block for node 11...
Initializing status block for node 12...
Initializing status block for node 13...
Initializing status block for node 14...
Initializing status block for node 15...
Initializing status block for node 16...

-- Quorum Diskimizi Sorguluyoruz.

# mkqdisk -L
mkqdisk v3.0.12.1

/dev/block/8:16:
/dev/disk/by-id/scsi-36000c29f979ea065721255dcf540440a:
/dev/disk/by-id/wwn-0x6000c29f979ea065721255dcf540440a:
/dev/disk/by-path/pci-0000:02:05.0-scsi-0:0:0:0:
/dev/sdb:
        Magic:                eb7a62c2
        Label:                qdisk
        Created:              Mon Apr 22 00:35:34 2013
        Host:                 koraykey-cl1.localdomain
        Kernel Sector Size:   512
        Recorded Sector Size: 512

15. Yaratmış olduğumuz Quorum Diskimizi Cluster (Kümeleme) bilgilerimizi tutması amacıyla sistemimize atıyoruz. Konsolumuzun sol tarafındaki cluster ismimizin (koraykey-cl) üzerine tıklıyoruz ve açılan menüden “Configure>QDisk” yolunu izleyerek Quorum disk yapılandırma sayfasına erişiyoruz. Burada “Quorum Disk” için ayırdığımız “dev/sdb” diskimizi aşağıdaki gibi yazıyoruz ve “Apply” düğmesine tıklıyoruz.

RedHatCluster_6

16. Yapılandırmamız tamamlandığında cluster (kümeleme) hizmetimizin başarılı olduğu ve başladığı uyarısını alıyoruz.

RedHatCluster_7

17. Şimdi sunucularımızda “Cluster” hizmetimizin durumunu sorguluyoruz ve çalıştığından emin oluyoruz.

# clustat 
Cluster Status for koraykey-cl @ Mon Apr 22 00:40:06 2013
Member Status: Quorate

 Member Name                          ID   Status
 ------ ----                          ---- ------
 koraykey-cl1.localdomain             1 Online, Local
 koraykey-cl2.localdomain             2 Online
 /dev/sdb                             0 Online, Quorum Disk

18. Bu işlemlerden sonra çalışmakta olan “cluster” servimize kümeleme yapacağı hizmeti belirliyoruz. Biz senaryomuzda bir disk alanı yaratıp burada bilgi depolayacağımızı söylemiştik. Şimdi diskimizi cluster yapıda çalışacak şekilde yapılandırıyoruz.

-- Bu işlemleri sadece bir üye üzerinde yapıyoruz.

-- Yazımızın başında "/dev/sdc" isimli diskimizi bu iş için ayarlamıştık.

-- Öncelikle Fiziksel bölümü oluşturuyoruz.

# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created

-- Yarattığımız fiziksel bölüm üzerinde "vg_clsdisk" isimli "Volume Group" 
oluşturuyoruz.

# vgcreate -c y vg_clsdisk /dev/sdc
  Clustered volume group "vg_clsdisk" successfully created

-- Yarattığımız "vg_clsdisk" volume group üzerinde "lv_clsdisk" isimli
Logical Volume oluşturuyoruz.

# lvcreate -l 100%FREE -n lv_clsdisk vg_clsdisk
  Logical volume "lv_clsdisk" created

-- Diskimizi "gfs2" cluster dosya sistemi ile formatlıyoruz.

# mkfs -t gfs2 -p lock_dlm -t koraykey-cl:gfs2 -j 4 /dev/mapper/vg_clsdisk-lv_clsdisk
This will destroy any data on /dev/mapper/vg_clsdisk-lv_clsdisk.
It appears to contain: symbolic link to `../dm-2'

Are you sure you want to proceed? [y/n] y

Device:                    /dev/mapper/vg_clsdisk-lv_clsdisk
Blocksize:                 4096
Device Size                5.00 GB (1309696 blocks)
Filesystem Size:           5.00 GB (1309694 blocks)
Journals:                  4
Resource Groups:           20
Locking Protocol:          "lock_dlm"
Lock Table:                "koraykey-cl:gfs2"
UUID:                      0f6bb1cd-cd65-8cae-1eb9-4987367303c0

-- Bu işlemler her iki üyede yapılacaktır.

-- Sunucularımızda "Cluster Volume Manager" hizmetini başlatıyoruz.

# service clvmd start

Activating VG(s):   1 logical volume(s) in volume group "vg_clsdisk" now active
  2 logical volume(s) in volume group "vg_koraykey" now active
[  OK  ]

-- Şimdi 2. üyede diskimizin geldiğini kontrol ediyoruz.

# vgdisplay -v

    Finding all volume groups
    Finding volume group "vg_clsdisk"
  --- Volume group ---
  VG Name               vg_clsdisk
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  12
  VG Access             read/write
  VG Status             resizable
  Clustered             yes
  Shared                no
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               5.00 GiB
  PE Size               4.00 MiB
  Total PE              1279
  Alloc PE / Size       1279 / 5.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               3ssGeI-ixU0-3rqA-GrcY-JCsx-ZDYy-Dpp4VP

-- Diskimizin sunucu açılışında "mount" duruma gelebilmesi için "/etc/fstab"
dosyasına gerekli ayarları giriyoruz.

# vim /etc/fstab

-- Dosyasını açıp aşağıdaki satırı giriyoruz.

/dev/mapper/vg_clsdisk-lv_clsdisk /u01/data gfs2 defaults,noatime,nodiratime 0 0 

-- Sunucularımızda diskimizi bağlayabilmek için bir dizin yaratıyoruz.

# mkdir -p /u01/cluster/data

-- Diskimizi yeniden sunucularımızı yeniden başlatmadan "mount" ediyoruz.

# mount /u01/cluster/data

-- Şimdi testlerimizi gerçekleştirelim.

-- Birinci ve İkinci üyemizde "/u01/cluster/data" dizinimizi sorguluyoruz.

[root@koraykey-cl1 data]# ll
total 0

[root@koraykey-cl2 data]# ll
total 0

-- Görüldüğü gibi hiçbir dosya veya dizin yok.
-- Şimdi 1. üyeden bir dizin oluşturup ikinci üyede sorgulayalım.

[root@koraykey-cl1 data]# mkdir clusterdeneme

-- Sorguluyoruz.

[root@koraykey-cl1 data]# ls
clusterdeneme

-- Dizinimiz oluşmuş durumdadır.

-- Şimdi 2. üyemizde aynı dizinin oluşup oluşmadığı sorgulayalım

[root@koraykey-cl2 data]# ls
clusterdeneme

-- Görüldüğü gibi 1. üyede oluşturduğumuz dizinimiz 2. üyede görünüyor.
Her iki sunucumuzda aynı diski kullabilir durumdadır.

19. Diskimizi yapılandırdıktan sonra “Homebase” sekmesinden “koraykey-cl” üzerinde tıklayarak “Failover Domains” menüsüne geçiyoruz.

RedHatCluster_8

20. Karşımıza çıkan ekranda bir “FailOver Domain” ismi belirliyoruz. Aşağıdaki gibi yapılandırmamızı tamamladıktan sonra “Create” düğmesine tıklayarak “Failover Domain” yapılandırmamızı tamamlıyoruz.

RedHatCluster_10

21. Sunucumuzda “Failover Domain” yaratma işlemimiz tamamlandı. Sunucu önceliği ve yapacağımız diğer ayarları bu ekranımızdan yapabiliriz.

RedHatCluster_11

22. Aynı konsolumuzda bulunan “Resources” menüsünden “Add” düğmesine tıklıyoruz ve data diskimizi atama işlemine başlıyoruz.

RedHatCluster_12

23. Kaynak olarak diskimizin bilgileri yazıyoruz aşağıdaki gibi yapılandırmamız tamamlandığında “Submit” düğmesine tıklıyoruz.

RedHatCluster_13

24. Kaynak ayarlama işlemimiz tamamlandı. Aşağıdaki ekranı gördükten sonra yapacağımız başka bir ayar yoksa bir sonraki adıma geçebiliriz.

RedHatCluster_14

25. Bu aşamamızda “Service Groups” tanımlamamızı yapıyoruz. Konsolumuzda “Service Groups” menüsüne tıklıyoruz.

RedHatCluster_15

26. Açılan yönetim konsolunda “Service Name” vb. ayarlarımızı aşağıdaki gibi yapılandırıyoruz.

RedHatCluster_16

27. Sunucumuzda başarılı bir şekilde “Service Groups” yaratıldı. “Add” düğmesine tıklayarak “Global Resources” seçeneklerinden oluşturduğumuz “FileServer” kaynağını seçiyoruz.

RedHatCluster_18

28. Karşımıza gelen ekranda disk bilgilerimiz vb. yapılandırmamızı kontrol ettikten sonra “Apply” düğmesine tıklıyoruz.

RedHatCluster_19

Sunucularımızda Cluster (Kümeleme) Servisimiz hazır ve çalışır durumda. Şimdi uygulamamızın veya dosya sunucusu olarak kullanılacak cluster alanımızı servis edebiliriz. Eğer sunucularımız Dosya sunucusu olarak kullanılacaksa “Linux İşletim Sistemlerinde Samba/Cifs Sunucu Yapılandırması” makalemizden yararlanabilirsiniz. Eğer bir uygulama kullanacaksa bu alanı gösterebiliriz. Tabiki kullanacağımız uygulamaların cluster desteği olması gerekmektedir. Bu makalemizdeki adımlar “Red Hat Enterprise Linux 6.4” işletim sisteminde denenmiştir. Diğer Red Hat türevi (Oracle Enterprise Linux, CentOS vb.) işletim sistemleriyle uyumludur.

Başka bir makalede görüşmek üzere…

Bu yazı Unix / Linux kategorisine gönderilmiş ve , , , , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.