linux-enterprise-cluster
İçindekiler
1. Cluster Yapısı & Türleri
a. Yüksek Erişilebilirlik (High Availability)
b. Yük Dağılımlı (Load Balancing)
c. Yüksek Performans (High Performance)
d. Cluster İçin Gerekli Temel Bilgiler
2. Node’ ların Kurulumu & Veri Depolama Bağlantısı
a. Network Power Switch Konfigürasyonu
b. SAN Anahtar Konfigürasyonu
c. Veri Depolama Ünitesi(Storage) Konfigürasyonu
d. Multipath Konfigürasyonu
e. Bonding / Teaming Konfigürasyonu
3. Cluster Konfigürasyonu İçin Sunucuların Hazırlanması
4. Cluster Konfigürasyonu &Yönetimi
a. Cluster Oluşturma(Create)
b. Quorum Disk Oluşturma (opsiyonel)
c. Data Diski Oluşturma
d. Resources
e. Failover Domains
f. Fence Devices
g. Services Groups
h. Cluster Konfigürasyon Dosyasını İnceleme
i. Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma
5. Cluster Konfigürasyonu &Yönetimi (Komut Satırı)
a. Cluster Oluşturma(Create)
b. Cluster’a Node Ekleme/Kaldırma
c. Fence Devices
d. Failover Domains
e. Resources
f. Service Groups
6. Cluster Yedekleme & Geri dönüş (Backup & Restore)
a. Cluster konfigürasyon dosyasının yedeğini alma & geri dönüş
b. Luci(Grafik arayüz) konfigürasyon yedekleme & geri dönüş
7. Cluster Konfigürasyonunda Sorun Giderme
(Troubleshooting)
8. Kavramlar
9. Ekler
Ek-1: Linux Yöneticisi İçin Komutlar
Ek-2: MBR ve GPT disk türlerinin karşılaştırması
Ek-3: Default Multipath Konfigürasyon Seçenekleri
linux-enterprise-cluster
BÖLÜM – 1
Cluster Yapısı & Türleri
Cluster kelime anlamı kümedir. Bilişim dünyasında birden fazla donanımın
aynı anda tek bir çatı altında bereber çalıştırıldığı teknolojidir. Amaç SPOF
(Single Point Of Failure) tek bir noktada oluşabilecek hatalara karşı önlemler
almaktır.
Bunlara örnek vermek gerekirse:
İşletim sisteminin çökmesi
Üzerinde çalışan uygulamanın kapanması
İstenmeyen ama yapılan servis kesintileri. Örneğin çekirdek
güncellemesi
Donanımsal kartlar, portlar ve kablo gibi vb. parçalarda olabilecek
arızalar
... vb
İş sürekliliği çözümleri, olası bir arıza veya felaket durumunda sistemlerin
kesintisiz bir şekilde çalışmasını sağlamaktır. Kesinti durumunda başınızı
ağrıtacak uygulamalarınıza önceden tedbir almakta diyebiliriz. Günümüzde
sistemleri incelediğimizde ise en yaygın olarak kullanılan iş sürekliliği çözümü
olarak, “Cluster” sistemler gelir. Cluster sistemler yapı olarak geniş bir kapsamda
farklı amaçlar için farklı çözümler sunabilmektedir. Bu çözümler arasından sıkça
kullanılan ve yüksek erişilebilirlik olarak adlandırılan cluster çözümü üzerinde
duracağız. Yapacağımız çalışmalarıda uygulamalı olarak gösteriyor olacağız.
Uygulama olarak cluster kurulumu sonrasında mysql veritabını’nımızı cluster
üzerinde yüksek erişilebilirlik (HA) şeklinde kullanmayı planlıyorum. Sizlerde
kendi istediğiniz uygulamalarınızı cluster sistemler üzerinde çalıştırabilirsiniz.
Kesintisiz bir iş sürekliliği çözümü olarak cluster sistemler önem arz etmektedir.
Cluster türleri genel olarak 3 grupta toplanır:
A. Yüksek Erişilebilirlik (High Availability): Bu yapıda amaç verilen
hizmetin kesintiye uğramamasıdır. Oluşturulan cluster yapısı ile bir ya da
birden fazla yedek sunucu çalışır ve hazır vaziyette bekletilip, aktif olarak
çalışan sunucu’nun kesintiye uğraması durumunda devreye girmesi
sağlanır. Böylece hizmet kesintiye uğramaz.
B. Yük Dengeleme (Load Balancing): Bu yapıda amaç yapılacak iş
yükünün cluster’daki sunucular arasında iş yoğunluğu gözetilerek yük
dağılımının yapılmasıdır. Bundan dolayı tüm sunucular aktif durumdadır.
Clusterdaki sunuculardan birinin kesintiye uğraması durumunda iş yükü,
clusterda kalan sunucular arasında dağıtılır.
C. Yüksek Performans Hesaplama (High Performance Computing):
Yüksek performans hesaplama işlerinde kullanılan cluster yapısıdır.
Yapılacak iş parçalara bölünerek sunuculara gönderilir ve sunuculardan
gelen sonuçlar tekrar birleştirilerek iş tamamlanır. Yük dengeleme cluster
modelinde her bir sunucuya bir iş verilmesi söz konusuyken; bu yapıda
tek bir işin parçalara bölünerek her bir sunucuya gönderilmesi ve
sunuculardan gelen sonuçların birleştirilmesiyle yapılan tek bir iş söz
konusudur. Bu cluster yapısı genel olarak bilimsel hesaplama ve
araştırmaların yapıldığı yerlerde kullanılır.
D. Cluster İçin Gerekli Temel Bilgiler
Linux, cluster mimarisinde yüksek erişilebilirlik(HA) oluşturmak istediğimiz
kaynakları, konfigürasyon sırasında bize sunmaktadır.(Örn: Apache, Mysql,
Oracle, NFS vb.) Linux’un bize sunduğu bu uygulamaların dışındaki uygulamaları
da kendi yazacağımız scritplerle yüksek erişilebilirlik(HA) çözümleri
oluşturabiliriz. Cluster sistemlerin kurulum-konfigürasyonunda yedekli bir yapının
oluşturulması(bonding,multipath,donanımsal vb.) ve sistemin kesintisiz
çalışmasını sağlayacak çalışmaların tamamını kapsayacak şekilde bir çalışma
yapılmıştır. Veri disklerinin oluşturulmasında dikkat edilmesi gereken GPT ve
MBR formatlı disk yapılarından, cluster mimarisinin yedekleme-geri
dönüş(backup-recovery) konularına kadar baştan sona cluster yapılandırmasını
gerektiren bilgilerden bahsedilmiştir. Son olarakta oluşturulan Cluster
Konfigürasyonunda Sorun Giderme(Troubleshooting) ile ilgili temel
karşılaşılabilecek sorunlardan ve yöntemlerden bahsedilmiştir.
Yapılan çalışma gerekli bütün komutları ve sistemi kurmak için görsellik
açısından çıktılarını içermektedir.
Genel olarak aşağıdaki konular üzerinde durulmuştur.
Linux cluster çözümleri
Node’ların kurulumu ve Veri depolama bağlantısı
Multipath konfigürasyonu
Bonding / Teaming konfigürasyonu
Ext4 ve gfs2 dosya sistemlerine bakış
MBR ve GPT formatlı disk oluşturma işlemleri (parted komutu)
Linux cluster yedekleme ve geri dönüş(backup-recovery)
Cluster Konfigürasyonunda Sorun Giderme (Troubleshooting)
Cluster sistemler kritik uygulamalar için güvenirlilik, ölçeklenebilirlik ve
ulaşılabilirlik sağlar. Bir failover(belirli bir donanım parçasının çökmesinden
sonra ağa erişimin kesintiye uğramamasını sağlamak için kullanılan fazlalık)
yapıda cluster kurmak için temel adımları aşağıdaki gibi sıralayabiliriz;
a. Donanım gereksinimleri ve kurulumlarının yapılması
i. Linux işletim sisteminin kurulumunun yapılacağı
sunucuların belirlenmesi (en az 1GB RAM)
ii. Ağ anahtarı(Network Switch), cluster’a erişim için gerekli
iii. Akıllı PDU(Network power switch), kurumsal seviyede
bir clusterda fencing gerçekleştirmek için gerekli
iv. SAN anahtar(fiber anahtar), fiber kanallı veri depolama
ünitesine erişim için gerekli, diğer bir seçenek ISCSI’ dir.
(Opsiyonel) SAN anahtarınız olmasada sunucularınızı,
veri depolama ünitesine direk bağlayabilirsiniz.
v. Veri depolama ünitesi(Storage), disk paylaşımını
yapacağımız, SAN mimaride bir veri depolama ünitesidir.
b. High Availability yazılımlarının kurulması
Kurulumu iki yöntemle yapabilirsiniz;
vi. Linux işletim sistemleri kurulumunu yaparken cluster için
gerekli paketlerin kurulumunu yapabilirsiniz.
vii. Grafik arayüzden(Conga), cluster için gerekli yazılımları
kurabilirsiniz.
c. Cluster konfigürayonlarının yapılması
Konfigürasyonları üç ayrı yöntemle yapabilirsiniz;
viii. Grafik arayüz(Conga), cluster konfigürasyonlarını
yapabileceğiniz ve yönetebileceğiniz kullanıcı arayüzüdür.
ix. ccs komutu ile, cluster konfigürasyonlarını yapabilir ve
yönetebilirsiniz.
x. Doğrudan temel bir cluster.conf dosyası belirleyerek,
üzerinde istediğiniz çalışmaları yapabilirsiniz.
Not: Cluster kurulumunu RedHat Enterprise Linux işletim sistemleri üzerine
kuruyor olacağız. Sizlerde isterseniz CentOS, Oracle Enterprise Linux vb. işletim
sistemlerine kurabilirsiniz.
N ot : RedHat Enterprise Linux işletim sistemleri dökümanlarının tamanına
aşağıdaki belirtilen linkten ulaşabilirsiniz.
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/
Not: CentOS ve Oracle Enterprise Linux işletim sistemlerini ücretsiz olarak
indirebilirsiniz.
Not: Conga cluster yönetimi için kullanılabilecek grafik arayüzdür.
Not: Cluster Sunucu(node) sayısı High Availability ile en fazla 16 dır.
Not: Linux cluster ile ilk defa uğraşanlar fence aygıtının ne olduğunu sorabilirler.
Fence aygıtı veri bütünlüğü için, sadece bir node üzerinde çalışan cluster
servislerinin herhangi bir sorun durumunda diğer node üzerine geçişini sağlayan
ve kesintisizliği sağlamak adına veri bütünlüğünü garanti etmek için kullanılır.
N ot : Redhat Enterprise Linux Cluster için fence aygıtlarından hangisinin
kullanılacağını yada kullanıldığının bilgisi ve uygunluğu
http://www.redhat.com/cluster_suite/hardware/ bu link üzerinden kontrol
edilmelidir. Fence device seçiminde önerilen network power switch veya SAN
anahtar kullanılmasıdır.
linux-enterprise-cluster
BÖLÜM – 2
Node’ ların Kurulumu & Veri Depolama Bağlantısı
Öncelikle kurucağımız sistemin no-single-point-of-failure(tek bir noktadan
olabilecek hataya karşı sistemin çalışmasını sağlamak) olması için cluster
sistemin aşağıda belirtildiği gibi yedekli bir yapıda oluşturulması gereklidir.
Veri depolama ünitesi çift denetçili(dual-controller) olmalıdır.
Ağ portları yedekli bir şekilde yapılandırılmalıdır. (bonding)
Sunucu ve veri depolama arasındaki bağlantılar(fiber yada iscsi)
yedekli bir şekilde yapılmalıdır.
Sunucu üzerindeki işletim sistemlerini kuracağımız diskler korumalı
bir şekilde yapılandırılmalıdır. (Raid 1,3,5,6 konfigürasyonları)
Veri diskini oluşturacağımız veri depolama ünitesi üzerindeki diskler
korumalı bir şekilde yapılandırılmalıdır. (Raid 1,3,5,6
konfigürasyonları yada disk pool mantığı)
Sunucu ve veri depolama ünitesi güç kabloları yedekli bir şekilde
bağlantıları yapılmalıdır.
SAN anahtar varsa, yedekli bir şekilde yapılandırılmalıdır.
Fence Device olarak Akıllı PDU (Network power switch)
kullanıyorsanız yedekli olması için 2 adet olmalıdır.
Burada belirttiğimiz yedekli yapının, cluster kurmak için zorunlu olduğu
anlamına gelmemelidir. Sadece yapılacak sistemin kapsamlı bir şekilde
yedekliliğinin sağlanmasıyla kesintisiz bir iş sürekliliği çözümü olması
düşünülmüştür.
İlk olarak iki adet sunucu üzerine Linux işletim sistemleri kurulumlarını
gerçekleştiriyoruz. Kurulumu yaparken cluster için gerekli bir çok paket
bulunmaktadır bunlarla sonradan uğraşmamak için, kurulum sırasından “High
Availability” seçeneğini işaretlemek gerekiyor. Bunun dışında kurulacak Linux
işletim sistemini özelleştirebilir istediğiniz paketleri kurarak istemediklerinizi
çıkartabilirsiniz. Ben gerektiğinde desktop arayüzünü kullanmak için “Desktop”
seçeneğini seçiyorum, sonrasında “High Availability” seçeneğinide işaretledikten
sonra, cluster olarak çalıştıracağım “mysql” paketlerini de ekleyerek işletim
sistemleri kurulumlarını gerçekleştiriyorum.
Not: Cluster yapıda “node” olarak tabir ettiğimiz aslında bizim cluster için
kullandığımız sunucularımızdır. Bundan sonraki cluster ile ilgili yerlerdeki
ifadelerde “sunucu” yerine “node” ifadesini görebilirsiniz.
Node’ların kurulumunu kısaca aşağıdaki gibi sıralayabiliriz;
a. Sunucu disklerini Raid1 yapıyoruz.
b. Linux işletim sistemi kurulacak ve kurulum içerisinde boot dizin ile
beraber;
i. / dizini 50GB
ii. Swap 16GB
iii. /test dizini geri kalan tüm kapasite
c. “ip” adreslerinin belirlenmesi ve verilmesi
d. “Desktop” seçeneğinin işaretlenmesi
e. “High Availability” seçeneğinin işaretlenmesi
f. “Mysql” paketlerinin eklenmesi
Buradaki amaç cluster kurumları olduğu için, ayrıntılı olarak cluster
konfigürasyonlarına ve yönetimine değineceğiz. Bundan dolayı işletim sistemleri
gibi kurulumların ayrıntılarına girmiyoruz.
Not: Eğer subscription ve support alarak RedHat Enterprise Linux 6 ile Cluster
Kurulumlarını gerçekleştirmek istiyorsanız RedHat işletim sistemi ile beraber
gerekli Add-On ‘lar:
High Availability : Redhat Cluster kurabilmek için gereklidir.
Resilient Storage : GFS Clustered dosya sistemi (File System) için gereklidir.
Burada Resilient Storage Add-On , High Availability Add-On‘u da içermektedir.
Sadece Resilient Storage Add-On alınarak GFS2 dosya sistemli (File System) bir
RedHat Cluster kurabilirsiniz. Eğer Cluster ortamınızda GFS2 olmayacaksa
sadece High Availability alınması yeterli olacaktır.
Not: RedHat Enterprise Linux 6 tek bir sunucu üzerinde dosya sistemi (File
System) olarak GFS2 desteklemez.
Not: GFS2 dosya sistemi (File System) oluşturulduktan sonra, dosya sisteminin
boyutunu azaltamazsınız ancak oluşturmuş olduğunuz dosya sisteminin boyutunu
“gfs2_grow” komutuyla arttırabilirsiniz.
Not: Linux işletim sistemleri kurulumlarını, sanallaştırma sistemleri üzerinde
yapıyorsanız, sanallaştırmanın clone’lama özelliğini kullanılarak ikinci
makinenizi clone’lama mantığı ile kısa bir sürede gerçekleştirebilirsiniz. Fakat
burada dikkat etmeniz gereken nokta iki makinenin de isminin aynı olmasıdır.
Clone’lama bittikten sonra ikinci makinenizin hostname’ini aşağıdaki gibi
değiştirmeniz gerekmektedir.
Örneğin birinci makinemize node1 ismini vermiştik. Şimdi ikinci
makinemizin hostnameni node2 yapacağız. Clone’ladığımız makineye
bağlanıyoruz ve aşağıdaki komutlarla hostname’ini node2 olarak değiştiriyoruz;
# vi /etc/sysconfig/network
# reboot
Bu sistemler 2 adet Rhel6_Node1 & Rhel6_Node2olarak aşağıdaki şekil
2.1’deki gibi görülmektedir. Sunuculara veri depolama ünitesi (storage) üzerinden
cluster’ın kullanacağı ortak alan diyeceğimiz bir alan verip, her iki linux sunucu
üzerinden “fdisk -l” komutuyla ortak olanı görüp görmediğinizi kontrol
edebilirsiniz. Ortak alan olarak verilen diskleri görmüyorsanız dert etmeyin
okumaya devam edin.
Şekil 2.1 Sanallaştırma üzerinde örnek uygulama olarak kurduğum cluster
node’ları
Biz sistemimizi fiziksel yapı üzerinde kuracağımız için sanallaştırma ile ilgili
gerekli bilgileri kısaca vermiş bulunuyoruz.
Öncelikle kuracağımız sistemdeki gerekli cihazları belirtelim;
2 adet Sunucu # Linux cluster için 16’ya kadar çıkabilir
1 adet Veri Depolama ünitesi (dual controller)
1 adet SAN anahtar (opsiyonel)
2 adet Network power switch(Akıllı PDU) (Cluster failover yapısı
için gereklidir.)
2 adet ağ anahtarı (iç ağ ve dış ağ) # bir tane olmasıda
yeterlidir.
Ve gerekli güç, ağ, fiber kablolar..
Kuracağımız yapıyı aşağıdaki şekil 2.2’deki gibi resmedebiliriz.
Şekil 2.2 Kuracağımız sistemin fiziksel yapısının gösterimi
Fiziksel olarak kurulumu gerçekleştirmek için gerekli adımlar;
Sunucuları fiber kablolar ile SAN anahtar üzerinden yada SAN
anahtarımız yoksa doğrudan yedekli olarak veri depolama ünitesine
bağlıyoruz. Yukardaki şekilde görüldüğü üzere, biz doğrudan
bağlantıları gerçekleştirdik.
Sunucuların ağ(network) yedekliliği (bonding) için2 adet ağ
portunu iç ağ anahtarına bağlıyoruz. Yukardaki şekilde görüldüğü
üzere iç ağ ve dış ağ yapılarınız varsa herbir sunucuyu dış ağ’a da
bağlamalısnız.
Sunucuların varsa yönetim portlarınıda ağ anahtarına bağlayıp ip
adreslerini veriyoruz. Herhangi bir sıkıntıda uzaktan sunucularımıza
bağlanıp işlemlerimizi yapabilmek için gereklidir. Yukardaki
şekilde karışıklığa yol açmaması için gösterilmemiştir.
Sunucularıngüç kablolarını (power) network power switch’imize
bağlıyoruz. Eğer network power switch olarak adlandırılan akıllı
PDU üzerinde yer yoksa, veri depolama ünitesinin güç kablosunu
normal bir enerji hattınada bağlayabilirsiniz. Fence device için
önemli olan sunucuların güç kablolarının network power switch
üzerine bağlanmasıdır.
Network power switch ve veri depolama ünitesininde yönetimini
sağlamak için, iç ağ anahtarına bağlantılarını gerçekleştiriyoruz.
A. Network Power Switch Konfigürasyonu
Fence device tercihimizi yaparken, Bölüm-1’de belirttiğimiz link üzerinden
baktığımızda, fence device olarak kullanılabilecek aygıtları görebiliriz. Genel
olarak fence device olarak network power switch kullanımı tavsiye edildiğinden
bizde verilen link üzerinden belirtilen, apc network power switch kullanımını
tercih ediyoruz.
Apc network power switch konfigürasyonu için, console üzerinden network
power switch’e bağlanıp ağ yapısından statik bir ip adres verilmesi yeterlidir.
Console dan bağlanınca default kullanıcı: “apc” ve şifre: “apc” girdikten sonra
network ayarlarına girip statik ip verme işlemini gerçekleştiriyorsunuz. Belirli bir
ip adres verildikten sonra eğer gerekirse apc network power switch grafik
arayüzüne http://ip_adress bağlanıp istediğiniz ayarları yapabilirsiniz.
B. SAN Anahtar Konfigürasyonu;
Sisteminizde SAN anahtar(switch) varsa; SAN anahtarlar default olarak
üzerlerinde zone konfigürasyonları olmadan gelirler ve SAN anahtarı
çalıştırdığınız andan itibaren üzerinden geçen tüm fiber trafiğine izin verirler.
SAN anahtarların bu şekilde kullanılması önerilmemektedir. Çünkü SAN
anahtarlar bu şekilde zone konfigürasyonları yapılmadan kullanıldığında
performans problemlerine yol açabilirler. SAN anahtar üzerindeki bir initiator
tarafından gönderilen scsi bus reset komutu switch üzerinde ki diğer tüm initiator
ve target tarafından alınacağı için fiber oturumlar sonlanarak tekrar başlamak
zorunda kalabilir. SAN yapınızda problemli bir HBA(Host Bus Adapter)
bulunması durumunda size beklenmedik problemler çıkartabilir. Bu tarz
problemlere geçit vermemek için mutlaka SAN anahtar üzerinde zone
konfigürasyonu yapılmasını tavsiye ediyoruz.
Zone konfigürasyonu iki farklı şekilde yapılabilir;
Software zoning: software zone yaptığında fiziksel olarak hangi port’a hangi
kabloyu taktığın önemli değildir.
Hardware zoning: hardware zone yaparsan, SAN anahtar üzerindeki herbir port
üzerinden zone yaptığın için, SAN anahtar üzerinde hangi porta nereden gelen
fiber kabloyu taktığını bilmelisin. Aksi takdirde yanlış kablolamada sistem
çalışmaz.
SAN anahtar konfigürasyonu üç aşamada gerçekleştirilir;
Alias oluşturma
Zone oluşturma
Yapılan konfigürasyonların kaydedilmesi
Not: Zoning yaparken dikkat edilmesi gereken nokta, her bir zone içerisinde
sadece 1 adet initiator ve bu initiator tarafından kullanılacak bütün target’lar
girilmelidir. Yani her bir sunucudaki her bir HBA portu için zoning yapılması
önerilir.
SAN anahtar üzerinde yapılacak konfigürasyonları hemhttp://ip_adress üzerinden
bağlanıp grafik arayüzden hemde komut satırından yapabilirsiniz.
Aşağıda Brocade SAN anahtar üzerinde zoning işlemini yapabilmek için gerekli
komutları ve örnekleri bulabilirsiniz.
# switchshow # portları ve bu portlara bağlı wwn’leri gösterir.
# alishow # mevcut alias’ları gösterir.
# alicreate “node1_hba1”, “xx:xx:xx:xx:xx:xx:xx:xx” #wwn’lere alias
atama işlemi
# nodefind “xx:xx:xx:xx:xx:xx:xx:xx” #ilgili wwn’a ait yapılan
tanımlamaları görebiliriz.
# zonecreate “ZN_node1_hba1_ControllerA_ControllerB”,
“node1_hba1;ControllerA_1; ControllerB_1” # zone oluşturma işlemi, ZN_
ile başlayan kısım zone’a verdiğimiz isimdir. İkinci kısım ise bu zone içerisinde
bulunması gereken alias’lardır.
# cfgsave # Yapılan işlemleri kaydediyoruz.
# cfgcreate “LAB1_2601214”, “ZN_node1_hba1_ControllerA_ControllerB”
# SAN anahtar üzerinde aktif bir konfigürasyon yoksa, yaptığımız konfigürasyonu
SAN anahtar üzerinde oluşturma işlemi, LAB1_26012014 çalışacak olan
konfigürasyonun ismi, ZN_ ile başlayan ise içerisine dahil ettiğimiz zone ismidir.
# cfgadd “LAB1_2601214”, “ZN_node1_hba1_ControllerA_ControllerB” #
SAN anahtar üzerinde aktif bir konfigürasyon varsa, yeni oluşturduğumuz zone’u
konfigürasyona ekleme işlemi
# cfgenable “LAB1_2601214” # LAB1_26012014 olarak yeni
oluşturduğumuz yada değişiklik yaptığımız konfigürasyon üzerinde yapılan
işlemlerin aktif olmasını sağlayan komut
Yukardaki komutlarla nasıl SAN anahtar üzerinde konfigürasyon yapıldığını
anlattık. Sizlerde bu şekilde konfigürasyonlarınızı yapabilirsiniz. Bunun dışında
SAN anahtarla ilgili aşağıda kullanışlı birkaç komut daha verdikten sonra SAN
konfigürasyon bölümünü tamamlıyoruz.
# cfgshow # SAN anahtar üzerindeki konfigürasyonları gösterir.
# switchname # SAN anahtara isim verilmesini sağlar.
# ipaddrset # SAN anahtara ip verilmesi sağlar.
# ipaddrshow # ip adresi görüntüleme yi sağlar.
# date # tarih bilgilerini güncelemeyi sağlar.
# sysshutdown # SAN anahtarı güvenli bir şekilde kapatmayı sağlar.
C. Veri Depolama Ünitesi(Storage) Konfigürasyonu;
Veri depolama ünitesi yönetim arayüzüne bağlanıyoruz;
Cluster için 10GB’lık veri (data) lun oluşturuyoruz.
Cluster host grubu oluşturuyoruz.
Host grubun içerisine cluster yapacağımız node’ları dahil ediyoruz.
Cluster host grubuna 10GB’lık lun’u map ediyoruz.
Not: Veri depolama ünitesi tarafında yapılacakları her üretici firmanın yönetim
arayüzü farklı çalışabileceği için, yapılacak işlemleri mantık olarak anlatıp
geçmiş bulunuyoruz.
Linux cluster host grubu olarak oluşturduğumuz node1 ve node2 host grubuna
10GB data lun’u map ettiğimize göre. Node’lar yeniden başlatıldığında 10GB’lı
data lun’u “fdisk –l” komutu ile node’lar üzerinde görebilir olacağız.
Peki sunucularımızı yeniden başlatmak istemesek… Ne Yapabiliriz?
Sunucuları Yeniden Başlatmadan (Reboot) Lun Tanıtma İşlemi
a. Cluster sunucularına veri depolama ünitesi üzerinden 10GB lun
vermiştik.
b. Sunucular üzerinden “fdisk –l” komutunu çalıştırdığımda herhangi bir
şey gözükmüyor.
c. Veri depolama ünitesi üzerinden verdiğim lun’u sunucuları yeniden
başlatmadan görebilmek adına aşağıdaki komutu çalıştırabilirsiniz.
host0 dan başlayarak ne kadar host varsa çalıştırmak gerekiyor.
# echo "- - -" > /sys/class/scsi_host/host0/scan
Şekil 2.3 Hostları taramak için echo komutunun kullanımı
d. Şimdi tekrar “fdisk –l” komutunu çalıştırdığımda 10GB verdiğim
lun’u aşağıdaki şekil 2.4’deki gibi görüyoruz.
Şekil 2.4 “fdisk –l” komutunun çıktısının bir kısmı
Not: Şekil 2.4’te görüldüğü üzere diskimizi yedekli bağladığımız için 2 yoldan
gözükmektedir. Bundan dolayı multipath driverlerın yüklenmesi ve tanımlanması
gerekmektedir. Eğer tek yoldan bağlantı yaptıysanız multipath driverlarını
yüklemenize gerek yoktur.
e. Cluster’a dahil olacak bütün node’lar üzerinde disk tanıtma işlemlerini
bu şekilde yapılması gerekmektedir.
Not: Sistemde oluşan herhangi bir karışıklıktan dolayı hala diskinizi
göremiyorsanız. Aşağıdaki komutta belirtildiği gibi “disk_isimlerini” taratıp
“fdisk –l” komutu ile kontrol ettiğinizde diskinizi görüyor olacaksınız.
# echo "- - -" > /sys/class/scsi_disk/”disk_isimlerini”/device/rescan
Not: Node’ları yeniden başlatmadan (reboot) diskimizi tanıtma işlemindeki "- - -"
ne anlama geldiği şuan aklınıza gelmiş olabilir.
Cevabını merak ediyorsanız okumaya devam edin…
Buradaki üç çizgi channel, SCSI target ID ve LUN anlamına gelmektedir.
Bunlar üzerinden sistemdeki herşeyi tarama işlemi yapılıyor.
D. Multipath Konfigürasyonu
Failover mimaride bir sistem kurduğumuz için cluster’daki sunucularımız,
veri depolama ünitesinden verilen disk alanını birden fazla yoldan görecektir.
Bundan dolayı multipath ayarlarının sunucularımız üzerinde yapılması
gerekmektedir.
Peki neden gereklidir ?
Multipath konfigürasyonu olmadan aynı disk alanını işaret eden iki farklı
aygıt dosyasını kullanarak bir okuma ya da yazma işlemi yaptığımızda verilerin
sağlamlığı tehlikeye atılmış olur. Multipath bunun gibi geçersiz okuma ve yazma
mekanizmasını devre dışı bırakarak, verilerin sağlıklı ve güvenli bir şekilde
tutulmasını mümkün kılar. Bunu sağlamak için her bir multipath aygıtın sahip
olduğu değişmeyen, benzersiz bir kimlik kullanır ki buna WWID (World Wide
Identifier) denir. WWID sistemden sisteme değişen değerlerden (sda, sdb gibi)
tamamen farklı olarak her durumda ve her bilgisayarda aynı paylaşım için aynı
değeri verir. Ön tanımlı olarak bir multipath aygıt bu ismi kullanır. Ancak
kullanıcılara kendilerinin oluşturacağı başka isimleri de kullanabilme hakkı veren
user_friendly_names seçeneği de mevcuttur. Multipath aygıtlarınızın kalıcı bir
şekilde sistemde bağlı kalmasını sağlamak için user_friendly_names özellğinin
devre dışı bırakılması önerilir. User_friendly_names özelliği devre dışı iken her
hangi bir bilgisayarda oluşturulacak multipath, default olarak aygıtın WWID
değerini kullanacağı için her bilgisayarda aynı multipath aynı isme/değere sahip
olacaktır.
Şekil 2.5 Multipath konfigürasyonun gerekliliği
DM-Multipath (Device-Mapper Multipath) aşağıdaki özellikleri sağlaması
için kullanılabilir;
Redundacy (Fazlalık)
DM-Multipath aktif-pasif konfigürasyonda failover sağlar yani herhangi bir
I/O yollarından (kablo, anahtar yada kontroller) birinde sorun olduğunda,
DM-Multipath diğer alternatif yollardan birini kullanır.
Improved Performance (geliştirilmiş performans)
DM-Multipath aktif-aktif olacak şekilde konfigürasyonu yapılabilir. Bu
durumda I/O için herhangi bir zamanda yolları beraber kullanarak
performans sağlar.
DM-Multipath komponentleri;
Tablo 2.1 DM-Multipath Komponentleri
DM- Multipath kurulum ve konfigürasyonu:
Yeni bir aygıt multipath tarafından algılandığında onu “/dev/..” dizini altında iki
ayrı yerde görebilirsiniz:
“/dev/mapper” altında bulunan aygıtlar boot işleminden hemen
sonra sistemde oluşturulan aygıtlardır. Bu aygıtları multipath
aygıtlara erişirken kullanacağız.
“/dev/dm-n” altında bulunan herhangi bir aygıtı kullanmanız
önerilmez. Bu aygıtlar sistem tarafından dahili kullanım içindir.
Node1 ve node2 makinelerimizi failover şeklinde veri depolama ünitesine fiber
ile bağlamıştık şimdi aşağıdaki şekillerdeki gibi wwn numaralarını görebiliriz.
Şekil 2.6 Node1 üzerinde wwn numaralarını gösteren komut ve çıktısı
Şekil 2.7 Node2 üzerinde wwn numaralarını gösteren komut ve çıktısı
Adım 1:
Device-mapper-multipath rpm paketini aşağıda verildiği gibi yüklüyoruz.
Bu paketleri cluster’a dahil edeceğimiz node1 ve node2 makinelerinin her
ikisinede yükledikten sonra adım adım aşağıda anlatıldığı gibi cluster’daki bütün
node’lar üzerinde multipath konfigürasyonunu yapıyoruz.
# rpm -ivh device-mapper-multipath-libs-0.4.9-72.el6.x86_64.rpm
# rpm -ivh device-mapper-multipath-0.4.9-72.el6.x86_64.rpm
Şekil 2.8 multipath paketlerini yüklemek için çalıştırılan komutların çıktısı
Adım 2:
Eğer /etc/multipath.conf dosyasını düzenlemek için bir sebebin yoksa default
DM-Multipath ayarlarını kullanmak failover için yeterli olacaktır. Bizde default
ayarları kullanacağız.
# mpathconf --enable --with_multipathd y
Şekil 2.9 mpathconf komutunun çalıştırılması
# chkconfig --list multipathd
Şekil 2.10 multipath komutunun her durumda çalışırlılığının kontrol edilmesi
Adım 3:
Multipath servisini user_friendly_names seçeneğini devre dışı bırakarak
başlatalım.
# mpathconf --enable --user_friendly_names n --with_multipathd y
# mpathconf
Şekil 2.11 mpathconf komutu ile multipath ayarlarının gösterimi
Adım 4:
Multipath servisini başlatıyoruz
# service multipathd start
Şekil 2.12 multipath servisinin başlatılması
# multipath -ll
Şimdi sistemimizin bağlı olduğu iki blok aygıtı (/dev/sdb ve /dev/sdc) aynı
kaynak olarak görüp görmediğine bakalım: aşağıda görüldüğü gibi herbir aygıt
artık tek bir kaynak olarak gözüküyor.
Şekil 2.13 multipath çalışırlılığının kontrolü
Yukarda şekilde görüldüğü gibi yolların durumu ready yada ghost ise multipath
çalışıyordur. Eğer yollar faulty yada shaky olarak gözüküyorsa multipath
çalışmıyordur.
Online_satus için olası değerler running ve offline dır. Eğer offline gözüküyorsa
SCSI device disable olmuş durumdadır.
Sistemimiz olması gerektiği gibi iki blok aygıtı tek bir aygıt olarak algılamış.
Yukarıdaki şekil 2.13’de görüldüğü üzere WWID değeri
(3600axxxxxxxxxxxxxxxxxxxxxx), sunucunun kendini tanıtmak için gönderdiği
string, paylaşım tipi, kapasite ve yazma politikası (wp=rw) görülüyor.
Adım 5:
Aygıtımız artık /dev/mapper altında WWID numarası ile görünecektir:
# ls -l /dev/mapper
3600axxxxxxxxxxxxxxxxxxxxx
Fakat mount işlemlerinde WWID yerine, bir alias tanımlayarak kullanmak
isterseniz multipath konfigürasyon dosyasında aşağıda belirtildiği gibi alias
tanımlaması yapılmalıdır;
# vi /etc/multipath.conf
multipaths {
multipath {
alias cluster_disk
wwid 3600axxxxxxxxxxxxxxxxxxxxx
}
}
# service multipathd restart
Artık ortak disk alanımız “/dev/mapper” altında cluster_disk ismiyle
görülecektir.
Adım 6:
“/etc/fstab” dosyasına gerekli kaydı girerek, her boot işleminde fiber diskimizin
otomatik olarak sisteme bağlanmasını(mount) sağlayabilirsiniz. Ancak biz cluster
mimaride çalışacağımız için fstab’a eklemiyoruz. Çünkü cluster node’lardan aktif
olan node diski üzerine alacaktır.
Aşağıdaki komutları çalıştırarak kullanılan üretici, kart ve aygıt bilgilerini
görebilirsiniz.
Şekil 2.14 Device Bilgilerinin Gösterimi
Not: Aşağıda verilen komut bizlere linux işletim sistemi içerisinden üretici bazlı
default multipath konfigürasyonları verir. Sisteminizde kullandığınız üretici
ürünlerine göre, gerekli görüldüğü takdirde multipath konfigürasyonunu
düzenleyebilirsiniz.
#cat /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf.defaults
Bu komutun çıktısını EK-1 de bulabilirsiniz.
E. Bonding / Teaming Konfigürasyonu
İş sürekliliği için sistemimizi cluster mimaride kurduğumuz gibi yedekli bir
yapı oluşturduğumuzdan dolayı, ağ (network) portları tarafında da yedeklilik
adına aşağıdaki şekil 2.15’de görüldüğü gibi bonding konfigürasyonunu
gerçekleştirebilirsiniz.
Şekil 2.15 ağ (network) port yedekliliğinin gösterimi
Aşağıdaki şekilde görüldüğü gibi eth0 ve eth1 arasında bond0 adında bir bonding
işlemi yapacağız.
Şekil 2.16 ifconfig komutuyla network portlarının gösterimi
Adım 1:
#vi /etc/modprobe.conf # komutuyla konfigürasyon dosyası oluşturarak
bonding işlemi için alias tanımlıyoruz. “alias bond0 bonding” yazıp,
kaydediyoruz.
Şekil 2.17 vi komutuyla alias tanımlama
#vi /etc/modprobe.d/bonding.conf # komutuyla bonding.conf adında bir
dosya oluşturup içerisine “alias bond0 bonding” yazıp kaydediyoruz.
Şekil 2.18 cat komutuyla alias’ın gösterimi
Adım 2:
Şimdi “/etc/sysconfig/network-scripts/” directory altında ifcfg-bond0 adında bir
dosya oluşturup aşağıdaki şekil 2.19’da görüldüğü gibi bonding interface
konfigürasyon dosyasını oluşturuyoruz.
Şekil 2.19 bonding interface konfigürasyonun gösterimi
Adım 3:
Şimdi de “/etc/sysconfig/network-scripts/” altında ifcfg-eth0 ve ifcfg-eth1
network portlarının dosyalarını aşağıdaki şekil 2.20’deki gibi düzenliyoruz.
Not: Bu işlemleri yaparken eth dosyalarını kopyalamayınız. Çünkü MAC ve
DEVICE adları herbir interface için farklıdır.
Şekil 2.20 network portlarının bonding konfigürasyonu için düzenlenmesi ve
gösterimi
Adım 4:
Konfigürasyoları yüklemek için network servislerini restart ediyoruz.
# service network restart # Komutu çalıştırdığımızda aşağıdakine benzer
çıktı almalıyız.
Shutting down interface eth0: Device state: 3 (disconnected) [ OK ]
Shutting down interface eth1: Device state: 3 (disconnected) [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/15
[ OK ]
Bringing up interface eth3: Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/16
[ OK ]
Adım 5:
Aşağıdaki şekilde kontrol amaçlı bond0 network interface’in ip adresini
alıp almadığını kontrol ediyoruz. Ayrıca eth0 ve eth1 portlarının “SLAVE”
olduğunu ve bond0 network interface’in “MASTER” olduğunu görebiliriz. Bir
diğer dikkatinizi çekeceğim nokta MAC adreslerinin aynı olduğu durumdur.
# ifconfig -a
Şekil 2.21 ifconfig komutuyla son durumun gösterimi
Adım 6:
Bonding işlemlerini tamamladık. Şimdi isterseniz network portlarının yedekli
çalışıp çalışmadığını test edebilirsiniz.
Test aşamaları
Network portlarından eth0’ın LAN kablosunu çıkarıyoruz.
ifconfig -a #komutunu çalıştırıyoruz ve durumu
gözlemlediğimizde bond0 arayüzün UP ve RUNNING ve
eth1 arayüzüde RUNNING ise bondig konfigürasyonu düzgün
çalışıyor demektir.
Network portlarından eth1’ın LAN kablosunu çıkarıyoruz.
ifconfig -a #komutunu çalıştırıyoruz ve durumu
gözlemlediğimizde bond0 arayüzün UP ve RUNNING ve
eth0 arayüzüde RUNNING ise bondig konfigürasyonu düzgün
çalışıyor demektir.
Bonding konfigürasyon bilgilerini aşağıdaki komutla görebilirsiniz.
cat /proc/net/bonding/bond0
Bonding mode durumunu doğrulamak için aşağıdaki komutu
kullanabilirsiniz.
cat /sys/class/net/bond0/bonding/mode
Bonding mode durumunu değiştirmek istersek, “ifcfg-bond0”
konfigürasyon dosyasındaki “mode” kısmını değiştirebiliriz.
cat /etc/sysconfig/network-scripts/ifcfg-bond0 |grep -i
mode
Policy Details
Policy Name Code Description
balance-rr 0
Round-Robin policy for fault
tolerance
active-backup 1
Active-Backup policy for fault
tolerance
balance-xor 2
Exclusive-OR policy for fault
tolerance
Broadcast 3
All transmissions are sent on all
slave interfaces
802.3ad 4 Dynamic link aggregation policy
balance-tlb 5
Transmit Load Balancing policy
for fault tolerance
balance-alb 6
Active Load Balancing policy for
fault tolerance
Tablo 2.2 bonding policy değer tablosu
bonding yapılmış konfigürasyonları listelemek için aşağıdaki
komutu kullanabilirsiniz.
cat /sys/class/net/bonding_masters
Not: Sunucu tarafında bonding yaptıktan sonra, sunuclara bağlanmada bir sıkıntı
yaşıyorsanız ve bir yavaşlık söz konusu ise, ağ anahtarı tarafında LACP
yapılmadığından dolayıdır. Sunucu tarafında bonding yaptıktan sonra ağ anahtarı
tarafında da bonding yapılan portların LACP yapılması gereklidir.
BÖLÜM – 3
Cluster Konfigürasyonu İçin Sunucuların Hazırlanması
Bölüm 2’de anlatılan çalışmaları yaptıktan sonra, sunucularımıza(node’lar)
geri dönüyoruz ve cluster konfigürasyonu için gerekli iki rpm paketini Linux
DVD’sini veya sunucularımıza yönetim portları üzerinden uzaktan bağlanıp
“Linux.iso” dosyasını mount ederek yüklememiz gerekiyor.
Sunucuların yönetim ip adresinden cluster’a dahil etmek istediğimiz
sunucularımıza sırasıyla bağlanıp “Linux.iso” mount ediyoruz. Siz isterseniz Linux
DVD’sini de mount edebilirsiniz. Mount işleminin yaptıktan sonra aşağıdaki
komutları çalıştırarak rpm paketlerini cluster’a dahil edeceğimiz her bir node’a
yüklüyoruz.
# mount /dev/cdrom /media/ -o loop # mount edeceğiniz “.iso” dosyasının
yerine göre belirteceğiniz yol(path) değişiklikleri olabilir.
# cd /media/Packages/
Bu lokasyonda aşağıdaki komutları giriyoruz ve rpm paket yükleme işlemlerini
gerçekleştiriyoruz.
# rpm -ivh lvm2-cluster-2.02.87-6.el6.x86_64.rpm
# rpm -ivh gfs2-utils-3.0.12.1-23.el6.x86_64.rpm
Paketler aşağıdaki şekil 3.1’de görüldüğü gibi yükleneceklerdir. Bu
paketleri cluster’a dahil etmek istediğimiz herbir node üzerine yüklemeyi
unutmuyoruz. Bizim cluster yapımız iki node’dan oluştuğu için her iki node
üzerine rpm paket yükleme işlemlerini gerçekleştiriyoruz.
Şekil 3.1 Paketlerin node1 üzerine yüklenmesinin gösterimi
Şekil 3.2 Mount işlemi ve paketlerin node2 üzerine yüklenmesinin gösterimi
Şimdi aşağıda verilen komutları her iki node içinde uyguluyoruz. Bu
komutlar Linux Cluster’da istenmeyen servisleri disabled eder ve çalışması
gereken servisleri de yeniden başlatma (reboot) sonrasında otomatik olarak
enable eder.
# vi /etc/selinux/config # selinux kullanmak istemiyorsanız konfigürasyon
dosyasından SELINUX=disabled yazmalısınız. Bu işlem bütün selinux
fonksiyonlarını disable eder.
# chkconfig iptables off # firewall kapatmak istemiyorsanız cluster için
gerekli ip portlarının erişime açılmasını sağlamalısınız.
# chkconfig ip6tables off
# chkconfig acpid off
# chkconfig NetworkManager off # bu işlemi yaptığında network hatası
alabilirsiniz bu durumda grafik arayüz yerine komut satırından
/etc/sysconfig/network-script/ dizini altındaki ifcfg-eth dosyasını
düzenleyebilirsiniz.
# chkconfig luci on
# chkconfig ricci on
Şekil 3.3 Servislerin node1 üzerinde kapatılıp açılması işlemi
Şekil 3.4 Servislerin node2 üzerinde kapatılıp açılması işlemi
Bu işlemler sonrası her iki node’u yeniden başlatıyoruz(reboot).
# reboot
Not: NetworkManager kullanımı cluster node’lar üzerinde desteklenmiyor. Eğer
işletim sistemlerini kurarken Ne tworkManage rkurulmuşsa, ya
NetworkManagerkaldırmalısınısız yada disable etmelisiniz. Biz yukarda
görüldüğü gibi disable ediyoruz.
N o t : E ğ e r NetworkManagerçalışıyorsa yada chkconfig komutu ile
çalıştırılabilecek şekilde düzenlenmişse cman servisi çalışmayacaktır.
Sistem yeniden açıldıktan sonra luci ve ricci servisleri çalışacak ve kapanması
gereken servislerde kapanmış olacaktır. Hazırlıklara devam ediyoruz şimdi de her
iki node üzerinde hosts dosyalarına karşı node’un ip adres’lerini yazacağız. Bu
sayede her bir node, isimleri ile birbirlerine ulaşabileceklerdir. Eğer ip
adreslerini hosts dosyalarına yazmak istemiyorsanız bu işlemi DNS sunucu
üzerinde yapmanız gereklidir.
Biz node’larımızın ip adres’lerini hosts dosyalarına yazarak devam ediyoruz.
# vi /etc/hosts # cluster’a dahil edeceğimiz herbir node için bu işlemi
uyguluyoruz.
vi editörü açılınca aşağıdaki şekilde görüldüğü gibi ip adres-isim bağlantılarını
ilave ediyoruz ve vi editörünü kaydettikten sonra cat komutu ile durumu aşağıdaki
gibi görebiliriz.
Şekil 3.5 Node1 üzerinde ip adres’lerin hosts dosyasına yazılması
Şekil 3.6 Node2 üzerinde ip adres’lerin hosts dosyasına yazılması
Bu işlemleri de gerçekleştirdikten sonra node’ları birbirleri üzerinden isimleri ile
pingleyerek test ediyoruz. Aşağıdaki şekil 3.7 ve 3.8’de görüldüğü üzere
node’ların birbirine ping atabildiğini görüyoruz.
Şekil 3.7 Node1 üzerinde ping atma işlemi
Şekil 3.8 Node2 üzerinde ping atma işlemi
Şimdi daha ilerde sorun çıkarmaması içinricci servisinin kullandığı şifreyi
belirleyelim. Ricci servisi cluster konfigürasyon bilgilerinin güncelliğinden,
cluster node’larının haberdar olmasını sağlar.
# passwd ricci
Şekil 3.9 Node1 üzerinde ricci servisine şifre belirleme işlemi
Şekil 3.10 Node2 üzerinde ricci servisine şifre belirleme işlemi
Not: RedHat Enterprise Linux 6’dasystem-config-cluster ara yüzü
bulunmamaktadır. Bunun yerine daha kullanışlı bir web arayüzü bulunmaktadır.
Son olarak selinux ve firewall durumlarını kontrol edip cluster için çok önemli
olmasada bazı yerlerde yaşanan küçük sıkıntılardan dolayı zaman senkronizasyonu
için NTP’yi aşağıdaki komutları çalıştırarak her iki node içinde aktif hala
getiriyoruz.
# sestatus –v # komutu ile selinux durumunu kontrol edebiliriz.
# iptables –L # komutu ile firewall durumunu kontrol edebiliriz.
Şekil 3.11 Node1 üzerinde selinux ve firewall durumlarının gösterimi
Şekil 3.12 Node2 üzerinde selinux ve firewall durumlarının gösterimi
Zaman senkronizasyonu (Time synchronization) NTP;
# chkconfig ntpd on
# ntpdate pool.ntp.org
# /etc/init.d/ntpd start
Şekil 3.13 ntp ayarlarının yapılması işlemi
Buraya kadar olan adımları eksiksiz ve problemsiz gerçekleştirdiyseniz
grafik arayüz çalışacaktır. Artık cluster konfigürasyonuna grafik arayüzden devam
edebiliriz. Cluster konfigürasyonu ve yönetimini bölüm-4’te grafik arayüz
üzerinden anlattıktan sonra, bölüm-5’te de c c s komutu ile komut satırından
anlatıyor olacağız.
BÖLÜM – 4
Cluster Konfigürasyonu & Yönetimi
Linux cluster konfigürasyonunu ve yönetimini grafik arayüzden(Conga)
veya ccs komutuyla yapabilirsiniz. Cluster yönetimini sağlamak ve sürdürmek için
grafik arayüzü öğrendikten sonra komut satırından da bu işlemlerin yapılması ve
öğrenilmesinin, grafik arayüzde yaşanabilecek sıkıntılara rağmen sistemin
çalışırlılığının devamı ve kontrolü için gerekli olacaktır. Bu bölümde cluster
konfigürasyonlarını ve yönetimini grafik arayüzden anlatacağız. Bölüm 5’te de
komut satırına değiniyor olacağız.
Bu bölümde cluster konfigürasyonu ve yönetimini aşağıdaki gibi ele alıyor
olacağız;
Cluster Oluşturma(Create)
Quorum Disk Oluşturma (opsiyonel)
Data Diski Oluşturma
Resources
Failover Domains
Fence Devices
Services Groups
Cluster Konfigürasyon Dosyasını İnceleme
Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma
A. Cluster Oluşturma(Create)
Şimdi tarayıcı (browser) adres kısmına https://ip-adres:8084/ adresini yazarak
yada ip adresi yerine isim girerek arayüze erişebiliriz. Eğer firewall aktif ise
uzaktan bağlanabilmek için 8084’nolu portun açılması gerekiyor.
Grafik arayüzün çalışmasını sağlayan servisler luci ve ricci servisleridir. Daha
öncede söylediğimiz gibi luci servisini başlatmadan önce cluster node’lar
üzerindeki “port 11111” portunun açık olması gerekiyor. Güvenlik duvarı
(Firewall) kapalı ise port açma işlemini gözardı edebilirsiniz.
Tarayıcı (browser) adres kısmına gerekli bilgileri yazdıysanız grafik arayüz
aşağıdaki şekil 4.1’deki gibi karşınıza gelecektir.
Şekil 4.1 Cluster arayüz ekranına giriş
Username kısmına root yazalım. Password kısmına da root password’ünü
yazarak cluster konfigürasyon arayüz ekranına giriş yapıyoruz. Luci cluster
konfigürasyon ekranı aşağıdaki gibi gelecektir.
Aşağıdaki şekil 4.2’de görüldüğü gibi “Homebase” sekmesinde herhangi
bir şey görünmüyor çünkü herhangi bir cluster konfigürasyonu yapmadık. Ayrıca
sağ üst tarafta “About” sekmesini tıklayarak cluster sistemi hakkında bilgileri
görebilirsiniz. “Admin” sekmesini tıkladığımızda ise luci sunucu loglama
konfigürasyon ayarlarını istediğimiz bir şekilde değiştirebileceğimiz ve luci
grafik arayüzünü kullanmasını istedğimiz kullanıcıları oluşturup izinlerini
belirleyebileceğimiz bir bölüm karşımıza çıkmaktadır. Bu şekilde farklı
kullanıcılarında cluster konfigürasyon arayüzüne erişebilmesini sağlayabiliriz.
Not: luci için boşta bekleme süresi vardır. 15 dakika herhangi bir şey yapmadan
beklerseniz zaman aşımından dolayı oturum otomatik kapanacaktır.
Şekil 4.2 Luci cluster konfigürasyon arayüzü
Cluster konfigürasyonunu başlatmak için “Manage Clusters” sekmesini
tıklıyoruz. Karşımıza aşağıdaki ekran gelecektir. Ekranda da görüldüğü gibi bize
3 seçenek sunmaktadır;
“Add” var olan cluster konfigürasyonuna yeni bir node eklemek
istediğimizde kullanabileceğimiz sekmedir.
“Create” yeni bir cluster yapısı oluşturmak için kullanabileceğimiz
sekmedir.
“Remove” sekmesi kurduğumuz bir cluster yapıyı kaldırmak için
kullanabileceğimiz sekmedir.
Şimdi biz yeni bir cluster yapısı oluşturacağımız için“Create” diyerek Cluster
konfigürasyonuna devam ediyoruz.
Şekil 4.3 Manage clusters sekmesinin gösterimi
“Create” sekmesini tıkladığımızda karşımıza aşağıdaki şekil 4.4’deki ekran
gelecektir.
Şekil 4.4 Cluster oluşturma ekranı
Cluster yapımızı kurmak için belirlediğimiz bir cluster ismini vererek
başlıyoruz. Ben test amaçlı olduğu için cluster ismini “mycluster” olarak
belirledim. Sizlerde belirlediğiniz bir ismi verebilirsiniz. Daha sonra tüm
node’larda aynı password’ün kullanılması için “use the same password for all
nodes” kutucuğunu işaretliyoruz. Yüksek Erişilebilirlik(High Availability) için
gerekli paketleri önceki bölümlerde yüklediğimiz için burada “Use Locally
Installed Packages” kutucuğunu işaretli olarak bırakıyoruz. Eğer cluster yazılım
paketlerinin güncellenmesini istiyorsanız “Download Packages” seçeneğini
işaretlemelisiniz. Birde en altta “Enable Shared Storage Support” kutucuğu
işaretledikten sonra “create cluster” diyoruz ve cluster’ı aşağıdaki şekil 4.5’de
görüldüğü gibi oluşturmaya başlıyoruz.
Şekil 4.5 Cluster oluşturma işlemi gösterimi
Ve cluster’ı oluşturduk. Aşağıdaki şekil 4.6’da görüldüğü gibi “mycluster”
adında 2 node’lu cluster sistemimizi görmekteyiz. Node’ların status bölümüne
baktığımızda cluster üyesi olduklarını görebiliyoruz. Bu yapıyı gerektiğinde 16
node’lu bir sisteme dönüştürebileceğimizi söylemiştik.
Şekil 4.6 Cluster bilgilerinin gösterimi
Not: Eğer ricci servisi herhangi bir node üzerinde çalışmıyorsa, cluster oluşturma
işlemi başarısız olacaktır.
Cluster oluşturma işlemini tamamlandıktan sonra yukardaki şekil 4.6’da
görüldüğü üzere cluster yapının yönetimi adına, artık cluster’daki herhangi bir
node’u silebilir(Delete), yeniden başlatabilir(Reboot), cluster’dan çıkarabilir ve
cluster’a dahil edebilir yada cluster’a yeni bir node ekleme(Add) işlemini
yapabilirsiniz.
Cluster yapısını oluşturduk ancak hala yapılacak çok işimiz var. Hatta
cluster konfigürasyonalarının ince ayarlarına yeni başlıyoruz diyebilirim.
Yukardaki ekranda görüldüğü gibi cluster yapı oluşturulduktan sonra yeni
sekmeler ortaya çıktı. Şimdi bu sekmeleri gerektiği gibi inceleyerek sistemimizin
konfigürasyonlarına devam ediyoruz.
B. Quorum Disk Oluşturma (opsiyonel)
Failover-server için Linux cluster yapının bize sunduğu network power
switchlerimizi kullanacağımız için Quorum Disk oluşturma işlemini opsiyonel
olarak gösteriyoruz. Linux cluster sunucularda failover için önerilen yapı fence
device mantığının kullanımıdır. Quroum disk oluşturma işlemi için daha önceden
hazırladığım her iki sunucunun da fiber interface’i üzerinden görebildiği “sdb”
diskini kullanacağım. Sizin altyapınızda ISCSI yapı mevcutsa onu da
kullanabilirsiniz. Bu diski, quorum diski olarak özel bir format ile hazırlamak
gerekiyor.
Cluster’daki herhangi bir node üzerinden partition oluşturma işlemini aşağıdaki
şekil 4.7’de görüldüğü gibi gerçekleştiriyoruz.
Şekil 4.7 quorum disk için partition oluşturma işlemi
Partition oluşturma işlemlerini tamamlandıktan sonra, quorum disk oluşturmak
için, aşağıdaki komutu kullanabilirsiniz.
# mkqdisk -c /dev/sdb1 -l qdisk
Şekil 4.8 Quroum disk oluşturma işlemi
Oluşturduğumuz quorum diskimizi aşağıdaki komutu çalıştırarak kontrol ediyoruz.
# mkqdisk –L
Şekil 4.9 mkqdisk -L komutunun gösterimi
Yukardaki şekilde görüldüğü üzere quorum diskimiz hazır. Şimdi cluster grafik
ara yüzü kullanarak mycluster adlı cluster’ımıza bu diski atayalım.
Şekil 4.10 cluster’a quroum disk tanıtma işleminin gösterimi
Quorum diskimizi cluster yapıya dahil etmek için;
Configure sekmesini tıklıyoruz.
QDisk sekmesini tıklıyoruz. ve quorum diski konfigürasyonu
yapacağımız ekran karşımıza gelir.
Use a Quorum Disk kutucuğunu işaretliyoruz.
By Device Labelkutucuğunuda işaretleyip altındaki bölüme
label olarak belirlediğimiz “qdisk” adını yazıyoruz.
“Apply” butonuna tıklıyoruz ve quorum disk konfigürasyonunu
tamamlamış bulunuyoruz.
# clustat # Komutu ile cluster’ın durumunu görelim.
Şekil 4.11 Quroum disk eklenmiş cluster yapının gösterimi
Quorum diskimizi cluster’daki node’lara tanıttıktan sonra,
“/etc/cluster/cluster.conf” dosyasında aşağıda belirtildiği gibi küçük bir ekleme
yapıyoruz.
# vi /etc/cluster/cluster.conf # vi editörü ile konfigürasyon dosyasını
açıyoruz ve “<totem token="21000"/>” cluster’daki herbir node üzerinde bu
eklemeyi gerçekleştiriyoruz.
Şekil 4.12 cluster.conf dosyasına ekleme işleminden sonraki gösterim
Biz kuracağımız cluster yapı içerinde quorum disk kullanmayacağımız için quorum
diski bilmek açısından opsiyonel olarak quorum disk oluşturma işlemlerini adım
adım anlatmış bulunuyoruz. Şimdi cluster sistemimize kaldığımız yerden devam
edelim.
C. Data Diski Oluşturma
Şimdi cluster sunucuların birlikte aynı anda yazıp kullanacakları data
alanını oluşturacağız. Bu işlem içincli ara yüzünü yani komut satırını
kullanıyoruz. Bölüm 2’de veri depolama ünitesinden verdiğimiz ve node’lara
tanıttığımız diski cluster yapının kullanımına sunmak için hazır hale getireceğiz.
Bu alanı cluster’a dahil olan sunucular kullanabilecek ve görecekler. Zaten Fiber
yapı üzerinden ortak alan olarak belirlediğimiz diskimizi diğer bir tabirle LUN’u
fiziksel olarak cluster’a dahil sunuculara göstermiştik.
Data alanı olarak cluster yapıya vereceğimiz diskimizin yapısını LVM
yapacağız çünkü ilerde disk alanının büyütülmesi istendiğinde kolaylıkla disk
alanının arttırımını yapabiliyor olacağız.
Not: Veri Depolama ünitesinden verilen disk 2TB’tan büyükse “fdisk” komutu
yerine “parted” komutu ile diskin formatı GPT olarak değiştirilmelidir. Çünkü
2TB’dan büyük diskleri MBR disk formatı desteklememektedir. Aksi takdirde
örneğin veri depolama ünitesinden disk olarak 10TB lun verdiğinizi düşünürsek.
Eğer GPT formatına geçmeden MBR disk formatı ile formatlarsanız 10TB yerine
diskinizi 2TB görüyor ve kullanabiliyor olabileceksiniz.
Not: Data alanı olarak verdiğiniz disk üzerinde gfs2 dosya sistemi (file system)
kullanacaksanız LVM yapmalısınız.
Bizim data diskimiz 2TB’tan daha küçük olduğu için “fdisk” komutu ile
işlemlerimize devam ediyoruz. Bu bölümün sonuna doğru2TB’tan daha büyük
diskler kullanan arkadaşlar için “parted” komutunun kullanımına da değineceğim.
# fdisk /dev/mapper/3600a0b80005a0e42000012fa52a467e7
Şekil 4.13 Disk üzerinde partition oluşturma işlemi
Yukarıdaki komut çıktısı yorumlandığında ;
- Command (m for help): bölümünde “add new partition” anlamına gelen “n”
tuşuna basılır ve ardından “Enter” tuşuna basılır.
- Command action: bölümünde “p” tuşuna basılır ve ardından “Enter” tuşuna
basılır.
- Partition number: bölümünde “1” tuşuna basılır ve ardından “Enter” tuşuna
basılır.
- First cylinder (1-1305, default 1): bölümünde herhangi bir değer verilmeden ön
tanımlı olan değer kabul edilir ve “Enter” tuşuna basılır.
- Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): bölümünde
herhangi bir değer verilmeden ön tanımlı olan değer kabul edilir ve “Enter” tuşuna
basılır.
partition oluşturulduktan sonra “t” tuşuna basılarak ilgili bölümün tipi
seçilmelidir. Bunun için aşağıdaki şekilde görüldüğü gibi işlemlere devam
ediyoruz.
Şekil 4.14 Disk partition oluşturmadan sonraki type seçim işlemi
- Hex code (type L to list codes): bölümünde oluşturulacak disk bölümü tipinin
hex kodu belirlenmelidir. Lvm disk dosya sisteminin hex kodu “8e” dir. Hex code
(type L to list codes): bölümüne “8e” yazılarak “Enter” tuşuna basılır.
- Son olarak işlemler tamamlandıktan sonra, işlemlerin kaydedilmesi için “w”
tuşuna basılıp “Enter” tuşuna basılarak işlemler tamamlanır.
Disk bölümü oluşturuldu. Oluşturulan disk bölümünü “/dev/…” dizini altında
görülebilir. Bunun için aşağıda belirtilen komutu çalıştırabilirsiniz.
# ll /dev/mapper/3600a0b80005a0e42000012fa52a467e7*
Şekil 4.15 Diskimiz ve oluşturulan partition
Komut çıktısı yukarıdaki gibidir. Görüldüğü gibi disk bölümü oluşturulmuştur.
Şimdi LVM yapısını oluşturmaya başlayabiliriz. LVM yapısının ilk aşaması
olarak aşağıdaki gibi fiziksel volume oluşturuyoruz.
# pvcreate /dev/mapper/3600a0b80005a0e42000012fa52a467e7p1 #
partition oluşturduğumuz diskimizi yada varsa disklerimizi fiziksel volume yapıyoruz
Şekil 4.16 Fiziksel volume oluşturma işlemi
Oluşturduğumuz fiziksel volume’ü “pvdisplay” komutuyla aşağıdaki şekil
4.17’deki gibi görebiliriz. LVM yapısını oluşturma işlemine volume group
oluşturarak devam ediyoruz. Volume group oluşturduktan sonrada birden fazla
fiziksel diskiniz varsa bunları volume group içerisine atıyoruz.
Şekil 4.17 pvcreate komutu sonrası oluşturulan fiziksel volume gösterimi
# vgcreate –c y vg_dbcluster
/dev/mapper/3600a0b80005a0e42000012fa52a467e7p1 # Volume group
oluşturma ve daha önce oluşturduğumuz fiziksel volume’ü , volume group
içerisine dahil etme işlemi. Birden fazla fiziksel volume varsa onları da
oluşturduğunuz volume group’a dahil etmeniz gerekiyor.
Şekil 4.18 Volume group oluşturma işlemi
Oluşturduğumuz volume group’u “vgdisplay” komutuyla aşağıdaki şekil 4.19’daki
gibi görebiliriz. Fiziksel volume ve volume group oluşturma işlemleri
tamamlandığına göre artık mantıksal(logical) volume yada volume’ler
oluşturabiliriz.
Şekil 4.19 vgcreate komutu sonrası oluşturulan volume group gösterimi
# lvcreate -l 100%FREE -n lv_db vg_dbcluster
Şekil 4.20 Logical volume oluşturma işlemi
Oluşturduğumuz mantıksal(logical) volume lvdisplay komutuyla aşağıdaki şekil
4.21’deki gibi görebiliriz. Mantıksal(logical) volume’de oluşturduğumuza göre,
oluşturduğumuz mantıksal volume’ü kullanmak istediğimiz dosya sistemi (file
system) ile formatlayabiliriz.
Şekil 4.21 lvcreate komutu sonrası oluşturulan logical volume gösterimi
# mkfs.gfs2 -p lock_dlm -t mycluster:gfs2 -j 4 /dev/mapper/vg_dbcluster-
lv_db # Eğer dosya sistemi olarak gfs2 kullanmak istiyorsanız diskinizi gfs2
gerektiren parametrelerle formatlamalısınız. Kullandığınız isimlerde(vg,lv) büyük
harf, küçük harf gibi durumlara dikkat etmek gerekiyor. Benim cluster’ın ismi
“mycluster” olduğu için “mycluster” yazılı siz de kendi clusterınızın adını
yazmalısınız.
Şekil 4.22 gfs2 dosya sistem ile formatlama işlemi
# mkfs.ext4 /dev/mapper/vg_dbcluster_lv_db # ext4 dosya sistemini
kullanmak istiyorsanız. Formatlama işlemini burada belirtildiği gibi
gerçekleştirmelisiniz.
Şekil 4.23 ext4 dosya sistem ile formatla işlemi
Formatlama işinden sonra kullanıma hazır bir disk elde edilir. Artık diskimiz
cluster yapının kullanımına hazırdır.
Şimdi başta kısaca bahsettiğimiz GPT formatına geri dönelim…
Sisteminizde eğer 2TB’tan daha büyük disklere ihtiyacınız varsa fdisk
komutu ile disk yönetimi yapamazsınız. Eğer yapmaya çalışırsanız da başta
söylediğim gibi diskiniz ne kadar büyük olursa olsun formatladıktan sonra sadece
2TB kullanılabilir disk görüyor olacaksınız.
2TB’tan daha büyük lun’lar oluşturamayacak mıyız?
Peki bu sorunu nasıl çözebiliriz…
İlk başta var olan disklerimizi ve partition’larımızı incelemek adına
aşağıdaki komutu çalıştırabilirsiniz.
# ll /dev/mapper/
Şekil 4.24 Sunucu üzerinde bulunan diskler ve partition’ların gösterimi
Ekran çıktısında görüldüğü gibi vg_node1.. ile başlayanlar bizim local
diskimiz ve diskimiz üzerinden işletim sistemi kurulumunda oluşturduğumuz
partition’larımız. wwid numarası ile başlayan bizim veri depolama ünitesinden
cluster’daki node(sunucu)’larımıza tanıttığımız diskimizdir.
Parted komutu ile hem GPT hemde MBR formatında diskler oluşturabilir ve
yönetebilirsiniz. Eğer diskiniz 2TB’tan büyükse zaten fdisk komutu yerine parted
komutunu kullanmak zorundasınız.
# parted /dev/mapper/3600a0b80005a0e42000012fa52a467e7 #parted
komutunu üzerinde işlem yapacağımız diskimizi belirterek çalıştırdığımızda
aşağıdaki ekran çıktısı ile karşılaşıyoruz. Ekran çıktısında görüldüğü gibi help
komutunu çalıştırırsak, parted bölümünde kullanabileceğimiz komutların listesini
bizlere sunacaktır.
Şekil 4.25 parted komutunun çalıştırılması
Şekil 4.26 help komutunun çıktısı
“Parted” komutuyla diskimizin yönetimine başladığımıza göre print komutu
anlamına gelen “p” tuşuna basıp enter diyoruz ve diskimizin bilgilerine
ulaşıyoruz.
Şekil 4.27 diskimizin bilgilerinin gösterimi
Şekilde görüldüğü gibi partition table “msdos” olarak gözüküyor yani MBR
formatında demektir. Eğer diskiniz 2TB’tan büyükse yada diskiniz 2TB’tan küçük
olsada GPT formatını kullanmak istiyorsanız partition table bölümünde GPT
yazmasını sağlamalısınız. Bunun için aşağıdaki verilen komutu kullanabilirsiniz.
(parted) mklabel gpt
Şekil 4.28 Diskimizin GPT formatına dönüştürülmesi ve gösterimi
Şekilde de görüldüğü gibi “mklabel” komutunu çalıştırdığımızda işleme devam
etmek ister misin sorusuna “yes” cevabının verirseniz disk türü GPT olarak
değişecektir. Formatı GPT yaptığımıza göre artık istediğimiz gibi partition yada
partition’lar oluşturabiliriz.
(parted) mkpart primary 1 5G
Şekil 4.29 Diskimiz üzerinden partition oluşturma işlemi
Yukardaki şekilde görüldüğü gibi, 10GB diskimizden 5GB’lık bir partition
oluşturma işlemini gerçekleştiriyoruz. Geriye kalan kapasiteyide istediğimiz gibi
başka bir partition oluşturabiliriz.
Oluşturduğumuz partition’ı silmek için; aşağıdaki komutta “1” sayısı partition
number’dır. Birden fazla partition varsa ve hangisini silmek istiyorsanız onun
partition number’ını girmelisiniz.
(parted) rm 1
Şekil 4.30 partition silme işlemi
Biz elimizdeki diskimizi tek partition yapmak istiyoruz. Diski tek parça görmek
için aşağıdaki komutu kullanabilirsiniz.
(parted) mkpart primary ext4 1 -1
Şekil 4.31 Diskimizi tek partiiton yapma işlemi
Partition oluşturma işlemlerini tamamladığımıza göre parted bölümünden
çıkıyoruz.
(parted) quit
# fdisk -l # kontrol amaçlı “fdisk -l” komutunu çalıştırdığınızda GPT formatlı
bir partition oluşturulduğunu görüyor olacaksınız.
Diskimizi kullanılabilir bir hale getirmek için son aşama olarak kullanmak
istediğimiz dosya sistemi (file system) formatıyla diskimizi formatlama işlemini
gerçekleştiriyoruz.
# mkfs.ext4 /dev/mapper/3600a0b80005a0e42000012fa52a467e7p1
Şekil 4.32 ext4 dosya sistem ile formatla işlemi
Yukardaki şekilde görüldüğü gibi ext4 dosya sistemi ile formatlama işleminide
yaptığımıza göre cluster yapıda ortak alan olarak kullanacağımız diskimizi
kullanılabilir hale getirmiş oluyoruz. Diskimiz hazır hale geldiğine göre cluster
yapıya dahil ederek mysql veri tabanımızın kullanımına sunabiliriz.
Örnek olması açısından diskimizi cluster yapıya dahil etme işlemini cluster.conf
dosyası üzerinden yaparak grafik arayüz olmadan da işlemlerimizi
yapabileceğimizi göstereceğim.
Öncelikli olarak cluster yapıyı aşağıdaki komutları çalıştırarak durduruyoruz. Bu
durdurma işlemini cluster yapıdaki her bir makinede gerçekleştiriyoruz.
# /etc/init.d/rgmanager stop
# /etc/init.d/clvmd stop
# /etc/init.d/cman stop
Şekil 4.33 cluster servislerini durdurma işlemi
Cluster servislerini durdurma işlemlerini tamamladıktan sonra “vi” komutuyla
cluster.conf dosyamızda fs device bölümündeki ortak alan olarak belirlediğimiz
diski path(yolunu) “/dev/mapper/3600a0b80005a0e42000012fa52a467e7p1”
olarak değiştiriyoruz. Bu işlemin cluster’a dahil her bir node üzerindeki
cluster.conf dosyasında gerçekleştirilmesi gerekiyor. Düzenlemeyi yaptıktan
sonra “vi” editöründen “wq!” çıkıyoruz. Cluster konfigürasyon dosyası üzerinde
değişiklikleri yaptığımıza göre cluster servislerini çalıştırıyoruz.
# vi /etc/cluster/cluster.conf
# /etc/init.d/cman start
# /etc/init.d/rgmanager start
Şekil 4.34 cluster servislerini çalıştırma işlemi
# watch clustat
Şekil 4.35 watch komutu gösterimi
Yeri gelmişken “watch” komutu yukardaki gibi izlemek istediğimiz komutun
çıktılarını anlık olarak görmemizi sağlar. Bu şekilde cluster servisinin
çalışırlılığının anlık olarak izleyebiliyoruz. Yukarda görüldüğü gibi node2 online
ve cluster servisimiz node2 üzerinde çalışıyor.
Node2 üzerinde yaptığımız işlemleri node1 üzerinde de düzgün bir şekilde
yapmadığımız için node1 offline olarak gözükmektedir. Aynı işlemleri node1
üzerinde yaparken “watch” komutuyla durumu izleyebilirsiniz.
cluster.conf dosyasında değişiklikler yapabilme adına bir örnek verdikten sonra
cluster konfigürasyonuna kaldığımız yerden devam ediyoruz.
D. Resources Konfigürasyonu
Cluster yapıda çalıştırmak istediğimiz mysql veritabanı için gerekli
kaynakların(resources) oluşturulması işlemidir. Eğer siz cluster yapıda
çalıştırmak istediğiniz uygulama farklıysa, uygulamanın gerektirdiği şekilde
kaynaklar(resources) oluşturmalısınız.
Mysql veritabanını cluster olarak çalıştırmak için gerekli kaynaklar(resources);
Virtual ip adres
Cluster’da çalışan uygulamanın verilerinin yazılacağı ortak alan
Mysql veritabanı servisinin çalışırlılığının kontrolü için gerekli
script kaynak(resources) oluşturma işlemi olmak üzere 3 tane
kaynak oluşturuyoruz.
Cluster grafik arayüzdenResources sekmesini tıklıyoruz ve Add diyerek
kaynak oluşturma işlemine başlıyoruz.
ilk olarak konfigürasyona floating ip adres ekliyoruz yani diğer bir deyimle
virtual ip adres. Clusterdaki aktif node hangisiyse o node üzerine ağ trafiğini
yönlendiren cluster ip adresi diyebiliriz. Aktif olan node üzerinde “ip a”
komutunu çalıştırdığımızda cluster ip adresini secondary olarak görüyor olacağız.
Yani aynı network portu üzerinde iki tane ip adresi olacak bunlar; sunucunun
kendi ip adresi ve cluster ip adresidir. Şimdi aşağıdaki şekilde de görüldüğü gibi
virtual ip adresi ekleme işlemini gerçekleştiriyoruz.
Add tıkladıktan sonra IP Address kaynağını(resource) aşağıdaki
şekilde de görüldüğü gibi seçiyoruz.
IP Adress bölümüne virtual ip adres olarak belirlediğimiz ip
adresini giriyoruz.
Submit butonunu tıklıyoruz ve ip adres kaynak ekleme işlemini
tamamlıyoruz.
Şekil 4.36 virtual ip adres oluşturma işlemi
İkinci olarak cluster verilerinin yazılacağı ortak alanı oluşturmalıyız. Cluster
verilerinin yazılması için gfs2 yada ext4 dosya sistem (File system) türlerinden
hangisini kullanacaksanız ona göre seçim yapmalısınız.
Dosya sistemi (File system) olarak ext4 kullanıyorsanız aşağıdaki şekildeki gibi
kaynak (resource) oluşturabilirsiniz;
Add tıkladıktan sonra Filesystem kaynağını(resource) seçiyoruz.
Name bölümüne paylaşılmış alanı tanımlamak adına “db_data”
adını veriyoruz.
Filesystem Type bölümünü ext4 olarak seçiyoruz.
Mount Point bölümüne mysql veritabanı verilerinin yazılacağı yolu
göstermek adına “/var/lib/mysql” yolunu yazıyoruz.
Device, FS Label, or UUID bölümüne paylaşım alanı olarak
oluşturduğumuz veri diskinin yolunu gösteriyoruz. Veri diskini
oluştururken isimlendirmede ve konfigürasyonda farklılık
olabileceği için, oluşturduğunuz veri diskinin yolunu
göstermelisiniz.
Force Unmount, Force fsck, Use Quick Status Checks, Reboot
Host Node if Unmount Fails kutucuklarını işaretliyoruz.
Submit butonunu tıklıyoruz ve ext4 dosya sistemli kaynak ekleme
işlemini tamamlıyoruz.
Şekil 4.37 ext4 dosya sistemli ortak alan oluşturma işlemi
Dosya sistemi (File system) olarak gfs2 kullanıyorsanız aşağıdaki şekildeki gibi
kaynak (resource) oluşturabilirsiniz;
Şekil 4.38 gfs2 dosya sistemli ortak alan oluşturma işlemi
Son olarak cluster mimari de yüksek erişebilirlik(HA) olarak kullanacağımız
mysql veritabanınnı servisinin çalıştırılması için gerekli olan script resource
oluşturuyoruz;
Add tıkladıktan sonra Script kaynağını(resource) seçiyoruz.
Name bölümüne mysql veritabanını tanımlamak adına “mysqld”
adını veriyoruz.
Full Path to Script File bölümüne mysql veritabanının servisini
göstermek adına “/etc/init.d/mysqld” yolunu yazıyoruz.
Submit butonuna tıklıyoruz ve script kaynak ekleme işlemini
tamamlıyoruz.
Şekil 4.39 script resource oluşturma işlemi
Cluster mimaride mysql veritabanını çalıştırmak için gerekli olan kaynak
oluşturma(resources) işlemlerini tamamladık. Eğer oluşturmuş olduğunuz
kaynaklardan(resources) herhangi birinde değişiklik yapmak isterseniz, değişiklik
yapmak istediğiniz kaynağı tıklayıp gerekli gördüğünüz değişiklikleri yaptıktan
sonra Apply butonuna basıp yapılan değişiklikleri tamamlayabilirsiniz. Ayrıca
herhangi bir kaynağı silmek istediğinizde kaynağın yanındaki kutucuğu işaretleyip
Delete etmelisiniz. Oluşturduğumuz kaynakları (resources) aşağıdaki şekildeki
gibi görebiliriz. şekilde görüldüğü üzere kaynaklar kulanımda değil “In use : no”
olarak görülmektedir. Çünkü şuana kadar sadece kaynakları oluşturma işlemlerini
gerçekleştirdik.
Şekil 4.40 oluşturulan kaynakların gösterimi
E. Failover Domains Konfigürasyonu
Failover domains cluster node’larının arasında öncelik sırası oluşturmak
diyebiliriz. Cluster, aktif node üzerinde çalışırken oluşabilecek herhangi bir hata
sonrasında cluster servislerini üzerine alacak node’un belirlenmesidir. Örneğin
cluster yapımız A, B ve C olmak üzere 3 node üzerinde yapılandırıldığını
düşünelim. Bunlardan A aktif node olarak çalışıyor ve failover domain
konfigürasyonunda öncelik sırasını A-C-B olarak belirledik. Eğer aktif node
olarak çalışan A herhangi bir hata sonucu cluster servislerini kapattığında, öncelik
sırasına göre cluster servislerini üzerine alacak node C dir.
Not: Failover domain cluster yapının çalışması için zorunlu bir gereksinim
değildir.
N ot : Failover domainde yapılacak herhangi bir değişiklik çalışan cluster
servislerini etkilemez.
Failover domain özellikleri;
Prioritized: cluster servislerinin failover olacağı node’ların
önceliklendirilmesi için seçilmesi gerekiyor.
Unrestricted(kısıtlanmamış): Cluster servisleri cluster içerisindeki
hernangi bir node üzerinde çalışır ve aktif node hata ile karşılaştığında
cluster servisleri cluster içerisindeki herhangi bir node üzerine atanır.
Default durumunda yani herhangi bir failover konfigürasyonu
yapılmadıysa, failover domains unrestricted’dır.
Restricted(kısıtlı): Eğer restricted özelliği seçilirse sadece
belirlenmiş node’lar üzerinde cluster servisleri çalışabilir. Restricted
failover domain olarak belirlenmiş node’ların hiçbirisine
ulaşılamıyorsa, cluster servisleri başlatılamaz.
No Failback: Önceliklendirilmiş bir node üzerinde cluster servisleri
başarısız olduktan sonra tekrar ulaşılabilir olduğunda cluster
servislerini üzerine almaması için seçilmiş olması gerekiyor.
Failover domains’den bahsettiğimize göre artık failover domains
konfigürasyonunu yapabiliriz. Cluster konfigürasyon arayüzden Failover Domains
sekmesine geçiyoruz ve Addsekmesini tıklıyoruz ve adım adım konfigürasyonu
gerçekleştiriyoruz;
Name kutusuna herhangi bir isim yazıyoruz.
Cluster node’ları arasında failover önceliğini aktif etmek için
Prioritized kutucuğunu işaretliyoruz.
Sadece failover domain içerisindeki node’ların failover
yapabilmesi için Restricted kutucuğunu işaretliyoruz.
1. Öncelikli node ulaşılabilir olduğunda tekrar servisleri üzerine
almaması için No Failback kutucuğunu işaretliyoruz.
Failover domain’e dahil etmek istediğimiz node’lar içinMember
kutucuğunu işaretliyoruz ve failover domaine dahil edilen her bir
node’un Priority kutucuğundaki öncelik ayarlarını yapıyoruz.
V e C re a t e di yer ek Failover Domains konfigürasyonlarını
tamamlıyoruz.
Şekil 4.41 failover domain konfigürasyonu
Aşağıdaki şekilde görüldüğü üzere Failover Domains konfigürasyonunu
tamamladık. Eğer Prioritized, Restricted,yada No Failbacközelliklerini
değiştirmek isterseniz. Oluşturmuş olduğunuz failover domains konfigürasyonunu
tıklıyoruz ve kutucuk işaretleme yada işaret kaldırma işlemini yaptıktan sonra
Update Properties diyoruz. Eğer failover domains’e yeni node dahil etmek veya
failover domain’den node çıkarmak isterseniz Member kutucuğunu işaretlemek
yada kaldırmalısınız ve öncelik ayarlarında da değişiklikler yaptıktan sonra
Update Settings tıklamalısınız. Failover domain’i silmek istediğinizde
oluşturduğunuz failover domains işaretleyip Delete etmelisiniz.
Şekil 4.42 oluşturulan failover domains konfigürasyonu gösterimi
F. Fence Devices Konfigürasyonu
Fence Devices konfigürasyonu her linux temelli cluster bir yapı
gerçekleştirmek için önemli bir komponenttir. Fencing gerçekleştirmenin ana
amacı cluster yapısında veri bütünlüğünü(data integrity) sağlamaktır. Veri
bütünlüğü derken anlatmak istediğimiz aslında, sadece bir node cluster servisini
çalıştırabilir ve aynı zamanda sadece bir node cluster servisine erişebilir.
Böylece failover süreçleri esnasında cluster servisinin bir node’dan diğer node’
geçmesini sağlarken, aynı anda iki node’unda verilere erişimini ve veri
bozulmalarını(simultaneously accessing the same data and corrupting it) önler.
Böylece Fence devices olası oluşabilecek bütün hatalara karşı veri bütünlüğünü
sağlar.
Cluster için fence device oluşturma, güncelleme, silme gibi işlemleri
yapabileceğimiz Fence Devices sekmesini tıklıyoruz. Cluster konfigürasyonu
adına herhang bir fence device oluşturulmadığı için hiçbir yapılmış ayar
bulunmamaktadır. Şimdi network power switch ile yedeklilik oluşturacak şekilde
fence device oluşturma işlemine geçebiliriz.
Öncelikle apc network power switch’lerimize serial konsoldan bağlanıp,
SSH portunu açıyor ve ağ üzerinden bir ip adres veriyoruz ve network power
switchlerimizi yeniden başlatıyoruz(reboot) ediyoruz. Network power
switchleriniz açıldıktan sonra, verdiğiniz ip adresi ile http üzerinden bağlanıp
özel olarak istediğiniz bir ayar varsa yapabilirsiniz. Biz herhangi bir şey
yapmadan devam ediyoruz.
Not: Bazı eski APC pdu’lar SHH desteklemiyor ve fence_apc ile çalışmıyor.
Bundan dolayı bu pdu’larda fence agent olarak fence_apc_snmp kullanarak SNMP
ile çalışmasını sağlayabilirsiniz.
1) Fence_apc agent konfigürasyonu
Fence Devices sekmesinden fence device olarak apc power switch
kullandığımız için APC Power Switch seçiyoruz ve aşağıdada görüldüğü gibi
fence_apc agent oluşturma işlemlerini gerçekleştiriyoruz.
Add tıkladıktan sonra APC Power Switch seçiyoruz.
Name bölümüne apc power switch tanımlamak adına “pwr01”
adını veriyoruz. İkinci apc power switch’e de “pwr02” adını
veriyoruz.
IP Addresss or Hostname bölümüne apc power switch için
belirlediğimiz ip adresini giriyoruz.
Login bölümüne apc power switch’e bağlantı yaptığımız kullanıcı
bilgisini giriyoruz.
Password bölümüne apc power switch’e bağlantı yaptığımız
kullanıcının şifresini giriyoruz.
Submit butonuna tıklıyoruz ve fence_apc agent oluşturma işlemini
tamamlıyoruz.
Şekil 4.43 apc power switch 1 oluşturma işlemi
Şekil 4.44 apc power switch 2 oluşturma işlemi
Power switch tarafında yedeklilik sağlaması için pwr01 ve pwr02 adlı iki
tane network power switchimizin fence device olarak konfigürasyonunu aşağıdaki
şekil 4.45’teki gibi görebiliriz. Aşağıdaki şekilde de görüldüğü üzere fence_apc
agentlar clusterdaki node’lar tarafından kullanımda değil. Fence_apc agent’lar
hazır olduğuna göre artık clusterdaki node’larımıza tanıtmaya geçiyoruz. Cluster’a
dahil herbir node için fencing konfigürasyonu yapılmalıdır.
Şekil 4.45 oluşturulan fence_apc agentların gösterimi
Node 1 için fencing konfigürasyonu;
Nodes sekmesini tıkladıktan sonra clusterdaki herbir node üzerinde fencing
konfigürasyonu yapmak için;
Add Fence Method sekmesini tıklıyoruz
Method Name bölümüne node üzerindeki fence method tanımlamak
adına “Method_1”adını veriyoruz.
Submit butonunu tıklıyoruz fence method oluşturma işlemini
tamamlıyoruz.
Şekil 4.46 fence method oluşturma işlemi
Method_1 adlı oluşturduğumuz fence method’a fence_agentları ekleme işlemlerini
yapıyoruz.
Add Fence Instance tıklıyoruz ve oluşturduğumuz fence device’ları
sırasıyla seçip port bilgilerini girdikten sonra aşağıdaki gibi fence
device oluşturma işlemini tamamlıyoruz. Bu işlemleri diğer
node’lar üzerinde de yapmayı unutmuyoruz.
Şekil 4.47 node1 üzerinde fence device oluşturma işleminden sonra gösterimi
Node 2 için fencing konfigürasyonu;
Node1’de yaptığımız işlemleri burada da tekrarlıyoruz.
Şekil 4.48 node2 üzerinde fence device oluşturma işleminden sonra gösterimi
Görüldüğü gibi cluster’a dahil herbir node için fence device konfigürasyonlarını
yedekli olarak tamamlamış bulunuyoruz. Konfigürasyonları tamamladıktan sonra
Fence Devices sekmesine tıkladığımızda aşağıdaki şekilde de görüldüğü üzere
pwr01 ve pwr02 adlı fence device’lar clusterdaki node’lar tarafında kullanımda
olduğu görülmektedir.
Şekil 4.49 fence devices konfigürasyonlarından sonra fence device’ların
gösterimi
2) Fence_apc_snmp agent konfigürasyonu
Fence device konfigürasyonunda agent olarak fence_apc_snmp kullanmak için,
APC Power Switch (SNMP interface)üzerinden fence_apc’de yaptığımız
konfigürasyona benzer şekilde işlemleri gerçekleştiriyoruz.
Add tıkladıktan sonra APC Power Switch (SNMP interface)
seçiyoruz.
Name bölümüne apc power switch tanımlamak adına “pwr01”
adını veriyoruz. İkinci apc power switch’e de “pwr02” adını
veriyoruz.
IP Addresss or Hostname bölümüne apc power switch için
belirlediğimiz ip adresini giriyoruz.
Login bölümüne apc power switch’e bağlantı yaptığımız kullanıcı
bilgisini giriyoruz.
Password bölümüne apc power switch’e bağlantı yaptığımız
kullanıcının şifresini giriyoruz.
Submit butonuna tıklıyoruz ve fence_apc agent oluşturma işlemini
tamamlıyoruz.
Şekil 4.50 pwr01 adlı apc power switch(SNMP interface) oluşturma işlemi
Şekil 4.51 pwr02 adlı apc power switch(SNMP interface) oluşturma işlemi
Network power switch tarafında yedeklilik sağlaması içinpwr01 ve pwr02
adlı iki tane network power switch fence device olarak konfigürasyonunu
aşağıdaki şekil 4.52’deki gibi görebilirsiniz. Aşağıdaki şekilde de görüldüğü
üzere fence_apc_snmp agent’lar clusterdaki node’lar tarafından kullanımda değil.
fence_apc_snmp agent’lar hazır olduğuna göre artık clusterdaki node’larımıza
tanıtmaya geçiyoruz. Cluster’a dahil herbir node için fencing konfigürasyonu
yapılmalıdır.
Şekil 4.52 oluşturulan fence_apc_snmp agent’ların gösterimi
Node 1 için fencing konfigürasyonu;
Yukarda anlatığımız şekilde cluster’daki herbir node için fencing
konfigürasyonunu gerçekleştiriyoruz. Aşağıdaki şekilde görüldüğü gibi node1 için
fence method içerisinde yedeklilik sağlanacak şekilde fence device
oluşturulmuştur.
Şekil 4.53 node1 üzerinde fence device oluşturma işleminden sonra gösterimi
Node 2 için fencing konfigürasyonu;
Node1’de yaptığımız işlemleri burada da tekrarlıyoruz ve aşağıdaki şekilde
görüldüğü gibi node2 için fence method içerisinde yedeklilik sağlanacak şekilde
fence device oluşturma işlemlerini gerçekleştiriyoruz.
Şekil 4.54 node2 üzerinde fence device oluşturma işleminden sonra gösterimi
Görüldüğü gibi cluster’a dahil herbir node için fence device konfigürasyonlarını
yedekli olarak tamamlamış bulunuyoruz. Konfigürasyonları tamamladıktan sonra
Fence Devices sekmesine tıkladığımızda aşağıdaki şekilde de görüldüğü üzere
pwr01 ve pwr02 adlı fence device’lar clusterdaki node’lar tarafında
kullanımdadır.
Şekil 4.55 fence devices konfigürasyonlarından sonra fence devices’ların
gösterimi
Görüldüğü gibi cluster’a dahil her node için fence agent olarak kullandığımız
fence_apc_snmp agent yedekli olarak tanımlamış bulunuyoruz. Fence device
konfigürasyonlarını tamamladığımıza göre çalışırlılığını kontrol etmek adına
aşağıdaki işlemleri gerçekleştirebilirsiniz.
Yaptığınız konfigürasyonun çalışıp çalışmadığını kontrol etmek adına, bir node’u
fence’lemek için “fence_node” komutunu kullanabilirsiniz. “fence_node” komutu
belirtilen node için cluster.conf dosyasından fencing ayarlarını okur ve fencing
konfigürasyonunu çalıştırır. Sonuç olarak log’lara fenced success yada fenced
failed sonucunu döndürür.
# fence_node node1 # cluster’daki node1 makinesini fence’liyoruz. Aynı
şekilde sırasıyla clusterdaki diğer node’larıda fence’leyip durumu
gözlemleyebilirsiniz. Ancak yapacağınız bu işi sırasıyla yapmak gerekmektedir.
Yani node1 makinesini fence’ledikten sonra cluster yapı tamamıyla ayağa
kalkdıktan sonra node2 için fence’leme işlemini gerçekleştirmek gerekmektedir.
# tail - f /var/log/messages # komut ile fence device konfigürasyonunun
çalışırlığını gözlemleyebilirsiniz. Node1 makinesini fence’lediğimizde node2
makinesi üzerinden loglara baktığımızda “node2 fenced[1962]: fence node1
success” şeklinde fencing konfigürasyonunun çalıştığını teyit ediyoruz. Sizlerde
aynı şekilde kontrolerinizi yapmayı unutmayınız.
G. Services Groups Konfigürasyonu
Cluster node’ları arasında aktif node üzerinde çalışması gereken
kaynakları(resources) yönetecek olan servistir. Yani sadece aktif node üzerinde
çalışacak olan cluster servisidir.
Cluster grafik arayüzden Service Groups sekmesini tıklıyoruz ve Add
diyerek cluster servisini oluşturma işlemine başlıyoruz.
Service Name bölümüne cluster servisini belirtecek bir isim
veriyoruz. Aşağıdaki şekilde görüldüğü gibi biz “db_cluster” adı
verdik.
Automatically Start This Service kutucuğunu işaretliyoruz.
Run Exclusive kutucuğunu işaretliyoruz.
Failover Domain bölümünde eğer failover domain oluşturduysanız
buradan seçiyorsunuz. Biz failover domain oluşturduğumuz için
seçiyoruz.
Recovery Policy bölümünde “Relocate” seçiyoruz. Relocate
seçeneği farklı node üzerinde servisi çalıştırmayı denemesini
sağlar.
Add Resource butonunu tıklıyoruz ve Resources bölümünde
oluşturduğumuz kaynakları(ip adress, db_data ve mysqld )
ekliyoruz.
Submit butonunu tıklıyoruz ve servis oluşturma işlemini
tamamlıyoruz.
Şekil 4.56 Service Groups oluşturma işlemi
Not: Oluşturduğumuz service groups’a Add Resource butonunu tıklayarak ilk
olarak eklemek istediğimiz resources ekledikten sonra, ikinci resource’u eklemek
istediğimizde Add Resource’ın yanında birde Child Resource butonu gelecektir.
Child resource ile Add Resource arasında hiyerarşi farkı bulunmaktadır. Eğer
belirlediğiniz herhangi bir kaynağın(resource) altına add child resource ile yeni
bir kaynak(resource) tanımlarsanız üstteki kaynak(resource) başlatılmadan diğer
kaynak(resource) başlatılamaz. Bunun yerine oluşturmuş olduğunuz
kaynakları(resource), add resource ile yeni bir kaynak(resource) olarak
tanımlarsanız bu ikisi birbirinden bağımsız olarak çalışırlar. Herbir
kaynak(resoruce) cluster servisi üzerinde başlatılmaya çalışılır.
Cluster servisinide oluşturma işlemini tamamladığımıza göre cluster yapısının
çalışırlılığını “clustat” komutunu çalıştırarak kontrol edebiliriz.
Aşağıdaki şekil 4.57’de görüldüğü üzere db_cluster adında servisimiz node1
üzerinde çalışıyor. Cluster servisiniz üzerinde herhangi bir değişiklik yapmak
isterseniz aşağıdaki şekil 4.57’de de görüldüğü üzere db_cluster servisini
durdurabilir, başlatabilir ve yeniden bir cluster serviside oluşturmak istersenizde
silebilirsiniz.
Şekil 4.57 Service Groups oluşturma işleminden sonra cluster servisinin
gösterimi
Cluster servisi hangi node üzerinde aktifse, virtual ip adres’in o node üzerinde
çalıştığını görmek adına “ip addr list eth0” komutunu aşağıdaki şekilde görüldüğü
gibi çalıştırabilirsiniz. Aşağıdaki şekilde görüldüğü gibi “eth0” portuna ait 2 adet
ip adresi bulunmaktadır. Secondary eth0 olarak geçen ip adres bizim cluster
yapının virtual ip adresidir. Buradan da anlaşılacağı üzere aktif node olarak
node1 çalışıyor demektir. Eğer sizin sisteminizde bonding varsa, “eth0” yerine
bonding interface bakmalısınız.
Şekil 4.58 virtual ip adres gösterimi
Cluster yapıda node1 aktif node olarak çalıştığına göre, node1 üzerinde “df -h”
komutunu çalıştırdığımda mysql veritabanı verilerinin yazılması için
oluşturduğumuz veri diskine mount olduğunu aşağıdaki şekil 4.59’daki gibi
görüyor olmanız gerekiyor.
Şekil 4.59 df -h komutunun çıktısı
Gerekli işlemleri yaptıktan sonra, bütün cluster servislerinin node’lar yeniden
başlatılsada her zaman açık olması için aşağıdaki komutları çalıştırıyoruz.
# chkconfig --list cman
# chkconfig cman on
# chkconfig --list clvmd
# chkconfig clvmd on #Eğer cluster volume’ler oluşturulurken clvm
kullandıysanız gereklidir.
# chkconfig --list gfs2
# chkconfig gfs2 on #Eğer dosya sistemi olarak RedHat GFS2
kullanıldıysa gereklidir.
# chkconfig modclusterd on
# chkconfig --list modclusterd
# chkconfig --list rgmanager
# chkconfig rgmanager on
Bu komutları cluster’daki bütün node’lar üzerinde çalıştırdıktan sonra artık
makineler reboot olsada cluster servisleri her zaman açık olacaktır. Ayrıca cluster
servislerini komutsatırındanda herhangi bir cluster servisinin çalışırlılığını
kontrol etmek için aşağıda verildiği gibi kullanabilirsiniz.
# service rgmanager status/start/restart/stop
H. Cluster Konfigürasyon Dosyasını İnceleme
Cluster konfigürasyon çalışmalarını tamamladık. Şimdi yapılan cluster
konfigürasyonuna göz gezdirelim ve farklı açılardan cluster konfigürasyonunu
değiştirmek adına neler yapılabilir ve dikkat edilmesi gereken durumlar neler
olabilir örneklerle inceleyelim.
# cat /etc/cluster/cluster.conf #herhangi bir node üzerinde komutunu
çalıştırdığımızda cluster konfigürasyonu aşağıdaki gibi ekrana gelecektir.
[root@node1 ~]# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster config_version="26" name="mycluster">
<clusternodes>
<clusternode name="node1" nodeid="1">
<fence>
<method name="Method_1">
<device name="pwr01" option="off" port="1"/>
<device name="pwr02" option="off" port="1"/>
<device name="pwr01" option="on" port="1"/>
<device name="pwr02" option="on" port="1"/>
</method>
</fence>
</clusternode>
<clusternode name="node2" nodeid="2">
<fence>
<method name="Method_1">
<device name="pwr01" option="off" port="2"/>
<device name="pwr02" option="off" port="2"/>
<device name="pwr01" option="on" port="2"/>
<device name="pwr02" option="on" port="2"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<rm>
<resources>
<ip address="192.168.128.13" sleeptime="10"/>
<fs
device="/dev/mapper/3600a0b80005a0e42000012fa52a467e7p1"
force_fsck="1" force_unmount="1" fsid="28092" fstype="ext4"
mountpoint="/var/lib/mysql" name="db_data" quick_status="1"
self_fence="1"/>
<script file="/etc/init.d/mysqld" name="mysqld"/>
</resources>
<failoverdomains>
<failoverdomain name="prefernode" nofailback="1"
ordered="1" restricted="1">
<failoverdomainnode name="node1" priority="1"/>
<failoverdomainnode name="node2" priority="2"/>
</failoverdomain>
</failoverdomains>
<service domain="prefernode" exclusive="1" name="db_cluster"
recovery="relocate">
<ip ref="192.168.128.13"/>
<fs ref="db_data"/>
<script ref="mysqld"/>
</service>
</rm>
<fencedevices>
<fencedevice agent="fence_apc_snmp" ipaddr="192.168.128.100"
login="apc" name="pwr01" passwd="apc"/>
<fencedevice agent="fence_apc_snmp" ipaddr="192.168.128.101"
login="apc" name="pwr02" passwd="apc"/>
</fencedevices>
</cluster>
[root@node1 ~]#
Konfigürasyona baştan sona doğru göz gezdirdiğimizde, grafik arayüzden
yaptığımız cluster konfigürasyonlarının buraya xml formatında yazıldığını
görüyoruz. Cluster konfigürasyonu ile ilgili değişiklikler yapmak istediğimizde
buradan “vi” editörü ile yapabiliriz. Ancak buradan yapacağımız düzenlemelerde
herhangi bir hata yaptığımızda cluster konfigürasyonu çalışmayacaktır. Burada
yapılabilecek hatalara örnek olması için aşağıdaki konfigürasyon örneklerini
inceleye bilirsiniz.
Cluster konfigürasyon dosyasının başında belirlenmiş olan cluster
config_version="26" değerinin ne olduğu akıllara gelebilir. Bir cluster
konfigürasyon dosyası, cluster konfigürasyon versiyon değeri içerir. Bu değere ilk
defa cluster konfigürasyon dosyası oluşturduğunuz zaman default olarak “1” atanır
ve siz cluster konfigürasyonunda yaptığınız her değişiklik sonrası bu değer
otomatik olarak “1” artar. Bizim yaptığımız konfigürasyonda bu değer 26
olduğuna göre, cluster konfigürasyonu süresince bu kadar değişiklik yaptığımızın
göstergesidir. Bu değerin kaç olduğunu aşağıdaki komutu çalıştırarakta
görebilirsiniz.
Not: cluster config verisoncluster’daki herbir node üzerinde aynı değerde
olması gerekir aksi takdirde cluster konfigürasyon dosyaları arasında farklılıklar
olduğu anlaşılır ve cluster yapısında hatalarla karşılaşabilirsiniz.
# ccs -h node1 --getversion # cluster konfigürasyon versiyon değerinin
kaç olduğunu gösterir.
# ccs -h node1 --incversion # bu komut cluster konfigürasyon versiyon
değerinin 1 arttırılmasını sağlar.
Örnek-1: cluster.conf örnek konfigürasyon: XML hatası
<cluster nam ="mycluster" config_version="1">
<clusternodes>
<clusternode name="node-01" nodeid="1">
<fence>
</fence>
</clusternode>
<clusternode name="node-02" nodeid="2">
<fence>
</fence>
</clusternode>
<clusternode name="node-03" nodeid="3">
<fence>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
</fencedevices>
<rm >
</rm >
<cluster> <----------------GEÇERSİZ
Bu örnekte, konfigürasyonun son satırında geçersiz diyerek belirttiğimiz yere
dikkatlice baktığımızda </cluster> şeklinde yazılmasını gerekiyorken <cluster>
yazılmıştır. Yani sadece bir “/” eksikliği cluster’ın çalışmamasına sebep
olacaktır.
Örnek-2: cluster.conf dosyasının sadece resource bölümüne örnek
konfigürasyon: Geçersiz seçenek
<resources>
<ip address="192.168.128.13" sleeptime="10"/>
<fs device="/dev/sdg1" force_fsck="on" force_unmount="on"
fsid="28092" fstype="ext4" mountpoint="/var/lib/mysql" name="db_data"
quick_status="on" self_fence="on"/>
<script file="/etc/init.d/mysqld" name="mysqld"/>
</resources>
Bu örnekte, sarı renkle belirttiğimiz yere dikkatlice baktığımızda "/dev/sdb1"
yazılması gerekiyorken "/dev/sdg1" yazılmıştır. Yani cluster konfigürasyonuna
mount ettğimiz disk yanlış tanımlanmış.
Örnek-3: cluster.conf örnek konfigürasyon: Geçersiz değer girilmesi
<cluster nam ="mycluster" config_version="1">
<clusternodes>
<clusternode name="node-01" nodeid="1">
<fence>
</fence>
</clusternode>
<clusternode name="node-02" nodeid="-2"> <----------------
GEÇERSİZ
<fence>
</fence>
</clusternode>
<clusternode name="node-03" nodeid="3">
<fence>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
</fencedevices>
<rm >
</rm >
</cluster>
Bu örnekte, sarı renkle belirttiğimiz yere dikkatlice baktığımızda clusternode daki
node-02 için nodeid xml için geçersiz bir değer içerir. Bu değer negatif bir değer
“-2” dir. Bunun yerine pozitif bir değer “2” girilmelidir. Yani nodeid değerleri
pozitif olmalıdır.
Sonuç olarakcluster.conf dosyasında yapacağınız düzenlenmelerde ve
değişikliklerde, yaptığınız işlemlerden sonra aşağıdaki komutu çalıştırarak
configürasyon dosyasında hata yapıp yapmadığınızı görebilirsiniz. Aşağıdaki
şekilde görüldüğü üzere bizim yaptığımız konfigürasyonda herhangi bir hata
bulunmadığını gösteren bir sonuç alıyoruz.
# ccs_config_validate
Şekil 4.60 cluster.conf dosya geçerliliğinin kontrol edilmesi
I. Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma
Var olan cluster’ımıza grafik arayüzden kolay bir şekilde yeni bir node ekleyebilir
veya cluster node’lardan istediğimizi cluster’dan çıkarabiliriz. Cluster
servislerini ve node’ları etkilemeksizin bu işlemleri kolayca yapabilirsiniz ancak
hata yapma işlemine karşın dikkatli bir şekilde işlemleri gerçekleştirmekte fayda
vardır.
Varolan cluster’a yeni bir node ekleme için;
Anasayfada sol taraftaki menüden Manage Clusters tıklıyoruz.
Birden fazla cluster yapısı varsa, hangi cluster’a node ekleyeceksek
onu seçiyoruz.
Add tıklıyoruz ve Add Nodes to Cluster ekrana geliyor.
Node isimini ve ricci şifresini giriyoruz.
Add Clustertıklıyoruz ve cluster’a yeni bir node ekleme işlemini
aşağıdaki şekilde görüldüğü gibi tamamlıyoruz.
Şekil 4.61 Cluster’a node ekleme işlemi
Not: Node ekleme işlemini yaptıktan sonra, fence device konfigürasyonlarını yeni
eklediğimiz node’a tanıtmayı unutmamalısınız.
Varolan cluster’dan herhangi bir node kaldırma işlemi;
Anasayfada sol taraftaki menüden Manage Clusters tıklıyoruz.
Cluster’dan kaldırmak istediğimiz node veya node’ları seçiyoruz.
Leave Clustertıklıyoruz ve cluster’dan node çıkarma işlemini
aşağıdaki şekilde görüldüğü gibi tamamlıyoruz.
Şekil 4.62 cluster’dan node çıkarma işleminden sonraki gösterimi
Node’u cluster’dan çıkardıktan sonra, yanındaki kutucu işaretleyipDelete
dediğimizde clusterdan tamamen kaldırma işlemini gerçekleştirmiş oluyoruz.
Grafik arayüz üzerinden genel olarak cluster yapısından bahsettik. Bunların
dışından konfigürasyonda ince ayarlar gerekmediği sürece cluster
konfigürasyonunu ve yönetimini grafik arayüzden yapabileceğinizi gösterdik.
Cluster’daki node’ların yeniden başlatılması (reboot), cluster’a yeni bir node
eklenmesi (Add) ve cluster’a dahil edilmesi (Join Cluster), cluster’daki node’un
silinmesi (Delete) gibi işlemlerden cluster konfigürasyonunda yapmak istediğiniz
değişikliklere kadar (Fence Devices, Failover Domains, Resources, Service
Groups, Configure) gerekli gördüğünüz işlemleri yapabilirsiniz.
Cluster konfigürasyon ve yönetim çalışmalarını grafik arayüzden
yaptığımıza göre, komut satırınada alışmak adına ki Linux/Unix türü işletim
sistemlerinin yönetimini yapıyorsanız komut satırından kaçamazsınız. Ayrıca
bulunduğunuz ortamda grafik arayüz bulunmayabilir yada uzaktan sisteme
bağlanmış ve grafik arayüzden yoksun olabilirsiniz bunlarıda gözönünde
bulundurduğumuzda komut satırı vazgeçilmez oluyor. Artık bölüm 5’te ccs
komutuyla komut satırından cluster konfigürasyon ve yönetimine geçebiliriz. Şunu
da belirtmek isterim ki komut satırına alıştıktan sonra, komut satırının daha kolay
ve eğlenceli olduğunu farkedeceksiniz.
BÖLÜM – 5
Cluster Konfigürasyonu &Yönetimi (Komut Satırı)
Cluster konfigürasyonunu ve yönetimini bir önceki bölümde grafik
arayüzden anlatmıştık. Şimdi de komut satırından nasıl yapacağımızı görüyor
olacağız. Cluster yapıyı ccs komutu ile oluşturabilir, değiştirebilir ve yönetimini
sağlayabilirsiniz. ccs komutunu kullanarak lokalden yada uzaktan cluster
konfigürasyon dosyasında yada cluster servisleri üzerinde yapmak istediklerinizi
gerçekleştirebilirsiniz.
Cluster konfigürasyonunu ve yönetimini bölüm-4’te detaylı bir şekilde
anlattığımız için burada detaydan daha çok komut satırından, ccs komutuyla cluster
konfigürasyonlarını yapabileceğimize ve cluster yönetimini sağlayabileceğimize
değineceğiz.
Bu bölümde cluster konfigürasyonu ve yönetimini aşağıdaki gibi ele alıyor
olacağız;
Cluster Oluşturma(Create)
Cluster’a Node Ekleme/Kaldırma
Fence Devices
Failover Domains
Resources
Service Groups
A. Cluster Oluşturma
Aşağıdaki komutu çalıştırdığınızda cluster’a dahil etmek istediğiniz node’lardan
birisinin üzerinde cluster konfigürasyon dosyasını oluşturmuya başlıyor
olacaksınız.
-h parametresi node isminin girilmesi için gerekli parametredir.
--createcluster parametresi cluster isminin girilmesi için gerekli parametredir.
# ccs -h node1 --createcluster mycluster
Şekil 5.1 Node1 üzerinde mycluster adında cluster oluşturma işlemi
Not: Eğer cluster oluşturmak istediğiniz node üzerinde cluster.conf dosyası
varsa, şekil 5.1’de gösterildiği gibi komutu çalıştırdığınızda var olan dosya yerine
yeni oluşturduğunuz cluster konfigürasyon dosyası geçecektir. Cluster
konfigürasyon dosyasının üzerine yazmak için “–i” parametresi gerekebilir.
Şekil 5.1 de çalıştırılan komutu yorumlarsak; node1 üzerinde mycluster adlı bir
konfigürasyon dosyası oluşturulmuştur. Bu işlemden sonra cat komutuyla,
oluşturulan konfigürasyon dosyasını şekil 5.2’deki gibi görebilirsiniz.
# cat /etc/cluster/cluster.conf
Şekil 5.2 cat komutuyla yeni oluşturulan cluster.conf dosyasının gösterimi
Not: Daha önceki bölümlerde ricci servisini çalıştırma ve şifre verme işlemini
yapmıştık. Bundan dolayı burada tekrardan değinmiyoruz. Ancak ricci servisinin
çalışması önemli olduğundan durumunu gözlemleyip geçiyoruz.
Ricci servisi, clusterda node’lar üzerindeki cluster konfigürasyon dosyalarını
dağıtmak ve oluşturmak için herbir node üzerinde çalıştırılması gereklidir.
# /etc/init.d/ricci status
Şekil 5.3 Node1 üzerinde ricci servisinin durumu
Şekil 5.4 Node2 üzerinde ricci servisinin durumu
B. Cluster’a Node Ekleme/Kaldırma
mycluster adlı cluster konfigürasyon dosyasını oluşturduğumuza göre şimdi,
cluster’a dahil etmek istediğimiz node’ları ekleme işlemine geçebiliriz. Aşağıdaki
komutları çalıştırdığımızda node1 üzerinde oluşturmaya devam ettiğimiz cluster
konfigürasyon dosyasına node1 ve node2 adında makineleri eklemiş olacağız.
# ccs -h node1 --addnode node1
# ccs -h node1 --addnode node2
Şekil 5.5 Cluster’a node ekleme işlemi
Cluster’a dahil edilmiş node’ların listesini aşağıdaki komutu çalıştırdığımızda
görebiliriz. şekil 5.6’da görüldüğü gibi node1 ve node2 makineleri cluster’a
eklenmiştir. Ayrıca cluster’a eklenmiş node’ları şekil 5.7’deki gibi cluster.conf
dosyasında da görebiliriz.
# ccs -h node1 --lsnodes
Şekil 5.6 Cluster’a eklenmiş node’ların listesi
Şekil 5.7 Node ekleme işleminden sonra cluster.conf dosyasının gösterimi
Not: Cluster’a node eklerken, eğer quorum disk kullanacaksanız node’ların
oylarınıda(votes) belirlemek adına, komutu aşağıda belirtilen şekilde
kullanabilirsiniz.
# ccs -h node1 --addnode node1 --votes 1 #votes olarak biz değer olarak
“1” verdik defaulta da herbir node’un votes değeri “1” dir. Ancak siz isterseniz
faklı değerlerde verebilirsiniz.
Not: cluster.conf dosyasında node’ların votes değerleri görülmediğine göre
defaultta bırakılmıştır ve default değerde herbir node için “1” dir.
Cluster’a node eklerkenccs komutu node’lara nodeid olarak benzersiz bir değer
atıyor. Yukardaki şekil 5.7’de görüldüğü üzere node1 için nodeid=1 ve node2
içinde nodeid=2 atanmış.Ancak siz kendi istediğiniz şekilde nodeid oluşturmak
isterseniz komutu aşağıdaki gibi kullanmalısınız.
# ccs -h node1 --addnode node1 --nodeid nodeid_giriniz
Cluster’dan herhangi bir node’u kaldırmak isterseniz aşağıdaki komutu
kullanmalısınız. Şekil 5.8’de görüldüğü üzere cluster’dannode2 adlı makineyi
kaldırma işlemini geçrekleştirdik. Şekil 5.9’a baktığımızda node2 artık cluster
konfigürasyon dosyasında görülmemektedir.
# ccs -h node1 --rmnode node2
Şekil 5.8 Cluster’dan node kaldırma işlemi
Şekil 5.9 Cluster’dan node kaldırma işleminden sonraki gösterimi
Cluster’dan node kaldırma işlemini gösterdikten sonra cluster konfigürasyonuna
devam etmek için node2 makinesini tekrar cluster’a ekliyoruz ve
konfigürasyonlara devam ediyoruz.
C. Fence Devices
Fence device hakkında bilgi bölüm-4 verildiği için burada fence device
özelliklerine baktıktan sonra fence device konfigürasyonlarının nasıl yapılacağını
anlatıyor olacağız.
Fence device konfigürasyonunu yapmadan önce, fence daemon özelliklerine
default değerler yerine başka değerler verebilirsiniz. Biz default değerlerde
bırakıp konfigürasyona devam edeceğiz. Ancak fence daemon özelliklerinde
bahsedelim.
Fence daemon özellikleri;
Post_fail_delay özelliği, aktif node başarısız olduktan sonra bir
node’un fencing olmadan önce fence daemon(fenced) saniye cinsinden
bekleme süresidir. Default değer 0’dır. Bu değer ağ performansı ve
cluster’ın durumuna göre değiştirilebilir.
Post_fail_delay özelliğinin değerini değiştirmek için aşağıdaki komutu
kullanabilirsiniz: komutu çalıştırdığınızda post_fail_delay değerini 3 saniye
olarak değiştirmiş oluyoruz.
# ccs -h node1 --setfencedaemon post_fail_delay=3
Şekil 5.10 post_fail_delay değer atama işleme
Post_join_delay özelliği, fence domain’e node ekleme yapıldıktan
sonra bir node’un fencing olmadan önce fence daemon(fenced) saniye
cinsinden bekleme süresidir. Default değer 3 saniyedir. Bu değer ağ
performansı ve cluster’ın durumuna göre değiştirilebilir.
Post_join_delay özelliğinin değerini değiştirmek için aşağıdaki komutu
kullanabilirsiniz: komutu çalıştırdığımızda post_join_delay değerinin 10 saniye
olarak değiştirmiş oluyoruz.
# ccs -h node1 --setfencedaemon post_join_delay=10
Şekil 5.11 post_join_delay değer atama işleme
Fence daemon’ın bazı özelliklerinden bahsettiğimize göre, fence device
konfigürasyonuna geçebiliriz. Cluster için fence device konfigürasyonunu
aşağıdaki komutları kullanarak yapabilirsiniz. Cluster konfigürasyonunda fence
device olarak yedekli olması için 2 adet apc power swicth kullanıyoruz.
Aşağıdaki komutları yorumlarsak; node1 üzerindeki cluster konfigürasyon
dosyasına pwr01 ve pwr02 adlı, 192.168.128.100 ve 192.168.128.101 ip adresli,
oturum açma ve şifre girilerek fence device oluşturma işlemlerini
gerçekleştiriyoruz.
# ccs -h node1 --addfencedev pwr01 agent=fence_apc_snmp
ipaddr=192.168.128.100 login=apc passwd=Passw0rd
# ccs -h node1 --addfencedev pwr02 agent=fence_apc_snmp
ipaddr=192.168.128.101 login=apc passwd=Passw0rd
Şekil 5.12 Fence device oluşturma işlemi
Apc power switch fence device ekleme işlemini yaptıktan sonra aşağıdaki verilen
komutu çalıştırdığımızda konfigürasyonu yapılmış fence device’ları görebiliriz.
Ayrıca cat komutuyla cluster.conf dosyası üzerinden de kontrol ettiğimizde iki
adet fence device oluşturulduğunu şekil 5.14’teki gibi görebiliriz.
# ccs -h node1 --lsfencedev
Şekil 5.13 fence device’ların listelenmesi
Şekil 5.14 fence device’ların cluster.conf dosyasında listelenmesi
Cluster’dan fence device kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz.
Bu komutu çalıştırdığımızda pwr02 adlı fence device’ı cluster
konfigürasyonundan kaldırma işlemini gerçekleştirdiğimizi cluster.conf
dosyasında şekil 5.15’teki gibi görebiliriz.
# ccs -h node1 --rmfencedev pwr02
Şekil 5.15 pwr02 adlı fence device’ın kaldırılmasından sonra cluster.conf
dosyasını gösterimi
N o t : Fence device ekleme işlemlemlerini yaptıktan sonra fence daemon
özelliklerinde değişiklikler yapmak isterseniz. Önce fence device’ları
kaldırmalısınız ve fence daemon özelliklerinde yapmak istediğiniz değişiklikleri
yapıp tekrar fence device ekleme işlemlerini gerçekleştirmelisiniz.
Cluster’danfence device kaldırma işlemini gösterdikten sonra cluster
konfigürasyonuna devam etmek için kaldırdığımız fence device tekrar cluster’a
ekliyoruz ve konfigürasyonlara devam ediyoruz.
Fence device olarak apc power switch kullandığımızı ve apc power switch fence
device konfigürasyonunu nasıl yaptığımızdan bahsettik. Fakat fence device olarak
sadece apc power switch kullanabileceğiniz düşünülmesin. Fence device olarak
kullanabileceğiniz seçenekleri aşağıdaki komutu çalıştırdığınız da şekilde
5.16’daki gibi görebilirsiniz. Size uygun olduğunu düşündüğünüz herhangi bir
fence device’ı kullanabilirsiniz. Daha öncede bölüm-1’de fence device olarak
kullanılabilen aygıtların linkini vermiştik. Bu link üzerinden de desteklenen
aygıtlara bakabilir ve size uygun olanını seçebilirsiniz.
# ccs -h node1 --lsfenceopts
Şekil 5.16 fence device seçenekleri
Cluster yapısı için konfigürasyonunu yaptığımız fence_apc_snmp fence agent
için gerekli ve opsiyonel fence seçeneklerini aşağıdaki komutu çalıştırdığınızda
görebilirsiniz. Sizde hangi fence device kullanıyorsanız onunla ilgili seçenekleri
inceleyebilir ve gerekli gördüğünüz ayarları yapabilirsiniz.
# ccs -h node1 --lsfenceopts fence_apc_snmp
Şekil 5.17 fence_apc_snmp agent için fence device seçenekleri
iki adet apc power switch fence device ekleme işlemlerini yaptığımıza göre,
clusterdaki herbir node için fencing konfigürasyonlarını tamamlayabiliriz.
Cluster’daki herbir node üzerinde iki adet güç kaynağı (power supply) var ve
herbiri yedeklilik açısından, bir apc power switch’e bağlı durumda. Böylece
fence device konfigürasyonunu yaparken, bir yöntem(method) içerisinde iki adet
güç kaynağına sahip, herbir node için fencing konfigürasyonu aşağıdaki gibi
yapmalısınız. Konfigürasyona başlamadan önce kontrol amaçlı aşağıdaki komutu
çalıştırarak fence device’ları listeliyoruz.
# ccs -h node1 --lsfencedev
Şekil 5.18 fence device listeleme
İlk önce fence method ekleme işlemini aşağıdaki komutları çalıştırarak
yapabilirsiniz. Herbir node için bir tane yöntem(method) oluşturuyoruz.
Aşağıdaki komutları yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz
cluster konfigürasyonunda, clustardaki herbir node üzerinde fence device
konfigürasyonu için, node1 üzerinde method_1 adlı bir yöntem ve aynı şekilde
method_1 adlı bir yöntemde clusterdaki node2 üzerinde oluşturulmuştur.
# ccs -h node1 --addmethod method_1 node1
# ccs -h node1 --addmethod method_1 node2
Şekil 5.19 node’lar üzerinde method oluşturma işlemi
Herbir node için oluşturduğumuz fence method’larını aşağıdaki şekil 5.20’deki
gibi cluster.conf dosyasında görebiliriz.
Şekil 5.20 cluster.conf dosyasının gösterimi
Method’ları oluşturduğumuza göre fence instance’ları herbir node üzerindeki
method’lara ekleyebiliriz. Herbir yöntem içerisinde iki adet instances
konfigürasyonu yapılırken, her instances için, iki defa fence device ekleme işlemi
yapılır; önce action özelliği off olarak eklenir, sonrada action özelliğini on
olarak eklenir. Bu işlem her bir fence instances için yapılmalıdır. Aşağıda verilen
komutları çalıştırdığımızda clusterda bulunan herbir node için fence device
konfigürasyonlarını tamamlamış olduğumuzu cluster.conf dosyasına şekil
5.21’deki gibi baktığımızda görebiliriz.
Aşağıdaki komutlardan birincisini yorumlarsak, node1 üzerinde oluşturmaya
devam ettiğimiz cluster konfigürasyon dosyasında, bir fence instances eklemek
için, clusterdaki node1’e method_1 adlı yöntemine pwr01 adlı fence device
ekleme işlemini yapıyoruz. Ekleme işlemini yaparken apc power switch port 1
kullanılır ve action özelliği off olarak girilmiştir. Bu mantıkta diğer komutlarıda
siz yorumlayabilirsiniz.
Not: fence device olarak herbir node’daki herbir fence method için port number
farklı olmalıdır.
# ccs -h node1 --addfenceinst pwr01 node1 method_1 port=1 action=off
# ccs -h node1 --addfenceinst pwr02 node1 method_1 port=1 action=off
# ccs -h node1 --addfenceinst pwr01 node1 method_1 port=1 action=on
# ccs -h node1 --addfenceinst pwr02 node1 method_1 port=1 action=on
# ccs -h node1 --addfenceinst pwr01 node2 method_1 port=2 action=off
# ccs -h node1 --addfenceinst pwr02 node2 method_1 port=2 action=off
# ccs -h node1 --addfenceinst pwr01 node2 method_1 port=2 action=on
# ccs -h node1 --addfenceinst pwr02 node2 method_1 port=2 action=on
Şekil 5.21 cluster daki herbir node için fence instances ekleme işlemi
Şekil 5.22 fence device konfigürasyonları yapıldıktan sonra cluster.conf
dosyasının gösterimi
N o t : Cluster’daki herbir node için birden fazla fencing method
tanımlayabilirsiniz. Böylece eğer ilk kullanılanfencing method başarısız olursa,
sistem ikinci method’u kullanmaya çalışacaktır. Buna yedekli fencing
yöntemi(backup fencing method) diyebiliriz. Bu yöntemi kullanmak için, cluster
daki herbir node üzerinde iki adet method konfigürasyonu yapmalısınız. Sistem
birinci fencing method olarak ilk oluşturduğunuz yöntemi kabul edecek ve ikinci
yöntemi(method) oluşturduğunuzda bunu yedek fencing yöntem (backup fencing
method) olarak kabul edecektir. Eğer ikinci oluşturduğunuz yöntemin birinci
fencing method olmasını istiyorsanız, ilk oluşturduğunuz fencing method’u cluster
konfigürasyon dosyasından kaldırıp, tekrardan oluşturduğunuzda artık yeni
oluşturduğunuz fencing method yedek fencing yöntem (backup fencing method)
olacaktır.
clusterdaki herhangi bir node’un, fence method içerisinde bulunan fence
device’ın fence instances’larını kaldırmak için aşağıdaki komutu kullanabilirsiniz.
Bu komutu yorumlarsak, cluster daki node2 üzerinde konfigürasyonu yapılmış
method_1 adlı yöntemimizdeki pwr01 adlı fence device’a ait instances’ları
kaldırma işlemini gerçekleştiriyoruz. Bu işlemin sonuçlarını görmek için
cluster.conf dosyasına aşağıdaki şekil 5.24’te görüldüğü gibi baktığımızda node2
makinesine ait fence device’lar içerisinde sadece pwr02 fence device’a ait
instances’ların olduğunu göreceksiniz.
# ccs -h node1 --rmfenceinst pwr01 node2 method_1
Şekil 5.23 fence instances kaldırma işlemi
Şekil 5.24 Node2 üzerindeki pwr01 fence device’a ait instances’ların
kaldırılmasından sonra cluster.conf dosyasının gösterimi
Cluster konfigürasyonunda oluşturmuş olduğunuz bir fence method kaldırmak
isterseniz aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster daki
node2 üzerinde konfigürasyonu yapılmış method_1 adlı yöntemi kaldırma
işlemidir. Bu işlemi yaptıktan sonra cluster.conf dosyasına şekil 5.26’daki gibi
baktığımızda node2 makinesine ait oluşturulmuş herhangi bir yöntem(method)
bulunmamaktadır.
# ccs -h node1 --rmmethod method_1 node2
Şekil 5.25 Node2 üzerinde yöntem(method) kaldırma işlemi
Şekil 5.26 Node2 üzerinde method_1 adlı yöntemin kaldırılmasından sonra
cluster.conf dosyasında gösterimi
Cluster konfigürasyonundan kaldırdığımız fence device konfigürasyonunu
tekrardan yaptıktan sonra, kaldığımız yerden cluster konfigürasyonuna devam
ediyoruz
D. Failover Domains
Genel olarak failover domain’den bölüm-4’te bahsettiğimiz için burada sadece
komut satırından failover domain oluşturma ve yönetme işlemlerini gösteriyor
olacağız.
Bir failover domain konfigürasyonu için, öncelikle istenen özelliklerde bir
failover domain eklemek gerekir bunun içinde aşağıda verilen komutu
kullanabilirsiniz. bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya
devam ettiğimiz node1 üzerinde, restricted, nofailback ve ordered olacak şekilde
prefernode1 adlı bir failover domain ekleme işlemi tamamlanmıştır. Ekleme
işleminden sonra şekil 5.28’deki gibi cluster.conf dosyasına baktığımızda
belirtilen özelliklerde failover domain oluşturulduğunu görebiliriz.
# ccs -h node1 --addfailoverdomain prefernode1 restricted ordered nofailback
Şekil 5.27 Failover domain oluşturma işlemi
Şekil 5.28 Failover domain oluşturduktan sonra cluster.conf dosyasında
gösterimi
Yukarda görüldüğü üzere failoverdomain oluştururken restricted, ordered ve
nofailback özelliklerini ekleyerek oluşturduk. Eğer siz bu özelliklerden kullanmak
istemediğiniz varsa, komut satırında giriş yaparken hangi özelliği istemiyorsanız
onu girmemeniz yeterlidir. Örneğin, bir failover domain oluştururken komutu #
ccs -h node1 --addfailoverdomain prefernode1 ordered nofailback şeklinde
çalıştırırsak, failover domain unrestricted, ordered ve nofailback özelliklerinde
olacak şekilde oluşturulmuş olur.
Prefernode1 adında bir failover domain oluşturduğumuza göre, clusterdaki
node’ları failover domaine eklemek için aşağıdaki komutları kullanabilirsiniz. Bu
komutları yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster
konfigürasyon dosyasındaki prefernode1 adından failover domain’e node1
makinesini 1. öncelikte ve node2 makinesinide 2. öncelikli olarak ekleme
işlemlerini gerçekleştiriyoruz.
# ccs -h node1 --addfailoverdomainnode prefernode1 node1 1
# ccs -h node1 --addfailoverdomainnode prefernode1 node2 2
Şekil 5.29 failover domain’e node ekleme işlemi
Failover domain konfigürasyonlarını tamamladığımıza göre konfigürasyonları
kontrol etmek için, aşağıda verilen komutu çalıştırdığınızda şekil 5.30’da
görüldüğü üzere failover domain konfigürasyon bilgilerini görebilirsiniz. Ayrıca
aşağıdaki şekil 5.31’de de görüldüğü gibi cluster.conf dosyasınada bakarakta
failover domain konfigürasyon yapılandırmasını görebilirsiniz.
# ccs -h node1 --lsfailoverdomain
Şekil 5.30 failover domain konfigürasyon listesi
Şekil 5.31 failover domain konfigürasyon bilgilerinin cluster.conf dosyasında
gösterimi
Failover domain konfigürasyonundan herhangi bir node’u kaldırmak isterseniz
aşağıdaki komutu kullanabilirsiniz. bu komutu yorumlarsak, node1 üzerinde
oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasındaki prefernode1
adındanki failover domain içerisinde bulunan node2 adlı makineyi kaldırma
işlemidir. Bu işlemi yaptıktan sonra şekil 5.34’te görüldüğü gibi cluster.conf
dosyasına baktığınızda node2 makinesi failover domain konfigürasyonu içerisinde
olmayacaktır. Ayrıca şekil 5.33’te görüldüğü üzere failover domain
konfigürasyon bilgileri içerisinde node2 bulunmamaktadır.
# ccs -h node1 --rmfailoverdomainnode prefernode1 node2
Şekil 5.32 Node2 makinesini failover domainden çıkarma işlemi
# ccs -h node1 --lsfailoverdomain
Şekil 5.33 Node2 makinesinin failover domainden çıkarıldıktan sonraki
failoverdomain listesinin gösterimi
Şekil 5.34 Node2 makinesinin failover domainden çıkarıldıktan sonra
cluster.conf dosyasında gösterimi
Cluster konfigürasyonundan failover domain’i kaldırmak için aşağıdaki komutu
kullanabilirsiniz. bu komutu yorumlarsak, node1 üzerinde oluşturmaya devam
ettiğimiz cluster konfigürasyon dosyasındaki prefernode1 adındanki failover
domaini kaldırma işlemini gerçekleştiriyoruz. Bu işlemi yaptıktan sonra
cluster.conf dosyasına bakarsanız prefernode1 adında bir failover domain
olmayacaktır. Ayrıca şekil 5.36’da görüldüğü üzere artık failover domain
konfigürasyonu bulunmamaktadır.
# ccs -h node1 --rmfailoverdomain prefernode1
Şekil 5.35 failover domain kaldırma işlemi
Şekil 5.36 failover domain kaldırma işleminden sonraki durum
Cluster konfigürasyonundan kaldırdığımız failover domain konfigürasyonunu
tekrardan yaptıktan sonra, kaldığımız yerden cluster yapılandırmasına devam
ediyoruz.
E. Resources
Genel olarak kaynaklardan(resources) bölüm-4’te bahsettiğimiz için burada
sadece komut satırından kaynak (resource) oluşturma ve yönetme işlemlerini
gösteriyor olacağız. Bizim kuracağımız cluster yapı, mysql veritabanının cluster
mimaride çalışmasını sağlamak olduğu için, mysql veritabanının cluster yapıda
çalışması için gerekli olacak kaynakları(resources) oluşturacağız. Sizin
oluşturduğunuz cluster yapıda çalışacak uygulama farklı ise, ona göre kaynaklar
oluşturmalısınız.
Kaynak oluşturmak için aşağıda verilen komutları kullanabilirsiniz. Bu komutları
sırasıyla yorumlarsak;
İlk oluşturduğumuz kaynak virtual ip adresdir. Clusterdaki aktif node
hangisiyse o node üzerine ağ trafiğini yönlendiren cluster ip adresi
diyebiliriz.
İkinci oluşturduğumuz kaynak dosya sistemi(file system)dir. Clusterda
çalışan uygulamanın verilerinin yazılacağı ortak alandır.
Üçüncü ve son olarak oluşturduğumuz kaynak ise script’tir. Mysql
veritabanı servisinin çalışırlılığının kontrol etmek için kullanılır.
# ccs -h node1 --addresource ip address=192.168.128.13
# ccs -h node1 --addresource fs name=db_data device= /dev/mapper/
3600a0b80005a0e42000012fa52a467e7p1 mountpoint=/var/lib/mysql
fstype=ext4
# ccs -h node1 --addresource script file=/etc/init.d/mysql name=mysql
Şekil 5.37 resources oluşturma işlemi
Kaynak(resouces) oluşturma işlemlerini tamamladıktan sonra, aşağıdaki komutu
çalıştırdığımızda şekil 5.38’de görüldüğü üzere oluşturmuş olduğumuz
kaynakları(resources) görebiliriz. Ayrıca cluster.conf dosyasınada şekil 5.39’da
görüldüğü üzere baktığımızda oluşturulan kaynakları(resources) görebiliriz.
# ccs -h node1 --lsservices
Şekil 5.38 Oluşturulan resources listelenmesi
Şekil 5.39 resources oluşturma işleminden sonra cluster.conf dosyasında
gösterimi
Cluster konfigürasyonunda oluşturmuş olduğunuz kaynaklardan(resources)
herhangi birini kaldırmak için aşağıdaki komutu kullanabilirsiniz. Bu komutu
yorumlarsak, cluster konfigürasyonundan ip resource kaynağının kaldırma
işlemdir. Bu işlemden sonra aşağıdaki şekil 5.41’de görüldüğü üzere ip resource
kaynağı listede bulunmamaktadır. Ayrıca cluster.conf dosyasına baktığımızda da
şekil 5.42’deki gibi artık ip resource gözükmeyecektir.
# ccs -h node1 --rmresource ip address=192.168.128.13
Şekil 5.40 cluster konfigürasyonundan resource kaldırma işlemi
Şekil 5.41 cluster konfigürasyonundan resource kaldırma işleminden sonra
gösterimi
Şekil 5.42 cluster konfigürasyonundan ip resource çıkarılmasından sonra
cluster.conf dosyasında gösterimi
N o t : Eğer oluşturmuş olduğunuz herhangi bir kaynağın(resources)
parametrelerinde değişiklik yapmak isterseniz. Öncelikle parametresinde
değişiklik yapmak istediğiniz kaynağı cluster konfigürasyonundan kaldırmalısınız
ve tekrardan istediğiniz parametreleride ekleyerek konfigürasyonu yapmalısınız.
Cluster yapısından kaldırdığımız ip resource konfigürasyonunu tekrardan
yaptıktan sonra, kaldığımız yerden cluster konfigürasyonuna devam ediyoruz.
F. Service Groups
Genel olarak Service Groups bölüm-4’te bahsettiğimiz için burada sadece
komut satırından cluster servisi oluşturma ve yönetme işlemlerini gösteriyor
olacağız.
Cluster kaynaklarını(resources) çalıştırmak için gerekli olan cluster servisini
oluşturmak adına aşağıda verilen komutu kullanabilirsiniz. Bu komutu
yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz node1
üzerinde, prefernode1 adlı failover domain’i kullanan ve recovery policy ayarı
relocate olan db_cluster adında bir servis oluşturma işlemi tamamlanmıştır. Bu
işlemi tamamladıktan sonra şekil 5.44’te görüldüğü üzere cluster servisini
görebilirsiniz. Ayrıca cluster servisini görmek adına cluster.conf dosyasınada
bakabilirsiniz.
# ccs -h node1 --addservice db_cluster domain=prefernode1
recovery=relocate
Şekil 5.43 cluster için cluster servisi oluşturma işlemi
Şekil 5.44 cluster servisinin listelenmesi
Cluster servisini oluşturduğumuza göre, artık kaynakları(resources) sırasıyla
cluster servisine eklemek için aşağıdaki komutları kullanabilirsiniz. Bu komutları
yorumlarsak, sırasıyla ip resource, fs resource ve script resource’ların cluster
servisine eklenmesi işlemleridir. Bu işlemler tamamlandıktan sonra şekil 5.46’da
görüldüğü üzere oluşturmuş olduğumuz kaynakları(resources) cluster servisine
eklediğimizi görüyoruz. Ayrıca cluster.conf dosyasınada baktığımızda cluster
servisinin konfigürasyonunun tamamlandığını şekil 5.47’deki gibi görebilirsiniz.
# ccs -h node1 --addsubservice db_cluster ip ref=192.168.128.13
# ccs -h node1 --addsubservice db_cluster fs ref=db_data
# ccs -h node1 --addsubservice db_cluster script ref=mysql
Şekil 5.45 cluster servisine resources ekleme işlemi
Şekil 5.46 cluster servisine resources ekleme işleminden sonraki gösterimi
Şekil 5.47 cluster servisine resources ekleme işleminden sonraki cluster.conf
gösterimi
Cluster servisi içerisindeki kaynaklardan(resources) birini kaldırmak isterseniz
aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster
konfigürasyonunu oluşturmaya devam ettiğimiz node1 üzerinde, db_cluster
adındaki cluster servisimize ait ip resource cluster servisinden çıkartılmıştır. Bu
işlemden sonra şekil 5.50’de görüldüğü üzere cluster servisi içerisinde ip
resource görülmemektedir. Ayrıca cluster.conf dosyasınada baktığımızda cluster
servisi içerisinde ip resource görülmeyecektir.
# ccs -h node1 --rmsubservice db_cluster ip
Şekil 5.48 cluster servisinden resource çıkarma işlemi
Şekil 5.49 cluster servisinden ip resource çıkarma işleminden sonra gösterimi
Şekil 5.50 cluster servisinden ip resource çıkarma işleminden sonra cluster.conf
gösterimi
Cluster servisini tamamen kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz.
Bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz
node1 üzerinde, db_cluster adında artık bir cluster servisi bulunmayacaktır.
Aşağıdaki şekil 5.51’de görüldüğü üzere cluster servisine dair bir şey
gözükmemektedir. Ayrıca cluster.conf dosyasınada bakarsanız cluster servisine
dair bir şey gözükmeyecektir.
# ccs -h node1 --rmservice db_cluster
Şekil 5.51 cluster servisini tamamen kaldırma işleminden sonraki durum
Cluster konfigürasyonundan kaldırdığımız cluster service konfigürasyonunu
tekrardan yaptıktan sonra, kaldığımız yerden devam ediyoruz.
Cluster konfigürasyonu genel olarak hazır diyebiliriz. Yaptığımız cluster
konfigürasyona göre mysql veritabanı linux işletim sistemleri üzerinde aktif-pasif
olarak çalışacaktır. Sizlerde istediğiniz uygumalarınızı kesintisiz bir iş sürekliliği
sağlayacak şekilde konfigürasyonunu yapabilirsiniz. Aşağıdaki komutu
çalıştırdığınızda cluster için oluşturulabilecek servislerinin listesini
görebilirsiniz. Ayrıca eğer sizin kendi özel uygulamanızı(third-party software)
cluster yapı üzerinde kesintisiz bir iş sürekliliği sağlayarak çalıştırmak isterseniz,
bu tür uygulamalarınızıda cluster yapıda kullanabilirsiniz.
# ccs -h node1 --lsserviceopts
# ccs -h node1 --lsserviceopts fs # bu komut cluster servisi için oluşturulmak
istenen fs resource oluşturulurken gerekli seçenekleri ve opsiyonel seçenekleri
listeler. Böylece sizde konfigürasyonunu yapacağınız servis türlerini bu şekilde
inceleyebilir ve yapılacak işlemlere yardımcı bilgileri görüntüleyebilirsiniz.
Clusterdaki node1 üzerinde yaptığımız cluster konfigürasyon dosyasını oluşturma
ve düzenleme işlemlerini tamamladığımıza göre, cluster içerisindeki bütün
node’lara cluster konfigürasyon dosyasını göndermek ve cluster konfigürasyonunu
aktif hale getirip cluster yapıyı çalıştırmaya başlayabiliriz.
# ccs -h node1 --sync # komutu çalıştırdığımızda cluster.conf dosyasını
cluster’a dahil edilen bütün node’lara gönderecektir. Şekil 5.52’de görüldüğü
üzere cluster.conf dosyasını node2 makinesine göndermek için şifre soruyor.
Şifreyi girdiğinizde dosyayı göndermeye başlıyor.
Şekil 5.52 node1 üzerinde hazırlanan cluster.conf dosyasını cluster’a dahil edilen
bütün node’lara gönderilmesi
# cat /etc/cluster/cluster.conf # komutunu clusterdaki bütün node’larda
çalıştırdığınızda, cluster’daki bütün node’ların artık cluster.conf dosyasına sahip
olduğunu ve bütün node’ların aynı cluster konfigürasyonuna sahip olduğunu
görebilirsiniz.
# ccs -h node1 --checkconf # komutunu çalıştırdığımızda clusterdaki
bütün node’ların aynı cluster.conf dosyasına sahip olup olmadığını kontrol eder.
Şekil 5.53 node’lar üzerindeki cluster.conf dosyasının aynı olup olmadığının
kontrolü
Not: Node1 üzerindeki cluster konfigürasyonunda herhangi bir değişiklik
yaptıktan sonra aşağıdaki şekilde de görüldüğü gibi konfigürasyonların aynı olup
olmadığını kontrol ettiğimde, node’ların cluster konfgürasyonlarının eşleşmediğini
belirten bir sonuç veriyor. Bundan dolayı tekrar senkrenizasyon sağlamak için
yukarda belirtilen gerekli komutu çalıştırıyoruz ve tekrar konfigürasyonların aynı
olup olmadığını kontrol ettiğim de artık cluster konfigürasyonların aynı olduğunu
şekil 5.54’teki gibi görebilirsiniz.
Şekil 5.54 node’lar üzerindeki cluster.conf dosyasının kontrolü
Not: Eğer iki node’lu bir cluster kuruyorsanız aşağıdaki komutu tek node üzerinde
de cluster servisinin çalışmasını sağlamak için çalıştırmalısınız. Aksi takdirde
cman servisi çalışmayacaktır.
# ccs -h node1 --setcman two_node=1 expected_votes=1 # komutu
çalıştırdıktan sonra cluster konfigürasyonu yaptığımız node1 makinesi üzerinde
değişiklik yapacağı için, tekrardan senkronizasyon sağlamak için yukarda
belirtilen komutların çalıştırılması gerekir.
Gerekli işlemleri yaptıktan sonra, bütün cluster servislerin makine yeniden
başlatılsada her zaman açık olması için aşağıdaki komutları çalıştırıyoruz.
# chkconfig --list cman
# chkconfig cman on
# chkconfig --list clvmd
# chkconfig clvmd on #Eğer cluster volume’ler oluşturulurken clvm
kullandıysanız gereklidir.
# chkconfig --list gfs2
# chkconfig gfs2 on #Eğer dosya sistemi olarak RedHat GFS2
kullanıldıysa gereklidir.
# chkconfig modclusterd on
# chkconfig --list modclusterd
# chkconfig --list rgmanager
# chkconfig rgmanager on
Bu komutları cluster’daki bütün node’lar üzerinde çalıştırdıktan sonra, node’ları
yeniden başlatıyoruz (reboot) ve cluster servisleri başlatılmış bir şekilde
makineler açılıyor. Siz isterseniz node’ları yeniden başlatmak (reboot) yerine
servisleri sırasıyla çalıştırabilirsiniz.
Makineler açıldıktan sonra, clustat komutunu çalıştırdığımızda, aşağıdaki şekil
5.55’de görüldüğü üzere cluster yapısında iki tane node bulunmaktadır ve
db_cluster olarak adlandırdığımız cluster servisimiz node1 üzerinde
çalışmaktadır. Böylece aktif node olarak node1 görülmektedir.
Şekil 5.55 clustat komutunun çıktısı
Cluster servisi node1 üzerinde çalıştığına göre, mysql servisininde node1
üzerinde ortak alana mount olduğunu df –h komutunu çalıştırdığımızda aşağıdaki
şekil 5.56’daki gibi görüyor olmalıyız.
Şekil 5.56 df -h komutunun çıktısı
Cluster yapısı ile ilgili aşağıda verilen birkaç komut ve ne işe yaradıkları
belirtilmiştir. Ayrıca ccs --help komutunu çalıştırdığınızda ccs komutu ile
yapılacak işlemlerin komut listesini bulabilirsiniz.
# ccs -h node2 --stop # cluster yapıdaki herhangi bir makineyi durdurmak için
kullanılabilecek komut. Bu komutu çalıştırdığımızda cluster yapıdaki node2
makinesini durdurmuş olacağız.
# ccs -h node2 --start #cluster yapıdaki herhangi bir makineyi başlatmak
için kullanılabilecek komut. Bu komutu çalıştırdığımızda cluster yapıdaki node2
makinesini başlatmış olacağız.
# ccs -h node1 --stopall # cluster servislerinin bütün node’lar üzerinde
durdurulmasını sağlar.
# ccs -h node2 --startall # cluster servislerinin bütün node’lar üzerinde
başlatılmasını sağlar.
Linux Cluster kurulumlarını ve yönetimini hem grafik arayüzden hemde ccs
komutu ile nasıl yapıldığından bahsettik. Bunların dışında cluster konfigürasyonu
hazırlamak isterseniz. Temel bir cluster konfigürasyon dosyası belirleyip onun
üzerinden direk kendiniz v i editörü ile cluster konfigürasyonunu istediğiniz
uygulamayı yada uygulamaları çalıştıracak şekilde düzenleyip hazırlayabilirsiniz.
Hazırladığınız cluster konfigürasyon dosyasınıda scp komutuyla cluster’a dahil
etmek istediğiniz diğer node’larada gönderdikten sonra, cluster servislerini
çalıştırıp sisteminizi hazır hale getirebilirsiniz.
BÖLÜM - 6
Cluster Yedekleme & Geri Dönüş (Backup & Restore)
Cluster konfigürasyonlarını tamamlayıp çalışırlılığını kontrol ettikten sonra,
zaman içerisinde yaşanabilecek olası hatalara karşı cluster konfigürasyonunun
yedeklerini almak yararlı olacaktır. Çünkü yaşanabilecek basit hatalarda elimizde
cluster konfigürasyonlarının yedeklerinin olması, hatanın daha kolay ve kısa
zamanda bulunmasına fayda sağlayabileceği gibi gerekli görüldüğünde de
yedekten dönme işleminin yapılmasını sağlayacaktır.
Cluster yapının yedeğini alma işlemini iki başlık altında toplayabiliriz;
Cluster konfigürasyonunun bulunduğu dosyanın yedeğinin
alınması
Luci(Grafik arayüz) veritabanının ve gerekli olanhost.pem
dosyasının yedeğinin alınması
A. Cluster konfigürasyon dosyasının yedeğini alma & geri dönüş
(backup & restore)
Cluster konfigürasyonunun yedeğinin alınması işlemi aslında cluster.conf
dosyasının bulunduğu dizinden “/etc/cluster/cluster.conf“ kopyalanması işlemidir.
cluster.conf dosyasını aşağıdaki komutu çalıştırdığımızda “/home” dizinine
kopyalıyoruz. Örnek olması açısındancluster.conf dosyasının yedeğinin alınması
işlemini şekil 6.1’de görüldüğü gibi aldık. Sizlerde yedeklerinizi nerde
tutuyorsanız cluster.conf dosyasınında yedeğini oraya alabilirsiniz.
# cp /etc/cluster/cluster.conf /home
Şekil 6.1 cluster.conf dosyasının yedeğinin alınması işlemi
Not: cluster.conf dosyası cluster’a dahil bütün node’larda aynıdır ve aynı da
olması gerekir.
Not: cluster.conf dosyasını başka bir makine üzerine yada genel olarak
sistemlerinizin yedeğini aldığınız yere almanızı öneririm.
Cluster yapısında yaşadığınız herhangi bir sıkıntıda yedek aldığınız cluster.conf
dosyası ile varolan cluster.conf dosyasını karşılaştırabilirsiniz. Böylece
cluster.conf dosyasında olası yaşanabilecek hataları gözlemleme şansınız
olacaktır. Ayrıca cluster’da konfigürasyon dosyasının silinmesi gibi bir durum ile
karşılaştığınızda, yedeğinizde bulunan cluster.conf dosyasını “/etc/cluster/”
directory altına kopyalayabilirsiniz. Bu tür yapacağınız çalışmalarda cluster’daki
bütün node’larda aynı konfigürasyon dosyasının bulunmasına dikkat etmelisiniz.
B. Luci(Grafik arayüz) konfigürasyon yedekleme & geri dönüş
(backup & restore)
Luci “/var/lib/luci/data/luci.db” dosyasında depolanan bir veritabanıdır.
Bu cluster konfigürasyon dosyasının kendisi değildir. Cluster konfigürasyonu
dosyası daha öncede söylediğimiz gibi “/etc/cluster/cluster.conf” dosyasıdır.
Yani Luci diğer bir deyimle grafik arayüzü herhangi bir nedenden dolayı
kaybetsekte cluster sistemimiz etkilenmeden çalışıyor olacaktır. Bundan dolayı
cluster yapıyı komut satırından yönetmesini bilmenin önemine değinmiştik. Şimdi
luci.db veritabanının yedeğini nasıl alacağımıza ve geri dönmek(restore)
istediğimizde yapılacak işlemlerin neler olduğunu görelim.
Default’ta luci.db dosyasının yedeğini aldığımızda, yedeği luci.db.backup
adında aynı klasör içerisinde oluşturacaktır. Aşağıdaki komutları sırayla
çalıştırdığımızda şekil 6.2’de görüldüğü üzere aynı klasör içerisinde luci
veritabanının yedeği oluşturulmuş durumda.
# service luci stop
# service luci backup-db
# ll /var/lib/luci/data/
Şekil 6.2 Luci veritabanı yedeğinin alınması işlemi
Eğer yedeği başka bir yere almak isterseniz “backup-db” komutu için bir
parametre olarak dosya ismi ve yerini belirtebilirsiniz. Aşağıdaki komutu
çalıştırdığımızda l uc i yedeğini / home dizini altına luci.db.backup adında
alıyoruz.
# service luci backup-db /home/luci.db.backup
Şekil 6.3 Luci veritabanı yedeğinin başka bir yere alınması işlemi
Yedek alma işlemini gerçekleştirdiğimize göre luci servisini tekrar çalıştırmak
için aşağıdaki komutu kullanabilirsiniz.
# service luci start
Şekil 6.4 Luci servisinin çalıştırılması işlemi
Not: luci veritabanı yedeğini default şekilde değilde başka bir yere alırsanız geri
dönüş (restore) işlemi sırasında yedek aldığınız luci veritabanını listelemek adına
“service luci list-backups” komutunu çalıştırdığınızda herhangi bir sonuç
göstermeyecektir.
Luci veritabanından geri dönüş (restore) işlemleri;
Aşağıdaki şekil 6.5’de görüldüğü üzere “service luci list-backups” komutunun
çıktısı herhangi bir sonuç vermedi çünkü biz yedeği /home dizinine almıştık.
# service luci stop
# service luci list-backups
Şekil 6.5 Luci servisinin durdurulması işlemi
# service luci restore-db /home/luci.db.backup
# service luci start
Yukardaki komutları çalıştırdığımızda luci.db.backup adlı yedeğinden geri
dönme(restore) işlemini gerçekleştirmiş olduk. Geri dönüş(restore) işleminden
s o nr a luci servisini çalıştırıyoruz ve yedekten dönme(restore) işlemini
tamamlamış oluyoruz.
Not: Luciveritabanını yedekten dönmek istiyorsunuz fakat yedekten dönmek
istediğiniz makinede yaşadığınız bir sıkıntıdan dolayı makineyi yeniden kurdunuz
yada luci yedeğini aldığınız makineden, başka bir makineye geri dönmek(restorre)
istiyorsunuz fakat host.pem dosyasına sahip değilsiniz. Böyle bir durumda
yukarda anlatıldığı gibi yedekten dönme(restore) işlemi yapmak istesenizde
başarısız olursunuz.
Yedeğini aldığınız makineden, farklı bir makine üzerine luci veritabanını geri
dönmek(restore) isterseniz aşağıdaki işlemleri gerçekleştirmelisiniz;
Aşağıdaki komutları sırasıyla çalıştırdığımızda, öncelikle luci servisini
durduruyoruz. Luci veritabanı yedeğini aldıktan sonra, luci veritabanı ve
host.pem dosyasını hangi makine üzerine yedekten dönme işlemini(restore)
yapacaksak, o makine üzerine kopyalama işlemini gerçekleştiriyoruz. Yada yedek
olarak saklamak istiyorsanız luci veritabanı ile birlikte host.pem dosyasınıda
yedeklerinizi tuttuğunuz yere kopyalamalısınız.
# service luci stop
# service luci backup-db
# service luci list-backups
# scp /var/lib/luci/certs/host.pem /var/lib/luci/data/luci-backup-
20140206093938.db node2:/home/kurtulus/cluster
Şekil 6.6 yedek alma işlemlerinin gerçekleştirilmesi
Yedekten dönme(restore) işlemini yapacağımız makine üzerinde luci paketleri
yüklü değilse, öncelikle gerekli paketleri yüklemek gerekiyor. Eğer luci yüklü
değilse aşağıdaki komutla yükleyebilirsiniz.
# yum install luci
Artık yedekten dönme(restore) işlemini aşağıdaki komutları çalıştırarak
gerçekleştirebiliriz; Aşağıdaki komutları sırasıyla yorumlarsak öncelikle luci
servisini durdurarak işleme başlıyoruz. İkinci olarakhost.pem dosyasını aşağıda
belirtildiği gibi gerekli dizin altına kopyalıyoruz. Kopyalama işleminden sonra
host.pem dosyasının sahibini aşağıda belirtildiği gibi değiştiriyoruz. Yedek
aldığımız luci veritabanını yedekten dönme (restore) işlemini gerçekleştiriyoruz
ve shred komutuyla kopyaladığımız yerdeki host.pem v e luci-backup yedeğini
kalıcı olarak kaldırıyoruz. Son olarak luci servisini başlatarak işlemleri
tamamlıyoruz. Bu işlemleri yaptıktan sonra https://node2:8084 şeklinde node2
makinesinin cluster arayüzüne bağlandığımızda aşağıdaki şekil 6.7’de görüldüğü
üzere artık cluster bilgilerine node2 üzerinden ulaşabiliriz.
# service luci stop
# cp /home/kurtulus/cluster/host.pem /var/lib/luci/certs/
# chown luci: /var/lib/luci/certs/host.pem
# /etc/init.d/luci restore-db /home/kurtulus/cluster/luci-
backup20140206093938.db
# shred -u /home/kurtulus/cluster/host.pem /home/kurtulus/cluster/luci-
backup20140206093938.db
# service luci start
Şekil 6.7 node2 üzerine grafik arayüz yükleme sonrası gösterimi
BÖLÜM – 7
Cluster Konfigürasyonunda Sorun Giderme(Troubleshooting)
Cluster konfigürasyonunda, bütün sistemlerde olduğu gibi çeşitli türden
hatalarla karşılaşabilirsiniz. Herhangi bir hatayla karşılaştığınızda öncelikli
olarak hatanın cluster yapının hangi bölümüyle ilgili olduğu hakkında bilgi sahibi
olmak için (/var/log/messages & /var/log/cluster/…) log’ları incelemenin yararlı
olacağı kanaatindeyim. Karşılaştığınız hatanın cluster’ın hangi bölümüyle ilgili
olduğunu farkettikten sonra ilk olarak (/etc/cluster/cluster.conf)cluster
konfigürasyon dosyasını incelemenizi hatta bölüm-6’ta anlattığımız gibi cluster
konfigürasyon dosyasının yedeğini aldığınızı varsayarak, iki cluster konfigürasyon
dosyası arasındaki farklılıkları karşılaştırmak yararlı olacaktır. Genel olarak
hatalarla ilgilenmeyi bu şekilde başlatabilirsiniz. Ancak hatanın sadece cluster
konfigürasyonundan kaynaklanmayacağını gözönünde bulundurmak gereklidir.
Bundan dolayı cluster ile beraber çalışan tüm yapıyı kontrol etmek gereklidir.
cluster.conf dosyasının kontrolü
cluster servislerinin çalışırlılığının kontrolü
cluster yapı üzerinde çalışan uygulamanın kontrolü
ağ portlarının ve ip’lerin kontrolü
fence device ağ bağlantısını ve ip’lerin kontrolü
firewall açıksa, kuralların(rules) kontrolü
veri depolama ünitesinden verilen diskin kontrolü
oluşturulan volume’lerin kontrolü
clvm(clustered logical volume manager) varsa kontrolü
sunucu & veri depolama bağlantılarının kontrolü
bonding varsa kontrolü
multipath varsa kontrolü
Not : Genel olarak kitap içerisinde cluster yapılandırmasını ve yönetimini
anlatırkende bazı dikkat edilmesi gereken hususlara değinmiştik. Şimdi burada da
bir takım sorunlarla ilgili değerlendirmelerde bulunacağız.
Cluster yapı üzerinde mysql veritabanını çalıştırdığınızı düşünelim.
Linux.iso ile gelen mysql versiyonunu değilde, mysql’in daha yeni
versiyonunu kullanmak isterseniz mysql’in konfigürasyon dosyası olan
my.cnf dosyası düzgün ayarlanmazsa, cluster yapı üzerinde düzgün
çalışmadığına ve cluster yapıyı “recoverable” gibi benzer bir duruma
düşürdüğüne şahit olabilirsiniz.
Cluster yapı kurulumunda dosya sistemi olarak “/dev/sdb1” olarak mount
ettiğiniz diskiniz herhangi bir nedenden dolayı(sunucu yeniden
başlatıldıktan sonra) “/dev/sdc1” olabilir. Bu durumda cluster yapıda fs
resource çalışmayacağı için cluster başarısız (failed) olacaktır.
Cluster yapı kurulumunda belirlediğiniz virtual ip adresiniz, ağ’ınızda
bulunan başka bir makine üzerine farkında olmadan statik olarak
verilmesi durumunda cluster başarısız(failed) olacaktır.
Cluster yapıda ortak alan olarak kullandığınız diskinizde gfs2 dosya
sistemi(file system) kullanıyorsanız. GFS2 dosya sistemi ile ilgili
sorunlarda, gfs2 ile ilgili ayarları kontrol etmek gerekecetir. Böyle bir
durumda cluster hataları ile ilgili dökümanlardan çok gfs2 dosya sistemi
ile ilgili dökümanlara bakmakta ve gfs2 dosya sistemi ile ilgili araştırma
yapmakta yarar vardır.
Cluster’daki node’lar üzerinde cluster config versiyonu farklı ise, cluster
config versiyonu farklı olan node cluster yapıya dahil olamayacaktır.
Daha önceki bölümlerde belirttiğimiz şekliyle c c s komutuyla yada
cluster.conf dosyalarını kontrol ederek clusterdaki node’ların config
versiyonlarının farklı olup olmadığını görebilirsiniz.
Cluster yapının düzgün çalışması adına ağ anahtarları tarafında da kontrol
edilmesi gereken hususlar bulunmaktadır. Bunlardan birisi eğer cluster
node’ları üzerinde bonding kullanıyorsanız ağ anahtarı tarafında da lacp
ayarlarının yapılması gerektiğini belirtmiştik. Diğer bir durum ise cluster
node’ları arasındaki haberleşmenin sağlanması için multicast ayarlarının
cluster node’larınıda dahil edecek şekilde enable edilmesidir yada ağ
anahtarları üzerinde bu tür özel ayarlar yapmayabilirsiniz, yapılmışsada
kaldırmak gereklidir. Aksi takdirde node’lar arasındaki haberleşmede
sıkıntı olduğunda cluster node’ları sürekli birbirlerini fence’leyerek
reboot’a göndermek isteyecektir.
BÖLÜM – 8
Kavramlar
Bonding: Bir IP adresini iki ethernet arabirimine birden tanımlayarak, bir
kartın devre dışı kalması durumunda sistemin diğer kart üzerinden ve aynı
IP ile devam etmesini sağlamaktır.
Conga: Conga ile adlandırılan Linux cluster yapısının yönetimi için
geliştirilen arayüzdür. Temel olarak ricci ve luci servislerinden oluşur.
Ricci: cluster’a dahil olacak node’lar üzerinde çalışır ve bu servis
aracılığıyla local ya da uzak makine üzerinde cluster yapılandırmalarını
sağlar.
Luci: ricci servisi aracılığıyla yapılacak konfigürasyon için gerekli web
arayüzünü sağlar.
Fence Devices: Node’lar birbiri ile cluster yapınızda kullanmayı
belirlediğiniz fence device üzerinden haberleşirler. Eğer node’lardan biri
devre dışı kalırsa, diğer node’un bundan haberi olur ve devreye girerek
cluster servisinin devamlılığını sağlar. Fence device cluster yapının en
önemli kompenentidir diyebiliriz.
Failover Domains: Bu bölümde cluster servisinin aktif node üzerinde
durması durumunda node’ların nasıl davranacağı ile ilgili tanımlamalar
yapılır. Öncelikler tanımlanarak node’lara cluster servisini üzerine alma
sırası verilebilir.
Resources: Servis tanımlamalarının yapıldığı bölümdür. Cluster yapı
üzerinde kullanmayı düşündüğünüz resources belirleyerek, servis
tanımlamaları için gerekli olan resource oluşturma işlemlerinin yapıldığı
bölümdür.
Service Groups: Bu bölümde resources kısmında tanımladığımız
servisleri tek bir servis gibi (grup haline getirerek) cluster yapı üzerinde
çalışacak olan cluster servisini oluşturduğumuz bölümdür. Öncelikle bir
servis grubu oluşturuyoruz ve resources bölümünde oluşturduğumuz
tanımlamaların cluster üzerinde çalışması için bu servis grubuna
tanıtılması işlemidir. Bunun için Add Resources butonu kullanılır.
Aktif Node & Pasif Node: Adında anlaşılacağı üzere cluster servisini
üzerinde çalıştıran node Aktif Node’dur. Bekleme olan node ise Pasif
Node’dur.
Cluster ip adress: cluster servisleri hangi node üzerinde çalışıyorsa o
node’üzerinde görülebilecek olan ve resource bölümünde oluşturduğumuz
virtual ip adresimizdir.
IP Address Takeover : Aktif Node’un herhangi bir sebepten dolayı
cluster servislerini çalıştıramaz hale geldiğinde Pasif Node'un virtual ip
adres olarak belirlediğimiz ip adresni üzerine alması işlemidir.
Split brain: Split brain senaryosunode’lar arasındaki iletişimin kesilmesi
olayıdır. Yani cluster içerisindeki bütün node’lar arasında hiçbir iletişim
yoktur.
Ekler
Ek-1: Linux Yöneticisi İçin Komutlar
Clustat cluster durumunu gösterir.
Ccs kendisiyle beraber kullanılan parametrelerle cluster
konfigürasyonunu ve yönetimini yapabilmeyi sağlar.
Clusvcadm cluster servisinlerinin yönetimini sağlar.
Ccs_config_validate cluster.conf dosyanın geçerliliğini denetler.
Fence_tool fence daemon sorgularını ve kontrollerini yapmayı
sağlar.
Fenced_node fence’in node’lar üzerinde çalışırlılığını test etmeye
yarar.
fence_ack_manual fence device’ların manuel olarak kullanımını sağlar.
tail -f /var/log/messages /var/log/secure # ikinci bir terminal açıp
orada logları online izlemeyi sağlar.
Not: Kitap içerisinde gerekli komutlardan yeterince bahsedildiği için burada
tekrardan anlatıma gerek duyulmamıştır. Sadece bilgi amaçlı bazı temel
komutlardan bahsedilmiştir.
Ek-2: MBR ve GPT disk türlerinin karşılaştırması
Functionality MBR GPT
Legacy OS like MS DOS,MS
Windows
Yes No
Greater than 2TB No Yes
Data disk in x86_64 and x86
version of OS
Yes Yes
Boot disk in x86_64 version
of OS
Yes Yes
Boot disk in x86 version of OS Yes No
More than 4 primary
partition
No Yes (Up to 128)
BIOS Mode Booting Yes
Implementation
specific
UEFI Mode Booting No Yes
Ek-3: Default Multipath Konfigürasyon Seçenekleri
[root@node1 ~]# cat /usr/share/doc/device-mapper-multipath-
0.4.9/multipath.conf.defaults
# These are the compiled in default settings. They will be used unless you
# overwrite these values in your config file.
#defaults {
# udev_dir /dev
# polling_interval 5
# path_selector "round-robin 0"
# path_grouping_policy failover
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# prio const
# path_checker directio
# rr_min_io 1000
# rr_weight uniform
# failback manual
# no_path_retry fail
# user_friendly_names no
#}
#
#blacklist {
# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
# devnode "^hd[a-z]"
# devnode "^dcssblk[0-9]*"
#}
#
#devices {
# device {
# vendor "APPLE*"
# product "Xserve RAID"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "3PARdata"
# product "VV"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "DEC"
# product "HSG80"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "1 hp_sw"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker hp_sw
# prio hp_sw
# }
# device {
# vendor "HP"
# product "A6189A"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "(COMPAQ|HP)"
# product "(MSA|HSV)1.0.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "1 hp_sw"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker hp_sw
# prio hp_sw
# }
# device {
# vendor "(COMPAQ|HP)"
# product "MSA VOLUME"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "HP"
# product "MSA2000s*"
# getuid_callout "/sbin/cciss_id %n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "(COMPAQ|HP)"
# product "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "HP"
# product "MSA2[02]12*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# failback immediate
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "HP"
# product "LOGICAL VOLUME.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# failback immediate
# rr_weight uniform
# no_path_retry 12
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "HP"
# product "OPEN-.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# no_path_retry 18
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "HP"
# product "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3
iSCS"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# rr_weight uniform
# no_path_retry 18
# rr_min_io 100
# path_checker tur
# prio alua
# }
# device {
# vendor "DDN"
# product "SAN DataDirector"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "EMC"
# product "SYMMETRIX"
# getuid_callout "/lib/udev/scsi_id --whitelisted --page=pre-spc3-83 --
device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# no_path_retry 6
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "DGC"
# product ".*"
# product_blacklist "LUNZ"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# prio_callout "/sbin/mpath_prio_emc /dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "1 emc"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 60
# rr_min_io 1000
# path_checker emc_clariion
# prio emc
# }
# device {
# vendor "EMC"
# product "Invista"
# product_blacklist "LUNZ"
# getuid_callout "/lib/udev/scsi_id --whitelisted --page=pre-spc3-83 --
device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# no_path_retry 5
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "FSC"
# product "CentricStor"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_serial
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "FUJITSU"
# product "ETERNUS_DX(L|400|8000)"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 10
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "HITACHI"
# product "OPEN-.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# no_path_retry 6
# rr_min_io 100
# path_checker tur
# prio const
# }
# device {
# vendor "HITACHI"
# product "DF.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio hds
# }
# device {
# vendor "IBM"
# product "ProFibre 4000R"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker readsector0
# prio const
# }
# device {
# vendor "IBM"
# product "1722-600"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry 300
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "IBM"
# product "1742"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "IBM"
# product "1814"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "IBM"
# product "1815"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "IBM"
# product "3526"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "IBM"
# product "3542"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_serial
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "IBM"
# product "2105(800|F20)"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_serial
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "IBM"
# product "1750500"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "IBM"
# product "2107900"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "IBM"
# product "2145"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "IBM"
# product "S/390 DASD ECKD"
# product_blacklist "S/390.*"
# getuid_callout "/sbin/dasd_id /dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "NETAPP"
# product "LUN.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "3 queue_if_no_path pg_init_retries 50"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 128
# path_checker tur
# flush_on_last_del yes
# prio ontap
# }
# device {
# vendor "IBM"
# product "Nseries.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 128
# path_checker directio
# prio ontap
# }
# device {
# vendor "IBM"
# product "1820N00"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 100
# path_checker tur
# prio alua
# no_path_retry queue
# }
# device {
# vendor "Pillar"
# product "Axiom.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio alua
# }
# device {
# vendor "IBM"
# product "3303 NVDISK"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_grouping_policy failover
# failback immediate
# no_path_retry 60
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# }
# device {
# vendor "AIX"
# product "NVDISK"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 alua"
# path_grouping_policy group_by_prio
# failback immediate
# no_path_retry 60
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio alua
# prio_args ""
# }
# device {
# vendor "SGI"
# product "TP9[13]00"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "SGI"
# product "TP9[45]00"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "SGI"
# product "IS.*"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "STK"
# product "OPENstorage D280"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio rdac
# }
# device {
# vendor "SUN"
# product "(StorEdge 3510|T4)"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "PIVOT3"
# product "RAIGE VOLUME"
# getuid_callout "/lib/udev/scsi_id --whitelisted --page=0x80 --
device=/dev/%n"
# features "1 queue_if_no_path"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy multibus
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio const
# }
# device {
# vendor "SUN"
# product "CSM200_R"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "SUN"
# product "LCSM100_[IF]"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "STK"
# product "FLEXLINE 380"
# product_blacklist "Universal Xport"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 rdac"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# no_path_retry queue
# rr_min_io 1000
# path_checker rdac
# prio rdac
# }
# device {
# vendor "EUROLOGC"
# product "FC2502"
# getuid_callout "/lib/udev/scsi_id --page=0x80 --whitelisted --
device=/dev/%n"
# features "0"
# hardware_handler "0"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# rr_weight uniform
# rr_min_io 1000
# path_checker directio
# prio const
# }
# device {
# vendor "NEC"
# product "DISK ARRAY"
# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
# features "0"
# hardware_handler "1 alua"
# path_selector "round-robin 0"
# path_grouping_policy group_by_prio
# failback immediate
# rr_weight uniform
# rr_min_io 1000
# path_checker tur
# prio alua
# }
#}
[root@node1 ~]#
Not: Burada görüldüğü üzere genel olarak üretici firmaların ürünlerinin ayrı ayrı
multipath konfigürasyon bilgileri verilmiştir. Sizlerde sisteminizde kullandığınız
ürüne göre gerekli görülen konfigürasyonları burada belirtildiği gibi kendi
multipath konfigürasyon dosyanızda kullanabilirsiniz.

More Related Content

PPTX
Kubernetes Introduction
PPTX
Docker introduction &amp; benefits
PDF
An Introduction to Kubernetes
PPT
Docker introduction
PPTX
Introduction to helm
PDF
Kubernetes
PDF
Kubernetes 101
PDF
Cloud Native In-Depth
Kubernetes Introduction
Docker introduction &amp; benefits
An Introduction to Kubernetes
Docker introduction
Introduction to helm
Kubernetes
Kubernetes 101
Cloud Native In-Depth

What's hot (20)

PPTX
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
PDF
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
PPTX
Kubernetes and container security
PDF
Helm - Package Manager for Kubernetes
PDF
Hands-On Introduction to Kubernetes at LISA17
PPTX
containerd the universal container runtime
PPTX
Introduction to Kubernetes
PDF
Kubernetes architecture
PPTX
A brief study on Kubernetes and its components
PDF
Kubernetes - introduction
PDF
Introduction to kubernetes
PDF
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
PDF
GitOps 101 Presentation.pdf
PDF
Introduction and Deep Dive Into Containerd
PDF
Quick introduction to Kubernetes
PPTX
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
PPTX
Docker Basics
PDF
Introduction to kubernetes
PPTX
Docker Swarm Introduction
PDF
ArgoCD Meetup PPT final.pdf
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Kubernetes and container security
Helm - Package Manager for Kubernetes
Hands-On Introduction to Kubernetes at LISA17
containerd the universal container runtime
Introduction to Kubernetes
Kubernetes architecture
A brief study on Kubernetes and its components
Kubernetes - introduction
Introduction to kubernetes
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
GitOps 101 Presentation.pdf
Introduction and Deep Dive Into Containerd
Quick introduction to Kubernetes
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
Docker Basics
Introduction to kubernetes
Docker Swarm Introduction
ArgoCD Meetup PPT final.pdf
Ad

Similar to linux-enterprise-cluster (20)

PPTX
Webcast - Failover Cluster Architecture
PPTX
windows server 2008 r2 hyper-v fail over cluster
PDF
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
PDF
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
PDF
Nagios ile Sistem ve Network Monitoring
PDF
OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack
PPTX
Exchange Server 2010 Database Availability Group(DAG)
PPTX
Exchange Server 2007 Cluster
PPS
Windows Clusters
PDF
Oracle 10g Database Server Kurulum
PPT
Linux Guvenligi V1.0
PDF
Docker - Ankara Cloud Meetup
PDF
Linux Sistem Yönetimi
PPTX
Failover Clustering Sql Server
PDF
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
PDF
Bulutistan uzun-kurumsal-sunum-2020-v2
PDF
Ceph Türkiye 7. Meetup Ankara: Ceph Temelleri ve CRUSH MAP Yönetimi
PDF
OpenStack'te Ceph Kullanımı ve Performans Optimizasyonu
PDF
Linux Yaz Kampı 2016 pfSense Firewall ve Router Eğitim Dökümanı
PDF
Webcast - Failover Cluster Architecture
windows server 2008 r2 hyper-v fail over cluster
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
Nagios ile Sistem ve Network Monitoring
OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack
Exchange Server 2010 Database Availability Group(DAG)
Exchange Server 2007 Cluster
Windows Clusters
Oracle 10g Database Server Kurulum
Linux Guvenligi V1.0
Docker - Ankara Cloud Meetup
Linux Sistem Yönetimi
Failover Clustering Sql Server
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Bulutistan uzun-kurumsal-sunum-2020-v2
Ceph Türkiye 7. Meetup Ankara: Ceph Temelleri ve CRUSH MAP Yönetimi
OpenStack'te Ceph Kullanımı ve Performans Optimizasyonu
Linux Yaz Kampı 2016 pfSense Firewall ve Router Eğitim Dökümanı
Ad

More from Kurtuluş Karasu (11)

PDF
Pardus Kurulum Dokümanı
PDF
Ubuntu Kurulum Dokümanı
PDF
Centos kurulumu
PDF
Ms Windows Privilege Escalation Zafiyeti Testi (cve 2017-0213)
PDF
WordPress Sitelerde xmlrpc.php Zafiyeti ve Çözümü
PDF
USB Kablosuz Ağ Adaptörü
PDF
SIEM Başarıya Giden Yol
PDF
Siber tehdit avcılığı 1
PDF
Suricata ile siber tehdit avcılığı
PDF
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
DOCX
Ossec kurulumu
Pardus Kurulum Dokümanı
Ubuntu Kurulum Dokümanı
Centos kurulumu
Ms Windows Privilege Escalation Zafiyeti Testi (cve 2017-0213)
WordPress Sitelerde xmlrpc.php Zafiyeti ve Çözümü
USB Kablosuz Ağ Adaptörü
SIEM Başarıya Giden Yol
Siber tehdit avcılığı 1
Suricata ile siber tehdit avcılığı
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
Ossec kurulumu

linux-enterprise-cluster

  • 2. İçindekiler 1. Cluster Yapısı & Türleri a. Yüksek Erişilebilirlik (High Availability) b. Yük Dağılımlı (Load Balancing) c. Yüksek Performans (High Performance) d. Cluster İçin Gerekli Temel Bilgiler 2. Node’ ların Kurulumu & Veri Depolama Bağlantısı a. Network Power Switch Konfigürasyonu b. SAN Anahtar Konfigürasyonu c. Veri Depolama Ünitesi(Storage) Konfigürasyonu d. Multipath Konfigürasyonu e. Bonding / Teaming Konfigürasyonu 3. Cluster Konfigürasyonu İçin Sunucuların Hazırlanması 4. Cluster Konfigürasyonu &Yönetimi a. Cluster Oluşturma(Create) b. Quorum Disk Oluşturma (opsiyonel) c. Data Diski Oluşturma d. Resources e. Failover Domains f. Fence Devices
  • 3. g. Services Groups h. Cluster Konfigürasyon Dosyasını İnceleme i. Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma 5. Cluster Konfigürasyonu &Yönetimi (Komut Satırı) a. Cluster Oluşturma(Create) b. Cluster’a Node Ekleme/Kaldırma c. Fence Devices d. Failover Domains e. Resources f. Service Groups 6. Cluster Yedekleme & Geri dönüş (Backup & Restore) a. Cluster konfigürasyon dosyasının yedeğini alma & geri dönüş b. Luci(Grafik arayüz) konfigürasyon yedekleme & geri dönüş 7. Cluster Konfigürasyonunda Sorun Giderme (Troubleshooting) 8. Kavramlar 9. Ekler Ek-1: Linux Yöneticisi İçin Komutlar Ek-2: MBR ve GPT disk türlerinin karşılaştırması Ek-3: Default Multipath Konfigürasyon Seçenekleri
  • 5. BÖLÜM – 1 Cluster Yapısı & Türleri Cluster kelime anlamı kümedir. Bilişim dünyasında birden fazla donanımın aynı anda tek bir çatı altında bereber çalıştırıldığı teknolojidir. Amaç SPOF (Single Point Of Failure) tek bir noktada oluşabilecek hatalara karşı önlemler almaktır. Bunlara örnek vermek gerekirse: İşletim sisteminin çökmesi Üzerinde çalışan uygulamanın kapanması İstenmeyen ama yapılan servis kesintileri. Örneğin çekirdek güncellemesi Donanımsal kartlar, portlar ve kablo gibi vb. parçalarda olabilecek arızalar ... vb İş sürekliliği çözümleri, olası bir arıza veya felaket durumunda sistemlerin kesintisiz bir şekilde çalışmasını sağlamaktır. Kesinti durumunda başınızı ağrıtacak uygulamalarınıza önceden tedbir almakta diyebiliriz. Günümüzde sistemleri incelediğimizde ise en yaygın olarak kullanılan iş sürekliliği çözümü olarak, “Cluster” sistemler gelir. Cluster sistemler yapı olarak geniş bir kapsamda farklı amaçlar için farklı çözümler sunabilmektedir. Bu çözümler arasından sıkça kullanılan ve yüksek erişilebilirlik olarak adlandırılan cluster çözümü üzerinde duracağız. Yapacağımız çalışmalarıda uygulamalı olarak gösteriyor olacağız. Uygulama olarak cluster kurulumu sonrasında mysql veritabını’nımızı cluster üzerinde yüksek erişilebilirlik (HA) şeklinde kullanmayı planlıyorum. Sizlerde kendi istediğiniz uygulamalarınızı cluster sistemler üzerinde çalıştırabilirsiniz. Kesintisiz bir iş sürekliliği çözümü olarak cluster sistemler önem arz etmektedir. Cluster türleri genel olarak 3 grupta toplanır: A. Yüksek Erişilebilirlik (High Availability): Bu yapıda amaç verilen hizmetin kesintiye uğramamasıdır. Oluşturulan cluster yapısı ile bir ya da
  • 6. birden fazla yedek sunucu çalışır ve hazır vaziyette bekletilip, aktif olarak çalışan sunucu’nun kesintiye uğraması durumunda devreye girmesi sağlanır. Böylece hizmet kesintiye uğramaz. B. Yük Dengeleme (Load Balancing): Bu yapıda amaç yapılacak iş yükünün cluster’daki sunucular arasında iş yoğunluğu gözetilerek yük dağılımının yapılmasıdır. Bundan dolayı tüm sunucular aktif durumdadır. Clusterdaki sunuculardan birinin kesintiye uğraması durumunda iş yükü, clusterda kalan sunucular arasında dağıtılır. C. Yüksek Performans Hesaplama (High Performance Computing): Yüksek performans hesaplama işlerinde kullanılan cluster yapısıdır. Yapılacak iş parçalara bölünerek sunuculara gönderilir ve sunuculardan gelen sonuçlar tekrar birleştirilerek iş tamamlanır. Yük dengeleme cluster modelinde her bir sunucuya bir iş verilmesi söz konusuyken; bu yapıda tek bir işin parçalara bölünerek her bir sunucuya gönderilmesi ve sunuculardan gelen sonuçların birleştirilmesiyle yapılan tek bir iş söz konusudur. Bu cluster yapısı genel olarak bilimsel hesaplama ve araştırmaların yapıldığı yerlerde kullanılır. D. Cluster İçin Gerekli Temel Bilgiler Linux, cluster mimarisinde yüksek erişilebilirlik(HA) oluşturmak istediğimiz kaynakları, konfigürasyon sırasında bize sunmaktadır.(Örn: Apache, Mysql, Oracle, NFS vb.) Linux’un bize sunduğu bu uygulamaların dışındaki uygulamaları da kendi yazacağımız scritplerle yüksek erişilebilirlik(HA) çözümleri oluşturabiliriz. Cluster sistemlerin kurulum-konfigürasyonunda yedekli bir yapının oluşturulması(bonding,multipath,donanımsal vb.) ve sistemin kesintisiz çalışmasını sağlayacak çalışmaların tamamını kapsayacak şekilde bir çalışma yapılmıştır. Veri disklerinin oluşturulmasında dikkat edilmesi gereken GPT ve MBR formatlı disk yapılarından, cluster mimarisinin yedekleme-geri dönüş(backup-recovery) konularına kadar baştan sona cluster yapılandırmasını gerektiren bilgilerden bahsedilmiştir. Son olarakta oluşturulan Cluster Konfigürasyonunda Sorun Giderme(Troubleshooting) ile ilgili temel karşılaşılabilecek sorunlardan ve yöntemlerden bahsedilmiştir.
  • 7. Yapılan çalışma gerekli bütün komutları ve sistemi kurmak için görsellik açısından çıktılarını içermektedir. Genel olarak aşağıdaki konular üzerinde durulmuştur. Linux cluster çözümleri Node’ların kurulumu ve Veri depolama bağlantısı Multipath konfigürasyonu Bonding / Teaming konfigürasyonu Ext4 ve gfs2 dosya sistemlerine bakış MBR ve GPT formatlı disk oluşturma işlemleri (parted komutu) Linux cluster yedekleme ve geri dönüş(backup-recovery) Cluster Konfigürasyonunda Sorun Giderme (Troubleshooting) Cluster sistemler kritik uygulamalar için güvenirlilik, ölçeklenebilirlik ve ulaşılabilirlik sağlar. Bir failover(belirli bir donanım parçasının çökmesinden sonra ağa erişimin kesintiye uğramamasını sağlamak için kullanılan fazlalık) yapıda cluster kurmak için temel adımları aşağıdaki gibi sıralayabiliriz; a. Donanım gereksinimleri ve kurulumlarının yapılması i. Linux işletim sisteminin kurulumunun yapılacağı sunucuların belirlenmesi (en az 1GB RAM) ii. Ağ anahtarı(Network Switch), cluster’a erişim için gerekli iii. Akıllı PDU(Network power switch), kurumsal seviyede bir clusterda fencing gerçekleştirmek için gerekli iv. SAN anahtar(fiber anahtar), fiber kanallı veri depolama ünitesine erişim için gerekli, diğer bir seçenek ISCSI’ dir. (Opsiyonel) SAN anahtarınız olmasada sunucularınızı, veri depolama ünitesine direk bağlayabilirsiniz. v. Veri depolama ünitesi(Storage), disk paylaşımını yapacağımız, SAN mimaride bir veri depolama ünitesidir. b. High Availability yazılımlarının kurulması Kurulumu iki yöntemle yapabilirsiniz; vi. Linux işletim sistemleri kurulumunu yaparken cluster için gerekli paketlerin kurulumunu yapabilirsiniz.
  • 8. vii. Grafik arayüzden(Conga), cluster için gerekli yazılımları kurabilirsiniz. c. Cluster konfigürayonlarının yapılması Konfigürasyonları üç ayrı yöntemle yapabilirsiniz; viii. Grafik arayüz(Conga), cluster konfigürasyonlarını yapabileceğiniz ve yönetebileceğiniz kullanıcı arayüzüdür. ix. ccs komutu ile, cluster konfigürasyonlarını yapabilir ve yönetebilirsiniz. x. Doğrudan temel bir cluster.conf dosyası belirleyerek, üzerinde istediğiniz çalışmaları yapabilirsiniz. Not: Cluster kurulumunu RedHat Enterprise Linux işletim sistemleri üzerine kuruyor olacağız. Sizlerde isterseniz CentOS, Oracle Enterprise Linux vb. işletim sistemlerine kurabilirsiniz. N ot : RedHat Enterprise Linux işletim sistemleri dökümanlarının tamanına aşağıdaki belirtilen linkten ulaşabilirsiniz. https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/ Not: CentOS ve Oracle Enterprise Linux işletim sistemlerini ücretsiz olarak indirebilirsiniz. Not: Conga cluster yönetimi için kullanılabilecek grafik arayüzdür. Not: Cluster Sunucu(node) sayısı High Availability ile en fazla 16 dır. Not: Linux cluster ile ilk defa uğraşanlar fence aygıtının ne olduğunu sorabilirler. Fence aygıtı veri bütünlüğü için, sadece bir node üzerinde çalışan cluster servislerinin herhangi bir sorun durumunda diğer node üzerine geçişini sağlayan ve kesintisizliği sağlamak adına veri bütünlüğünü garanti etmek için kullanılır. N ot : Redhat Enterprise Linux Cluster için fence aygıtlarından hangisinin kullanılacağını yada kullanıldığının bilgisi ve uygunluğu http://www.redhat.com/cluster_suite/hardware/ bu link üzerinden kontrol edilmelidir. Fence device seçiminde önerilen network power switch veya SAN anahtar kullanılmasıdır.
  • 10. BÖLÜM – 2 Node’ ların Kurulumu & Veri Depolama Bağlantısı Öncelikle kurucağımız sistemin no-single-point-of-failure(tek bir noktadan olabilecek hataya karşı sistemin çalışmasını sağlamak) olması için cluster sistemin aşağıda belirtildiği gibi yedekli bir yapıda oluşturulması gereklidir. Veri depolama ünitesi çift denetçili(dual-controller) olmalıdır. Ağ portları yedekli bir şekilde yapılandırılmalıdır. (bonding) Sunucu ve veri depolama arasındaki bağlantılar(fiber yada iscsi) yedekli bir şekilde yapılmalıdır. Sunucu üzerindeki işletim sistemlerini kuracağımız diskler korumalı bir şekilde yapılandırılmalıdır. (Raid 1,3,5,6 konfigürasyonları) Veri diskini oluşturacağımız veri depolama ünitesi üzerindeki diskler korumalı bir şekilde yapılandırılmalıdır. (Raid 1,3,5,6 konfigürasyonları yada disk pool mantığı) Sunucu ve veri depolama ünitesi güç kabloları yedekli bir şekilde bağlantıları yapılmalıdır. SAN anahtar varsa, yedekli bir şekilde yapılandırılmalıdır. Fence Device olarak Akıllı PDU (Network power switch) kullanıyorsanız yedekli olması için 2 adet olmalıdır. Burada belirttiğimiz yedekli yapının, cluster kurmak için zorunlu olduğu anlamına gelmemelidir. Sadece yapılacak sistemin kapsamlı bir şekilde yedekliliğinin sağlanmasıyla kesintisiz bir iş sürekliliği çözümü olması düşünülmüştür. İlk olarak iki adet sunucu üzerine Linux işletim sistemleri kurulumlarını gerçekleştiriyoruz. Kurulumu yaparken cluster için gerekli bir çok paket bulunmaktadır bunlarla sonradan uğraşmamak için, kurulum sırasından “High Availability” seçeneğini işaretlemek gerekiyor. Bunun dışında kurulacak Linux işletim sistemini özelleştirebilir istediğiniz paketleri kurarak istemediklerinizi çıkartabilirsiniz. Ben gerektiğinde desktop arayüzünü kullanmak için “Desktop” seçeneğini seçiyorum, sonrasında “High Availability” seçeneğinide işaretledikten sonra, cluster olarak çalıştıracağım “mysql” paketlerini de ekleyerek işletim
  • 11. sistemleri kurulumlarını gerçekleştiriyorum. Not: Cluster yapıda “node” olarak tabir ettiğimiz aslında bizim cluster için kullandığımız sunucularımızdır. Bundan sonraki cluster ile ilgili yerlerdeki ifadelerde “sunucu” yerine “node” ifadesini görebilirsiniz. Node’ların kurulumunu kısaca aşağıdaki gibi sıralayabiliriz; a. Sunucu disklerini Raid1 yapıyoruz. b. Linux işletim sistemi kurulacak ve kurulum içerisinde boot dizin ile beraber; i. / dizini 50GB ii. Swap 16GB iii. /test dizini geri kalan tüm kapasite c. “ip” adreslerinin belirlenmesi ve verilmesi d. “Desktop” seçeneğinin işaretlenmesi e. “High Availability” seçeneğinin işaretlenmesi f. “Mysql” paketlerinin eklenmesi Buradaki amaç cluster kurumları olduğu için, ayrıntılı olarak cluster konfigürasyonlarına ve yönetimine değineceğiz. Bundan dolayı işletim sistemleri gibi kurulumların ayrıntılarına girmiyoruz. Not: Eğer subscription ve support alarak RedHat Enterprise Linux 6 ile Cluster Kurulumlarını gerçekleştirmek istiyorsanız RedHat işletim sistemi ile beraber gerekli Add-On ‘lar: High Availability : Redhat Cluster kurabilmek için gereklidir. Resilient Storage : GFS Clustered dosya sistemi (File System) için gereklidir. Burada Resilient Storage Add-On , High Availability Add-On‘u da içermektedir. Sadece Resilient Storage Add-On alınarak GFS2 dosya sistemli (File System) bir RedHat Cluster kurabilirsiniz. Eğer Cluster ortamınızda GFS2 olmayacaksa sadece High Availability alınması yeterli olacaktır. Not: RedHat Enterprise Linux 6 tek bir sunucu üzerinde dosya sistemi (File System) olarak GFS2 desteklemez. Not: GFS2 dosya sistemi (File System) oluşturulduktan sonra, dosya sisteminin
  • 12. boyutunu azaltamazsınız ancak oluşturmuş olduğunuz dosya sisteminin boyutunu “gfs2_grow” komutuyla arttırabilirsiniz. Not: Linux işletim sistemleri kurulumlarını, sanallaştırma sistemleri üzerinde yapıyorsanız, sanallaştırmanın clone’lama özelliğini kullanılarak ikinci makinenizi clone’lama mantığı ile kısa bir sürede gerçekleştirebilirsiniz. Fakat burada dikkat etmeniz gereken nokta iki makinenin de isminin aynı olmasıdır. Clone’lama bittikten sonra ikinci makinenizin hostname’ini aşağıdaki gibi değiştirmeniz gerekmektedir. Örneğin birinci makinemize node1 ismini vermiştik. Şimdi ikinci makinemizin hostnameni node2 yapacağız. Clone’ladığımız makineye bağlanıyoruz ve aşağıdaki komutlarla hostname’ini node2 olarak değiştiriyoruz; # vi /etc/sysconfig/network # reboot Bu sistemler 2 adet Rhel6_Node1 & Rhel6_Node2olarak aşağıdaki şekil 2.1’deki gibi görülmektedir. Sunuculara veri depolama ünitesi (storage) üzerinden cluster’ın kullanacağı ortak alan diyeceğimiz bir alan verip, her iki linux sunucu üzerinden “fdisk -l” komutuyla ortak olanı görüp görmediğinizi kontrol edebilirsiniz. Ortak alan olarak verilen diskleri görmüyorsanız dert etmeyin okumaya devam edin. Şekil 2.1 Sanallaştırma üzerinde örnek uygulama olarak kurduğum cluster node’ları Biz sistemimizi fiziksel yapı üzerinde kuracağımız için sanallaştırma ile ilgili gerekli bilgileri kısaca vermiş bulunuyoruz.
  • 13. Öncelikle kuracağımız sistemdeki gerekli cihazları belirtelim; 2 adet Sunucu # Linux cluster için 16’ya kadar çıkabilir 1 adet Veri Depolama ünitesi (dual controller) 1 adet SAN anahtar (opsiyonel) 2 adet Network power switch(Akıllı PDU) (Cluster failover yapısı için gereklidir.) 2 adet ağ anahtarı (iç ağ ve dış ağ) # bir tane olmasıda yeterlidir. Ve gerekli güç, ağ, fiber kablolar.. Kuracağımız yapıyı aşağıdaki şekil 2.2’deki gibi resmedebiliriz. Şekil 2.2 Kuracağımız sistemin fiziksel yapısının gösterimi Fiziksel olarak kurulumu gerçekleştirmek için gerekli adımlar; Sunucuları fiber kablolar ile SAN anahtar üzerinden yada SAN anahtarımız yoksa doğrudan yedekli olarak veri depolama ünitesine bağlıyoruz. Yukardaki şekilde görüldüğü üzere, biz doğrudan
  • 14. bağlantıları gerçekleştirdik. Sunucuların ağ(network) yedekliliği (bonding) için2 adet ağ portunu iç ağ anahtarına bağlıyoruz. Yukardaki şekilde görüldüğü üzere iç ağ ve dış ağ yapılarınız varsa herbir sunucuyu dış ağ’a da bağlamalısnız. Sunucuların varsa yönetim portlarınıda ağ anahtarına bağlayıp ip adreslerini veriyoruz. Herhangi bir sıkıntıda uzaktan sunucularımıza bağlanıp işlemlerimizi yapabilmek için gereklidir. Yukardaki şekilde karışıklığa yol açmaması için gösterilmemiştir. Sunucularıngüç kablolarını (power) network power switch’imize bağlıyoruz. Eğer network power switch olarak adlandırılan akıllı PDU üzerinde yer yoksa, veri depolama ünitesinin güç kablosunu normal bir enerji hattınada bağlayabilirsiniz. Fence device için önemli olan sunucuların güç kablolarının network power switch üzerine bağlanmasıdır. Network power switch ve veri depolama ünitesininde yönetimini sağlamak için, iç ağ anahtarına bağlantılarını gerçekleştiriyoruz. A. Network Power Switch Konfigürasyonu Fence device tercihimizi yaparken, Bölüm-1’de belirttiğimiz link üzerinden baktığımızda, fence device olarak kullanılabilecek aygıtları görebiliriz. Genel olarak fence device olarak network power switch kullanımı tavsiye edildiğinden bizde verilen link üzerinden belirtilen, apc network power switch kullanımını tercih ediyoruz. Apc network power switch konfigürasyonu için, console üzerinden network power switch’e bağlanıp ağ yapısından statik bir ip adres verilmesi yeterlidir. Console dan bağlanınca default kullanıcı: “apc” ve şifre: “apc” girdikten sonra network ayarlarına girip statik ip verme işlemini gerçekleştiriyorsunuz. Belirli bir ip adres verildikten sonra eğer gerekirse apc network power switch grafik arayüzüne http://ip_adress bağlanıp istediğiniz ayarları yapabilirsiniz. B. SAN Anahtar Konfigürasyonu; Sisteminizde SAN anahtar(switch) varsa; SAN anahtarlar default olarak
  • 15. üzerlerinde zone konfigürasyonları olmadan gelirler ve SAN anahtarı çalıştırdığınız andan itibaren üzerinden geçen tüm fiber trafiğine izin verirler. SAN anahtarların bu şekilde kullanılması önerilmemektedir. Çünkü SAN anahtarlar bu şekilde zone konfigürasyonları yapılmadan kullanıldığında performans problemlerine yol açabilirler. SAN anahtar üzerindeki bir initiator tarafından gönderilen scsi bus reset komutu switch üzerinde ki diğer tüm initiator ve target tarafından alınacağı için fiber oturumlar sonlanarak tekrar başlamak zorunda kalabilir. SAN yapınızda problemli bir HBA(Host Bus Adapter) bulunması durumunda size beklenmedik problemler çıkartabilir. Bu tarz problemlere geçit vermemek için mutlaka SAN anahtar üzerinde zone konfigürasyonu yapılmasını tavsiye ediyoruz. Zone konfigürasyonu iki farklı şekilde yapılabilir; Software zoning: software zone yaptığında fiziksel olarak hangi port’a hangi kabloyu taktığın önemli değildir. Hardware zoning: hardware zone yaparsan, SAN anahtar üzerindeki herbir port üzerinden zone yaptığın için, SAN anahtar üzerinde hangi porta nereden gelen fiber kabloyu taktığını bilmelisin. Aksi takdirde yanlış kablolamada sistem çalışmaz. SAN anahtar konfigürasyonu üç aşamada gerçekleştirilir; Alias oluşturma Zone oluşturma Yapılan konfigürasyonların kaydedilmesi Not: Zoning yaparken dikkat edilmesi gereken nokta, her bir zone içerisinde sadece 1 adet initiator ve bu initiator tarafından kullanılacak bütün target’lar girilmelidir. Yani her bir sunucudaki her bir HBA portu için zoning yapılması önerilir. SAN anahtar üzerinde yapılacak konfigürasyonları hemhttp://ip_adress üzerinden bağlanıp grafik arayüzden hemde komut satırından yapabilirsiniz. Aşağıda Brocade SAN anahtar üzerinde zoning işlemini yapabilmek için gerekli
  • 16. komutları ve örnekleri bulabilirsiniz. # switchshow # portları ve bu portlara bağlı wwn’leri gösterir. # alishow # mevcut alias’ları gösterir. # alicreate “node1_hba1”, “xx:xx:xx:xx:xx:xx:xx:xx” #wwn’lere alias atama işlemi # nodefind “xx:xx:xx:xx:xx:xx:xx:xx” #ilgili wwn’a ait yapılan tanımlamaları görebiliriz. # zonecreate “ZN_node1_hba1_ControllerA_ControllerB”, “node1_hba1;ControllerA_1; ControllerB_1” # zone oluşturma işlemi, ZN_ ile başlayan kısım zone’a verdiğimiz isimdir. İkinci kısım ise bu zone içerisinde bulunması gereken alias’lardır. # cfgsave # Yapılan işlemleri kaydediyoruz. # cfgcreate “LAB1_2601214”, “ZN_node1_hba1_ControllerA_ControllerB” # SAN anahtar üzerinde aktif bir konfigürasyon yoksa, yaptığımız konfigürasyonu SAN anahtar üzerinde oluşturma işlemi, LAB1_26012014 çalışacak olan konfigürasyonun ismi, ZN_ ile başlayan ise içerisine dahil ettiğimiz zone ismidir. # cfgadd “LAB1_2601214”, “ZN_node1_hba1_ControllerA_ControllerB” # SAN anahtar üzerinde aktif bir konfigürasyon varsa, yeni oluşturduğumuz zone’u konfigürasyona ekleme işlemi # cfgenable “LAB1_2601214” # LAB1_26012014 olarak yeni oluşturduğumuz yada değişiklik yaptığımız konfigürasyon üzerinde yapılan işlemlerin aktif olmasını sağlayan komut Yukardaki komutlarla nasıl SAN anahtar üzerinde konfigürasyon yapıldığını anlattık. Sizlerde bu şekilde konfigürasyonlarınızı yapabilirsiniz. Bunun dışında SAN anahtarla ilgili aşağıda kullanışlı birkaç komut daha verdikten sonra SAN konfigürasyon bölümünü tamamlıyoruz. # cfgshow # SAN anahtar üzerindeki konfigürasyonları gösterir.
  • 17. # switchname # SAN anahtara isim verilmesini sağlar. # ipaddrset # SAN anahtara ip verilmesi sağlar. # ipaddrshow # ip adresi görüntüleme yi sağlar. # date # tarih bilgilerini güncelemeyi sağlar. # sysshutdown # SAN anahtarı güvenli bir şekilde kapatmayı sağlar. C. Veri Depolama Ünitesi(Storage) Konfigürasyonu; Veri depolama ünitesi yönetim arayüzüne bağlanıyoruz; Cluster için 10GB’lık veri (data) lun oluşturuyoruz. Cluster host grubu oluşturuyoruz. Host grubun içerisine cluster yapacağımız node’ları dahil ediyoruz. Cluster host grubuna 10GB’lık lun’u map ediyoruz. Not: Veri depolama ünitesi tarafında yapılacakları her üretici firmanın yönetim arayüzü farklı çalışabileceği için, yapılacak işlemleri mantık olarak anlatıp geçmiş bulunuyoruz. Linux cluster host grubu olarak oluşturduğumuz node1 ve node2 host grubuna 10GB data lun’u map ettiğimize göre. Node’lar yeniden başlatıldığında 10GB’lı data lun’u “fdisk –l” komutu ile node’lar üzerinde görebilir olacağız. Peki sunucularımızı yeniden başlatmak istemesek… Ne Yapabiliriz? Sunucuları Yeniden Başlatmadan (Reboot) Lun Tanıtma İşlemi a. Cluster sunucularına veri depolama ünitesi üzerinden 10GB lun vermiştik. b. Sunucular üzerinden “fdisk –l” komutunu çalıştırdığımda herhangi bir şey gözükmüyor. c. Veri depolama ünitesi üzerinden verdiğim lun’u sunucuları yeniden başlatmadan görebilmek adına aşağıdaki komutu çalıştırabilirsiniz. host0 dan başlayarak ne kadar host varsa çalıştırmak gerekiyor. # echo "- - -" > /sys/class/scsi_host/host0/scan
  • 18. Şekil 2.3 Hostları taramak için echo komutunun kullanımı d. Şimdi tekrar “fdisk –l” komutunu çalıştırdığımda 10GB verdiğim lun’u aşağıdaki şekil 2.4’deki gibi görüyoruz. Şekil 2.4 “fdisk –l” komutunun çıktısının bir kısmı Not: Şekil 2.4’te görüldüğü üzere diskimizi yedekli bağladığımız için 2 yoldan gözükmektedir. Bundan dolayı multipath driverlerın yüklenmesi ve tanımlanması gerekmektedir. Eğer tek yoldan bağlantı yaptıysanız multipath driverlarını yüklemenize gerek yoktur. e. Cluster’a dahil olacak bütün node’lar üzerinde disk tanıtma işlemlerini bu şekilde yapılması gerekmektedir. Not: Sistemde oluşan herhangi bir karışıklıktan dolayı hala diskinizi göremiyorsanız. Aşağıdaki komutta belirtildiği gibi “disk_isimlerini” taratıp
  • 19. “fdisk –l” komutu ile kontrol ettiğinizde diskinizi görüyor olacaksınız. # echo "- - -" > /sys/class/scsi_disk/”disk_isimlerini”/device/rescan Not: Node’ları yeniden başlatmadan (reboot) diskimizi tanıtma işlemindeki "- - -" ne anlama geldiği şuan aklınıza gelmiş olabilir. Cevabını merak ediyorsanız okumaya devam edin… Buradaki üç çizgi channel, SCSI target ID ve LUN anlamına gelmektedir. Bunlar üzerinden sistemdeki herşeyi tarama işlemi yapılıyor. D. Multipath Konfigürasyonu Failover mimaride bir sistem kurduğumuz için cluster’daki sunucularımız, veri depolama ünitesinden verilen disk alanını birden fazla yoldan görecektir. Bundan dolayı multipath ayarlarının sunucularımız üzerinde yapılması gerekmektedir. Peki neden gereklidir ? Multipath konfigürasyonu olmadan aynı disk alanını işaret eden iki farklı aygıt dosyasını kullanarak bir okuma ya da yazma işlemi yaptığımızda verilerin sağlamlığı tehlikeye atılmış olur. Multipath bunun gibi geçersiz okuma ve yazma mekanizmasını devre dışı bırakarak, verilerin sağlıklı ve güvenli bir şekilde tutulmasını mümkün kılar. Bunu sağlamak için her bir multipath aygıtın sahip olduğu değişmeyen, benzersiz bir kimlik kullanır ki buna WWID (World Wide Identifier) denir. WWID sistemden sisteme değişen değerlerden (sda, sdb gibi) tamamen farklı olarak her durumda ve her bilgisayarda aynı paylaşım için aynı değeri verir. Ön tanımlı olarak bir multipath aygıt bu ismi kullanır. Ancak kullanıcılara kendilerinin oluşturacağı başka isimleri de kullanabilme hakkı veren user_friendly_names seçeneği de mevcuttur. Multipath aygıtlarınızın kalıcı bir şekilde sistemde bağlı kalmasını sağlamak için user_friendly_names özellğinin devre dışı bırakılması önerilir. User_friendly_names özelliği devre dışı iken her hangi bir bilgisayarda oluşturulacak multipath, default olarak aygıtın WWID değerini kullanacağı için her bilgisayarda aynı multipath aynı isme/değere sahip olacaktır.
  • 20. Şekil 2.5 Multipath konfigürasyonun gerekliliği DM-Multipath (Device-Mapper Multipath) aşağıdaki özellikleri sağlaması için kullanılabilir; Redundacy (Fazlalık) DM-Multipath aktif-pasif konfigürasyonda failover sağlar yani herhangi bir I/O yollarından (kablo, anahtar yada kontroller) birinde sorun olduğunda, DM-Multipath diğer alternatif yollardan birini kullanır. Improved Performance (geliştirilmiş performans) DM-Multipath aktif-aktif olacak şekilde konfigürasyonu yapılabilir. Bu durumda I/O için herhangi bir zamanda yolları beraber kullanarak performans sağlar. DM-Multipath komponentleri;
  • 21. Tablo 2.1 DM-Multipath Komponentleri DM- Multipath kurulum ve konfigürasyonu: Yeni bir aygıt multipath tarafından algılandığında onu “/dev/..” dizini altında iki ayrı yerde görebilirsiniz: “/dev/mapper” altında bulunan aygıtlar boot işleminden hemen sonra sistemde oluşturulan aygıtlardır. Bu aygıtları multipath aygıtlara erişirken kullanacağız. “/dev/dm-n” altında bulunan herhangi bir aygıtı kullanmanız önerilmez. Bu aygıtlar sistem tarafından dahili kullanım içindir. Node1 ve node2 makinelerimizi failover şeklinde veri depolama ünitesine fiber ile bağlamıştık şimdi aşağıdaki şekillerdeki gibi wwn numaralarını görebiliriz. Şekil 2.6 Node1 üzerinde wwn numaralarını gösteren komut ve çıktısı Şekil 2.7 Node2 üzerinde wwn numaralarını gösteren komut ve çıktısı Adım 1: Device-mapper-multipath rpm paketini aşağıda verildiği gibi yüklüyoruz. Bu paketleri cluster’a dahil edeceğimiz node1 ve node2 makinelerinin her
  • 22. ikisinede yükledikten sonra adım adım aşağıda anlatıldığı gibi cluster’daki bütün node’lar üzerinde multipath konfigürasyonunu yapıyoruz. # rpm -ivh device-mapper-multipath-libs-0.4.9-72.el6.x86_64.rpm # rpm -ivh device-mapper-multipath-0.4.9-72.el6.x86_64.rpm Şekil 2.8 multipath paketlerini yüklemek için çalıştırılan komutların çıktısı Adım 2: Eğer /etc/multipath.conf dosyasını düzenlemek için bir sebebin yoksa default DM-Multipath ayarlarını kullanmak failover için yeterli olacaktır. Bizde default ayarları kullanacağız. # mpathconf --enable --with_multipathd y Şekil 2.9 mpathconf komutunun çalıştırılması # chkconfig --list multipathd Şekil 2.10 multipath komutunun her durumda çalışırlılığının kontrol edilmesi Adım 3: Multipath servisini user_friendly_names seçeneğini devre dışı bırakarak
  • 23. başlatalım. # mpathconf --enable --user_friendly_names n --with_multipathd y # mpathconf Şekil 2.11 mpathconf komutu ile multipath ayarlarının gösterimi Adım 4: Multipath servisini başlatıyoruz # service multipathd start Şekil 2.12 multipath servisinin başlatılması # multipath -ll Şimdi sistemimizin bağlı olduğu iki blok aygıtı (/dev/sdb ve /dev/sdc) aynı kaynak olarak görüp görmediğine bakalım: aşağıda görüldüğü gibi herbir aygıt artık tek bir kaynak olarak gözüküyor. Şekil 2.13 multipath çalışırlılığının kontrolü Yukarda şekilde görüldüğü gibi yolların durumu ready yada ghost ise multipath çalışıyordur. Eğer yollar faulty yada shaky olarak gözüküyorsa multipath çalışmıyordur.
  • 24. Online_satus için olası değerler running ve offline dır. Eğer offline gözüküyorsa SCSI device disable olmuş durumdadır. Sistemimiz olması gerektiği gibi iki blok aygıtı tek bir aygıt olarak algılamış. Yukarıdaki şekil 2.13’de görüldüğü üzere WWID değeri (3600axxxxxxxxxxxxxxxxxxxxxx), sunucunun kendini tanıtmak için gönderdiği string, paylaşım tipi, kapasite ve yazma politikası (wp=rw) görülüyor. Adım 5: Aygıtımız artık /dev/mapper altında WWID numarası ile görünecektir: # ls -l /dev/mapper 3600axxxxxxxxxxxxxxxxxxxxx Fakat mount işlemlerinde WWID yerine, bir alias tanımlayarak kullanmak isterseniz multipath konfigürasyon dosyasında aşağıda belirtildiği gibi alias tanımlaması yapılmalıdır; # vi /etc/multipath.conf multipaths { multipath { alias cluster_disk wwid 3600axxxxxxxxxxxxxxxxxxxxx } } # service multipathd restart Artık ortak disk alanımız “/dev/mapper” altında cluster_disk ismiyle görülecektir. Adım 6: “/etc/fstab” dosyasına gerekli kaydı girerek, her boot işleminde fiber diskimizin otomatik olarak sisteme bağlanmasını(mount) sağlayabilirsiniz. Ancak biz cluster mimaride çalışacağımız için fstab’a eklemiyoruz. Çünkü cluster node’lardan aktif olan node diski üzerine alacaktır. Aşağıdaki komutları çalıştırarak kullanılan üretici, kart ve aygıt bilgilerini
  • 25. görebilirsiniz. Şekil 2.14 Device Bilgilerinin Gösterimi Not: Aşağıda verilen komut bizlere linux işletim sistemi içerisinden üretici bazlı default multipath konfigürasyonları verir. Sisteminizde kullandığınız üretici ürünlerine göre, gerekli görüldüğü takdirde multipath konfigürasyonunu düzenleyebilirsiniz. #cat /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf.defaults Bu komutun çıktısını EK-1 de bulabilirsiniz. E. Bonding / Teaming Konfigürasyonu İş sürekliliği için sistemimizi cluster mimaride kurduğumuz gibi yedekli bir yapı oluşturduğumuzdan dolayı, ağ (network) portları tarafında da yedeklilik adına aşağıdaki şekil 2.15’de görüldüğü gibi bonding konfigürasyonunu gerçekleştirebilirsiniz. Şekil 2.15 ağ (network) port yedekliliğinin gösterimi Aşağıdaki şekilde görüldüğü gibi eth0 ve eth1 arasında bond0 adında bir bonding işlemi yapacağız.
  • 26. Şekil 2.16 ifconfig komutuyla network portlarının gösterimi Adım 1: #vi /etc/modprobe.conf # komutuyla konfigürasyon dosyası oluşturarak bonding işlemi için alias tanımlıyoruz. “alias bond0 bonding” yazıp, kaydediyoruz. Şekil 2.17 vi komutuyla alias tanımlama #vi /etc/modprobe.d/bonding.conf # komutuyla bonding.conf adında bir dosya oluşturup içerisine “alias bond0 bonding” yazıp kaydediyoruz. Şekil 2.18 cat komutuyla alias’ın gösterimi Adım 2: Şimdi “/etc/sysconfig/network-scripts/” directory altında ifcfg-bond0 adında bir dosya oluşturup aşağıdaki şekil 2.19’da görüldüğü gibi bonding interface konfigürasyon dosyasını oluşturuyoruz. Şekil 2.19 bonding interface konfigürasyonun gösterimi
  • 27. Adım 3: Şimdi de “/etc/sysconfig/network-scripts/” altında ifcfg-eth0 ve ifcfg-eth1 network portlarının dosyalarını aşağıdaki şekil 2.20’deki gibi düzenliyoruz. Not: Bu işlemleri yaparken eth dosyalarını kopyalamayınız. Çünkü MAC ve DEVICE adları herbir interface için farklıdır. Şekil 2.20 network portlarının bonding konfigürasyonu için düzenlenmesi ve gösterimi Adım 4: Konfigürasyoları yüklemek için network servislerini restart ediyoruz. # service network restart # Komutu çalıştırdığımızda aşağıdakine benzer çıktı almalıyız. Shutting down interface eth0: Device state: 3 (disconnected) [ OK ] Shutting down interface eth1: Device state: 3 (disconnected) [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface bond0: Active connection state: activated Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/15 [ OK ] Bringing up interface eth3: Active connection state: activated Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/16 [ OK ]
  • 28. Adım 5: Aşağıdaki şekilde kontrol amaçlı bond0 network interface’in ip adresini alıp almadığını kontrol ediyoruz. Ayrıca eth0 ve eth1 portlarının “SLAVE” olduğunu ve bond0 network interface’in “MASTER” olduğunu görebiliriz. Bir diğer dikkatinizi çekeceğim nokta MAC adreslerinin aynı olduğu durumdur. # ifconfig -a Şekil 2.21 ifconfig komutuyla son durumun gösterimi Adım 6: Bonding işlemlerini tamamladık. Şimdi isterseniz network portlarının yedekli çalışıp çalışmadığını test edebilirsiniz. Test aşamaları Network portlarından eth0’ın LAN kablosunu çıkarıyoruz. ifconfig -a #komutunu çalıştırıyoruz ve durumu gözlemlediğimizde bond0 arayüzün UP ve RUNNING ve eth1 arayüzüde RUNNING ise bondig konfigürasyonu düzgün
  • 29. çalışıyor demektir. Network portlarından eth1’ın LAN kablosunu çıkarıyoruz. ifconfig -a #komutunu çalıştırıyoruz ve durumu gözlemlediğimizde bond0 arayüzün UP ve RUNNING ve eth0 arayüzüde RUNNING ise bondig konfigürasyonu düzgün çalışıyor demektir. Bonding konfigürasyon bilgilerini aşağıdaki komutla görebilirsiniz. cat /proc/net/bonding/bond0 Bonding mode durumunu doğrulamak için aşağıdaki komutu kullanabilirsiniz. cat /sys/class/net/bond0/bonding/mode Bonding mode durumunu değiştirmek istersek, “ifcfg-bond0” konfigürasyon dosyasındaki “mode” kısmını değiştirebiliriz. cat /etc/sysconfig/network-scripts/ifcfg-bond0 |grep -i mode Policy Details Policy Name Code Description balance-rr 0 Round-Robin policy for fault tolerance active-backup 1 Active-Backup policy for fault tolerance balance-xor 2 Exclusive-OR policy for fault tolerance Broadcast 3 All transmissions are sent on all slave interfaces 802.3ad 4 Dynamic link aggregation policy balance-tlb 5 Transmit Load Balancing policy for fault tolerance balance-alb 6 Active Load Balancing policy for fault tolerance Tablo 2.2 bonding policy değer tablosu bonding yapılmış konfigürasyonları listelemek için aşağıdaki komutu kullanabilirsiniz.
  • 30. cat /sys/class/net/bonding_masters Not: Sunucu tarafında bonding yaptıktan sonra, sunuclara bağlanmada bir sıkıntı yaşıyorsanız ve bir yavaşlık söz konusu ise, ağ anahtarı tarafında LACP yapılmadığından dolayıdır. Sunucu tarafında bonding yaptıktan sonra ağ anahtarı tarafında da bonding yapılan portların LACP yapılması gereklidir.
  • 31. BÖLÜM – 3 Cluster Konfigürasyonu İçin Sunucuların Hazırlanması Bölüm 2’de anlatılan çalışmaları yaptıktan sonra, sunucularımıza(node’lar) geri dönüyoruz ve cluster konfigürasyonu için gerekli iki rpm paketini Linux DVD’sini veya sunucularımıza yönetim portları üzerinden uzaktan bağlanıp “Linux.iso” dosyasını mount ederek yüklememiz gerekiyor. Sunucuların yönetim ip adresinden cluster’a dahil etmek istediğimiz sunucularımıza sırasıyla bağlanıp “Linux.iso” mount ediyoruz. Siz isterseniz Linux DVD’sini de mount edebilirsiniz. Mount işleminin yaptıktan sonra aşağıdaki komutları çalıştırarak rpm paketlerini cluster’a dahil edeceğimiz her bir node’a yüklüyoruz. # mount /dev/cdrom /media/ -o loop # mount edeceğiniz “.iso” dosyasının yerine göre belirteceğiniz yol(path) değişiklikleri olabilir. # cd /media/Packages/ Bu lokasyonda aşağıdaki komutları giriyoruz ve rpm paket yükleme işlemlerini gerçekleştiriyoruz. # rpm -ivh lvm2-cluster-2.02.87-6.el6.x86_64.rpm # rpm -ivh gfs2-utils-3.0.12.1-23.el6.x86_64.rpm Paketler aşağıdaki şekil 3.1’de görüldüğü gibi yükleneceklerdir. Bu paketleri cluster’a dahil etmek istediğimiz herbir node üzerine yüklemeyi unutmuyoruz. Bizim cluster yapımız iki node’dan oluştuğu için her iki node üzerine rpm paket yükleme işlemlerini gerçekleştiriyoruz.
  • 32. Şekil 3.1 Paketlerin node1 üzerine yüklenmesinin gösterimi Şekil 3.2 Mount işlemi ve paketlerin node2 üzerine yüklenmesinin gösterimi Şimdi aşağıda verilen komutları her iki node içinde uyguluyoruz. Bu komutlar Linux Cluster’da istenmeyen servisleri disabled eder ve çalışması gereken servisleri de yeniden başlatma (reboot) sonrasında otomatik olarak enable eder. # vi /etc/selinux/config # selinux kullanmak istemiyorsanız konfigürasyon dosyasından SELINUX=disabled yazmalısınız. Bu işlem bütün selinux fonksiyonlarını disable eder. # chkconfig iptables off # firewall kapatmak istemiyorsanız cluster için gerekli ip portlarının erişime açılmasını sağlamalısınız. # chkconfig ip6tables off # chkconfig acpid off # chkconfig NetworkManager off # bu işlemi yaptığında network hatası alabilirsiniz bu durumda grafik arayüz yerine komut satırından /etc/sysconfig/network-script/ dizini altındaki ifcfg-eth dosyasını düzenleyebilirsiniz. # chkconfig luci on # chkconfig ricci on
  • 33. Şekil 3.3 Servislerin node1 üzerinde kapatılıp açılması işlemi Şekil 3.4 Servislerin node2 üzerinde kapatılıp açılması işlemi Bu işlemler sonrası her iki node’u yeniden başlatıyoruz(reboot). # reboot Not: NetworkManager kullanımı cluster node’lar üzerinde desteklenmiyor. Eğer işletim sistemlerini kurarken Ne tworkManage rkurulmuşsa, ya NetworkManagerkaldırmalısınısız yada disable etmelisiniz. Biz yukarda görüldüğü gibi disable ediyoruz. N o t : E ğ e r NetworkManagerçalışıyorsa yada chkconfig komutu ile çalıştırılabilecek şekilde düzenlenmişse cman servisi çalışmayacaktır. Sistem yeniden açıldıktan sonra luci ve ricci servisleri çalışacak ve kapanması gereken servislerde kapanmış olacaktır. Hazırlıklara devam ediyoruz şimdi de her iki node üzerinde hosts dosyalarına karşı node’un ip adres’lerini yazacağız. Bu sayede her bir node, isimleri ile birbirlerine ulaşabileceklerdir. Eğer ip adreslerini hosts dosyalarına yazmak istemiyorsanız bu işlemi DNS sunucu üzerinde yapmanız gereklidir. Biz node’larımızın ip adres’lerini hosts dosyalarına yazarak devam ediyoruz. # vi /etc/hosts # cluster’a dahil edeceğimiz herbir node için bu işlemi uyguluyoruz. vi editörü açılınca aşağıdaki şekilde görüldüğü gibi ip adres-isim bağlantılarını ilave ediyoruz ve vi editörünü kaydettikten sonra cat komutu ile durumu aşağıdaki gibi görebiliriz.
  • 34. Şekil 3.5 Node1 üzerinde ip adres’lerin hosts dosyasına yazılması Şekil 3.6 Node2 üzerinde ip adres’lerin hosts dosyasına yazılması Bu işlemleri de gerçekleştirdikten sonra node’ları birbirleri üzerinden isimleri ile pingleyerek test ediyoruz. Aşağıdaki şekil 3.7 ve 3.8’de görüldüğü üzere node’ların birbirine ping atabildiğini görüyoruz. Şekil 3.7 Node1 üzerinde ping atma işlemi Şekil 3.8 Node2 üzerinde ping atma işlemi Şimdi daha ilerde sorun çıkarmaması içinricci servisinin kullandığı şifreyi belirleyelim. Ricci servisi cluster konfigürasyon bilgilerinin güncelliğinden, cluster node’larının haberdar olmasını sağlar. # passwd ricci
  • 35. Şekil 3.9 Node1 üzerinde ricci servisine şifre belirleme işlemi Şekil 3.10 Node2 üzerinde ricci servisine şifre belirleme işlemi Not: RedHat Enterprise Linux 6’dasystem-config-cluster ara yüzü bulunmamaktadır. Bunun yerine daha kullanışlı bir web arayüzü bulunmaktadır. Son olarak selinux ve firewall durumlarını kontrol edip cluster için çok önemli olmasada bazı yerlerde yaşanan küçük sıkıntılardan dolayı zaman senkronizasyonu için NTP’yi aşağıdaki komutları çalıştırarak her iki node içinde aktif hala getiriyoruz. # sestatus –v # komutu ile selinux durumunu kontrol edebiliriz. # iptables –L # komutu ile firewall durumunu kontrol edebiliriz. Şekil 3.11 Node1 üzerinde selinux ve firewall durumlarının gösterimi
  • 36. Şekil 3.12 Node2 üzerinde selinux ve firewall durumlarının gösterimi Zaman senkronizasyonu (Time synchronization) NTP; # chkconfig ntpd on # ntpdate pool.ntp.org # /etc/init.d/ntpd start Şekil 3.13 ntp ayarlarının yapılması işlemi Buraya kadar olan adımları eksiksiz ve problemsiz gerçekleştirdiyseniz grafik arayüz çalışacaktır. Artık cluster konfigürasyonuna grafik arayüzden devam edebiliriz. Cluster konfigürasyonu ve yönetimini bölüm-4’te grafik arayüz üzerinden anlattıktan sonra, bölüm-5’te de c c s komutu ile komut satırından anlatıyor olacağız.
  • 37. BÖLÜM – 4 Cluster Konfigürasyonu & Yönetimi Linux cluster konfigürasyonunu ve yönetimini grafik arayüzden(Conga) veya ccs komutuyla yapabilirsiniz. Cluster yönetimini sağlamak ve sürdürmek için grafik arayüzü öğrendikten sonra komut satırından da bu işlemlerin yapılması ve öğrenilmesinin, grafik arayüzde yaşanabilecek sıkıntılara rağmen sistemin çalışırlılığının devamı ve kontrolü için gerekli olacaktır. Bu bölümde cluster konfigürasyonlarını ve yönetimini grafik arayüzden anlatacağız. Bölüm 5’te de komut satırına değiniyor olacağız. Bu bölümde cluster konfigürasyonu ve yönetimini aşağıdaki gibi ele alıyor olacağız; Cluster Oluşturma(Create) Quorum Disk Oluşturma (opsiyonel) Data Diski Oluşturma Resources Failover Domains Fence Devices Services Groups Cluster Konfigürasyon Dosyasını İnceleme Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma A. Cluster Oluşturma(Create) Şimdi tarayıcı (browser) adres kısmına https://ip-adres:8084/ adresini yazarak yada ip adresi yerine isim girerek arayüze erişebiliriz. Eğer firewall aktif ise uzaktan bağlanabilmek için 8084’nolu portun açılması gerekiyor. Grafik arayüzün çalışmasını sağlayan servisler luci ve ricci servisleridir. Daha öncede söylediğimiz gibi luci servisini başlatmadan önce cluster node’lar üzerindeki “port 11111” portunun açık olması gerekiyor. Güvenlik duvarı (Firewall) kapalı ise port açma işlemini gözardı edebilirsiniz. Tarayıcı (browser) adres kısmına gerekli bilgileri yazdıysanız grafik arayüz
  • 38. aşağıdaki şekil 4.1’deki gibi karşınıza gelecektir. Şekil 4.1 Cluster arayüz ekranına giriş Username kısmına root yazalım. Password kısmına da root password’ünü yazarak cluster konfigürasyon arayüz ekranına giriş yapıyoruz. Luci cluster konfigürasyon ekranı aşağıdaki gibi gelecektir. Aşağıdaki şekil 4.2’de görüldüğü gibi “Homebase” sekmesinde herhangi bir şey görünmüyor çünkü herhangi bir cluster konfigürasyonu yapmadık. Ayrıca sağ üst tarafta “About” sekmesini tıklayarak cluster sistemi hakkında bilgileri görebilirsiniz. “Admin” sekmesini tıkladığımızda ise luci sunucu loglama konfigürasyon ayarlarını istediğimiz bir şekilde değiştirebileceğimiz ve luci grafik arayüzünü kullanmasını istedğimiz kullanıcıları oluşturup izinlerini belirleyebileceğimiz bir bölüm karşımıza çıkmaktadır. Bu şekilde farklı kullanıcılarında cluster konfigürasyon arayüzüne erişebilmesini sağlayabiliriz. Not: luci için boşta bekleme süresi vardır. 15 dakika herhangi bir şey yapmadan beklerseniz zaman aşımından dolayı oturum otomatik kapanacaktır.
  • 39. Şekil 4.2 Luci cluster konfigürasyon arayüzü Cluster konfigürasyonunu başlatmak için “Manage Clusters” sekmesini tıklıyoruz. Karşımıza aşağıdaki ekran gelecektir. Ekranda da görüldüğü gibi bize 3 seçenek sunmaktadır; “Add” var olan cluster konfigürasyonuna yeni bir node eklemek istediğimizde kullanabileceğimiz sekmedir. “Create” yeni bir cluster yapısı oluşturmak için kullanabileceğimiz sekmedir. “Remove” sekmesi kurduğumuz bir cluster yapıyı kaldırmak için kullanabileceğimiz sekmedir. Şimdi biz yeni bir cluster yapısı oluşturacağımız için“Create” diyerek Cluster konfigürasyonuna devam ediyoruz.
  • 40. Şekil 4.3 Manage clusters sekmesinin gösterimi “Create” sekmesini tıkladığımızda karşımıza aşağıdaki şekil 4.4’deki ekran gelecektir. Şekil 4.4 Cluster oluşturma ekranı Cluster yapımızı kurmak için belirlediğimiz bir cluster ismini vererek başlıyoruz. Ben test amaçlı olduğu için cluster ismini “mycluster” olarak belirledim. Sizlerde belirlediğiniz bir ismi verebilirsiniz. Daha sonra tüm node’larda aynı password’ün kullanılması için “use the same password for all nodes” kutucuğunu işaretliyoruz. Yüksek Erişilebilirlik(High Availability) için gerekli paketleri önceki bölümlerde yüklediğimiz için burada “Use Locally Installed Packages” kutucuğunu işaretli olarak bırakıyoruz. Eğer cluster yazılım paketlerinin güncellenmesini istiyorsanız “Download Packages” seçeneğini
  • 41. işaretlemelisiniz. Birde en altta “Enable Shared Storage Support” kutucuğu işaretledikten sonra “create cluster” diyoruz ve cluster’ı aşağıdaki şekil 4.5’de görüldüğü gibi oluşturmaya başlıyoruz. Şekil 4.5 Cluster oluşturma işlemi gösterimi Ve cluster’ı oluşturduk. Aşağıdaki şekil 4.6’da görüldüğü gibi “mycluster” adında 2 node’lu cluster sistemimizi görmekteyiz. Node’ların status bölümüne baktığımızda cluster üyesi olduklarını görebiliyoruz. Bu yapıyı gerektiğinde 16 node’lu bir sisteme dönüştürebileceğimizi söylemiştik. Şekil 4.6 Cluster bilgilerinin gösterimi Not: Eğer ricci servisi herhangi bir node üzerinde çalışmıyorsa, cluster oluşturma işlemi başarısız olacaktır. Cluster oluşturma işlemini tamamlandıktan sonra yukardaki şekil 4.6’da
  • 42. görüldüğü üzere cluster yapının yönetimi adına, artık cluster’daki herhangi bir node’u silebilir(Delete), yeniden başlatabilir(Reboot), cluster’dan çıkarabilir ve cluster’a dahil edebilir yada cluster’a yeni bir node ekleme(Add) işlemini yapabilirsiniz. Cluster yapısını oluşturduk ancak hala yapılacak çok işimiz var. Hatta cluster konfigürasyonalarının ince ayarlarına yeni başlıyoruz diyebilirim. Yukardaki ekranda görüldüğü gibi cluster yapı oluşturulduktan sonra yeni sekmeler ortaya çıktı. Şimdi bu sekmeleri gerektiği gibi inceleyerek sistemimizin konfigürasyonlarına devam ediyoruz. B. Quorum Disk Oluşturma (opsiyonel) Failover-server için Linux cluster yapının bize sunduğu network power switchlerimizi kullanacağımız için Quorum Disk oluşturma işlemini opsiyonel olarak gösteriyoruz. Linux cluster sunucularda failover için önerilen yapı fence device mantığının kullanımıdır. Quroum disk oluşturma işlemi için daha önceden hazırladığım her iki sunucunun da fiber interface’i üzerinden görebildiği “sdb” diskini kullanacağım. Sizin altyapınızda ISCSI yapı mevcutsa onu da kullanabilirsiniz. Bu diski, quorum diski olarak özel bir format ile hazırlamak gerekiyor. Cluster’daki herhangi bir node üzerinden partition oluşturma işlemini aşağıdaki şekil 4.7’de görüldüğü gibi gerçekleştiriyoruz.
  • 43. Şekil 4.7 quorum disk için partition oluşturma işlemi Partition oluşturma işlemlerini tamamlandıktan sonra, quorum disk oluşturmak için, aşağıdaki komutu kullanabilirsiniz. # mkqdisk -c /dev/sdb1 -l qdisk
  • 44. Şekil 4.8 Quroum disk oluşturma işlemi Oluşturduğumuz quorum diskimizi aşağıdaki komutu çalıştırarak kontrol ediyoruz. # mkqdisk –L Şekil 4.9 mkqdisk -L komutunun gösterimi Yukardaki şekilde görüldüğü üzere quorum diskimiz hazır. Şimdi cluster grafik ara yüzü kullanarak mycluster adlı cluster’ımıza bu diski atayalım. Şekil 4.10 cluster’a quroum disk tanıtma işleminin gösterimi Quorum diskimizi cluster yapıya dahil etmek için;
  • 45. Configure sekmesini tıklıyoruz. QDisk sekmesini tıklıyoruz. ve quorum diski konfigürasyonu yapacağımız ekran karşımıza gelir. Use a Quorum Disk kutucuğunu işaretliyoruz. By Device Labelkutucuğunuda işaretleyip altındaki bölüme label olarak belirlediğimiz “qdisk” adını yazıyoruz. “Apply” butonuna tıklıyoruz ve quorum disk konfigürasyonunu tamamlamış bulunuyoruz. # clustat # Komutu ile cluster’ın durumunu görelim. Şekil 4.11 Quroum disk eklenmiş cluster yapının gösterimi Quorum diskimizi cluster’daki node’lara tanıttıktan sonra, “/etc/cluster/cluster.conf” dosyasında aşağıda belirtildiği gibi küçük bir ekleme yapıyoruz. # vi /etc/cluster/cluster.conf # vi editörü ile konfigürasyon dosyasını açıyoruz ve “<totem token="21000"/>” cluster’daki herbir node üzerinde bu eklemeyi gerçekleştiriyoruz. Şekil 4.12 cluster.conf dosyasına ekleme işleminden sonraki gösterim Biz kuracağımız cluster yapı içerinde quorum disk kullanmayacağımız için quorum diski bilmek açısından opsiyonel olarak quorum disk oluşturma işlemlerini adım adım anlatmış bulunuyoruz. Şimdi cluster sistemimize kaldığımız yerden devam
  • 46. edelim. C. Data Diski Oluşturma Şimdi cluster sunucuların birlikte aynı anda yazıp kullanacakları data alanını oluşturacağız. Bu işlem içincli ara yüzünü yani komut satırını kullanıyoruz. Bölüm 2’de veri depolama ünitesinden verdiğimiz ve node’lara tanıttığımız diski cluster yapının kullanımına sunmak için hazır hale getireceğiz. Bu alanı cluster’a dahil olan sunucular kullanabilecek ve görecekler. Zaten Fiber yapı üzerinden ortak alan olarak belirlediğimiz diskimizi diğer bir tabirle LUN’u fiziksel olarak cluster’a dahil sunuculara göstermiştik. Data alanı olarak cluster yapıya vereceğimiz diskimizin yapısını LVM yapacağız çünkü ilerde disk alanının büyütülmesi istendiğinde kolaylıkla disk alanının arttırımını yapabiliyor olacağız. Not: Veri Depolama ünitesinden verilen disk 2TB’tan büyükse “fdisk” komutu yerine “parted” komutu ile diskin formatı GPT olarak değiştirilmelidir. Çünkü 2TB’dan büyük diskleri MBR disk formatı desteklememektedir. Aksi takdirde örneğin veri depolama ünitesinden disk olarak 10TB lun verdiğinizi düşünürsek. Eğer GPT formatına geçmeden MBR disk formatı ile formatlarsanız 10TB yerine diskinizi 2TB görüyor ve kullanabiliyor olabileceksiniz. Not: Data alanı olarak verdiğiniz disk üzerinde gfs2 dosya sistemi (file system) kullanacaksanız LVM yapmalısınız. Bizim data diskimiz 2TB’tan daha küçük olduğu için “fdisk” komutu ile işlemlerimize devam ediyoruz. Bu bölümün sonuna doğru2TB’tan daha büyük diskler kullanan arkadaşlar için “parted” komutunun kullanımına da değineceğim. # fdisk /dev/mapper/3600a0b80005a0e42000012fa52a467e7
  • 47. Şekil 4.13 Disk üzerinde partition oluşturma işlemi Yukarıdaki komut çıktısı yorumlandığında ; - Command (m for help): bölümünde “add new partition” anlamına gelen “n” tuşuna basılır ve ardından “Enter” tuşuna basılır. - Command action: bölümünde “p” tuşuna basılır ve ardından “Enter” tuşuna basılır. - Partition number: bölümünde “1” tuşuna basılır ve ardından “Enter” tuşuna basılır. - First cylinder (1-1305, default 1): bölümünde herhangi bir değer verilmeden ön tanımlı olan değer kabul edilir ve “Enter” tuşuna basılır. - Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): bölümünde herhangi bir değer verilmeden ön tanımlı olan değer kabul edilir ve “Enter” tuşuna basılır. partition oluşturulduktan sonra “t” tuşuna basılarak ilgili bölümün tipi seçilmelidir. Bunun için aşağıdaki şekilde görüldüğü gibi işlemlere devam ediyoruz.
  • 48. Şekil 4.14 Disk partition oluşturmadan sonraki type seçim işlemi - Hex code (type L to list codes): bölümünde oluşturulacak disk bölümü tipinin hex kodu belirlenmelidir. Lvm disk dosya sisteminin hex kodu “8e” dir. Hex code (type L to list codes): bölümüne “8e” yazılarak “Enter” tuşuna basılır. - Son olarak işlemler tamamlandıktan sonra, işlemlerin kaydedilmesi için “w” tuşuna basılıp “Enter” tuşuna basılarak işlemler tamamlanır. Disk bölümü oluşturuldu. Oluşturulan disk bölümünü “/dev/…” dizini altında görülebilir. Bunun için aşağıda belirtilen komutu çalıştırabilirsiniz. # ll /dev/mapper/3600a0b80005a0e42000012fa52a467e7* Şekil 4.15 Diskimiz ve oluşturulan partition Komut çıktısı yukarıdaki gibidir. Görüldüğü gibi disk bölümü oluşturulmuştur. Şimdi LVM yapısını oluşturmaya başlayabiliriz. LVM yapısının ilk aşaması olarak aşağıdaki gibi fiziksel volume oluşturuyoruz. # pvcreate /dev/mapper/3600a0b80005a0e42000012fa52a467e7p1 # partition oluşturduğumuz diskimizi yada varsa disklerimizi fiziksel volume yapıyoruz Şekil 4.16 Fiziksel volume oluşturma işlemi
  • 49. Oluşturduğumuz fiziksel volume’ü “pvdisplay” komutuyla aşağıdaki şekil 4.17’deki gibi görebiliriz. LVM yapısını oluşturma işlemine volume group oluşturarak devam ediyoruz. Volume group oluşturduktan sonrada birden fazla fiziksel diskiniz varsa bunları volume group içerisine atıyoruz. Şekil 4.17 pvcreate komutu sonrası oluşturulan fiziksel volume gösterimi # vgcreate –c y vg_dbcluster /dev/mapper/3600a0b80005a0e42000012fa52a467e7p1 # Volume group oluşturma ve daha önce oluşturduğumuz fiziksel volume’ü , volume group içerisine dahil etme işlemi. Birden fazla fiziksel volume varsa onları da oluşturduğunuz volume group’a dahil etmeniz gerekiyor. Şekil 4.18 Volume group oluşturma işlemi Oluşturduğumuz volume group’u “vgdisplay” komutuyla aşağıdaki şekil 4.19’daki gibi görebiliriz. Fiziksel volume ve volume group oluşturma işlemleri tamamlandığına göre artık mantıksal(logical) volume yada volume’ler oluşturabiliriz.
  • 50. Şekil 4.19 vgcreate komutu sonrası oluşturulan volume group gösterimi # lvcreate -l 100%FREE -n lv_db vg_dbcluster Şekil 4.20 Logical volume oluşturma işlemi Oluşturduğumuz mantıksal(logical) volume lvdisplay komutuyla aşağıdaki şekil 4.21’deki gibi görebiliriz. Mantıksal(logical) volume’de oluşturduğumuza göre, oluşturduğumuz mantıksal volume’ü kullanmak istediğimiz dosya sistemi (file system) ile formatlayabiliriz.
  • 51. Şekil 4.21 lvcreate komutu sonrası oluşturulan logical volume gösterimi # mkfs.gfs2 -p lock_dlm -t mycluster:gfs2 -j 4 /dev/mapper/vg_dbcluster- lv_db # Eğer dosya sistemi olarak gfs2 kullanmak istiyorsanız diskinizi gfs2 gerektiren parametrelerle formatlamalısınız. Kullandığınız isimlerde(vg,lv) büyük harf, küçük harf gibi durumlara dikkat etmek gerekiyor. Benim cluster’ın ismi “mycluster” olduğu için “mycluster” yazılı siz de kendi clusterınızın adını yazmalısınız. Şekil 4.22 gfs2 dosya sistem ile formatlama işlemi # mkfs.ext4 /dev/mapper/vg_dbcluster_lv_db # ext4 dosya sistemini kullanmak istiyorsanız. Formatlama işlemini burada belirtildiği gibi gerçekleştirmelisiniz.
  • 52. Şekil 4.23 ext4 dosya sistem ile formatla işlemi Formatlama işinden sonra kullanıma hazır bir disk elde edilir. Artık diskimiz cluster yapının kullanımına hazırdır. Şimdi başta kısaca bahsettiğimiz GPT formatına geri dönelim… Sisteminizde eğer 2TB’tan daha büyük disklere ihtiyacınız varsa fdisk komutu ile disk yönetimi yapamazsınız. Eğer yapmaya çalışırsanız da başta söylediğim gibi diskiniz ne kadar büyük olursa olsun formatladıktan sonra sadece 2TB kullanılabilir disk görüyor olacaksınız. 2TB’tan daha büyük lun’lar oluşturamayacak mıyız? Peki bu sorunu nasıl çözebiliriz… İlk başta var olan disklerimizi ve partition’larımızı incelemek adına aşağıdaki komutu çalıştırabilirsiniz. # ll /dev/mapper/
  • 53. Şekil 4.24 Sunucu üzerinde bulunan diskler ve partition’ların gösterimi Ekran çıktısında görüldüğü gibi vg_node1.. ile başlayanlar bizim local diskimiz ve diskimiz üzerinden işletim sistemi kurulumunda oluşturduğumuz partition’larımız. wwid numarası ile başlayan bizim veri depolama ünitesinden cluster’daki node(sunucu)’larımıza tanıttığımız diskimizdir. Parted komutu ile hem GPT hemde MBR formatında diskler oluşturabilir ve yönetebilirsiniz. Eğer diskiniz 2TB’tan büyükse zaten fdisk komutu yerine parted komutunu kullanmak zorundasınız. # parted /dev/mapper/3600a0b80005a0e42000012fa52a467e7 #parted komutunu üzerinde işlem yapacağımız diskimizi belirterek çalıştırdığımızda aşağıdaki ekran çıktısı ile karşılaşıyoruz. Ekran çıktısında görüldüğü gibi help komutunu çalıştırırsak, parted bölümünde kullanabileceğimiz komutların listesini bizlere sunacaktır. Şekil 4.25 parted komutunun çalıştırılması
  • 54. Şekil 4.26 help komutunun çıktısı “Parted” komutuyla diskimizin yönetimine başladığımıza göre print komutu anlamına gelen “p” tuşuna basıp enter diyoruz ve diskimizin bilgilerine ulaşıyoruz. Şekil 4.27 diskimizin bilgilerinin gösterimi Şekilde görüldüğü gibi partition table “msdos” olarak gözüküyor yani MBR formatında demektir. Eğer diskiniz 2TB’tan büyükse yada diskiniz 2TB’tan küçük olsada GPT formatını kullanmak istiyorsanız partition table bölümünde GPT yazmasını sağlamalısınız. Bunun için aşağıdaki verilen komutu kullanabilirsiniz. (parted) mklabel gpt
  • 55. Şekil 4.28 Diskimizin GPT formatına dönüştürülmesi ve gösterimi Şekilde de görüldüğü gibi “mklabel” komutunu çalıştırdığımızda işleme devam etmek ister misin sorusuna “yes” cevabının verirseniz disk türü GPT olarak değişecektir. Formatı GPT yaptığımıza göre artık istediğimiz gibi partition yada partition’lar oluşturabiliriz. (parted) mkpart primary 1 5G Şekil 4.29 Diskimiz üzerinden partition oluşturma işlemi Yukardaki şekilde görüldüğü gibi, 10GB diskimizden 5GB’lık bir partition oluşturma işlemini gerçekleştiriyoruz. Geriye kalan kapasiteyide istediğimiz gibi başka bir partition oluşturabiliriz. Oluşturduğumuz partition’ı silmek için; aşağıdaki komutta “1” sayısı partition number’dır. Birden fazla partition varsa ve hangisini silmek istiyorsanız onun partition number’ını girmelisiniz. (parted) rm 1
  • 56. Şekil 4.30 partition silme işlemi Biz elimizdeki diskimizi tek partition yapmak istiyoruz. Diski tek parça görmek için aşağıdaki komutu kullanabilirsiniz. (parted) mkpart primary ext4 1 -1 Şekil 4.31 Diskimizi tek partiiton yapma işlemi Partition oluşturma işlemlerini tamamladığımıza göre parted bölümünden çıkıyoruz. (parted) quit # fdisk -l # kontrol amaçlı “fdisk -l” komutunu çalıştırdığınızda GPT formatlı bir partition oluşturulduğunu görüyor olacaksınız. Diskimizi kullanılabilir bir hale getirmek için son aşama olarak kullanmak istediğimiz dosya sistemi (file system) formatıyla diskimizi formatlama işlemini gerçekleştiriyoruz. # mkfs.ext4 /dev/mapper/3600a0b80005a0e42000012fa52a467e7p1
  • 57. Şekil 4.32 ext4 dosya sistem ile formatla işlemi Yukardaki şekilde görüldüğü gibi ext4 dosya sistemi ile formatlama işleminide yaptığımıza göre cluster yapıda ortak alan olarak kullanacağımız diskimizi kullanılabilir hale getirmiş oluyoruz. Diskimiz hazır hale geldiğine göre cluster yapıya dahil ederek mysql veri tabanımızın kullanımına sunabiliriz. Örnek olması açısından diskimizi cluster yapıya dahil etme işlemini cluster.conf dosyası üzerinden yaparak grafik arayüz olmadan da işlemlerimizi yapabileceğimizi göstereceğim. Öncelikli olarak cluster yapıyı aşağıdaki komutları çalıştırarak durduruyoruz. Bu durdurma işlemini cluster yapıdaki her bir makinede gerçekleştiriyoruz. # /etc/init.d/rgmanager stop # /etc/init.d/clvmd stop # /etc/init.d/cman stop
  • 58. Şekil 4.33 cluster servislerini durdurma işlemi Cluster servislerini durdurma işlemlerini tamamladıktan sonra “vi” komutuyla cluster.conf dosyamızda fs device bölümündeki ortak alan olarak belirlediğimiz diski path(yolunu) “/dev/mapper/3600a0b80005a0e42000012fa52a467e7p1” olarak değiştiriyoruz. Bu işlemin cluster’a dahil her bir node üzerindeki cluster.conf dosyasında gerçekleştirilmesi gerekiyor. Düzenlemeyi yaptıktan sonra “vi” editöründen “wq!” çıkıyoruz. Cluster konfigürasyon dosyası üzerinde değişiklikleri yaptığımıza göre cluster servislerini çalıştırıyoruz. # vi /etc/cluster/cluster.conf # /etc/init.d/cman start # /etc/init.d/rgmanager start
  • 59. Şekil 4.34 cluster servislerini çalıştırma işlemi # watch clustat Şekil 4.35 watch komutu gösterimi Yeri gelmişken “watch” komutu yukardaki gibi izlemek istediğimiz komutun çıktılarını anlık olarak görmemizi sağlar. Bu şekilde cluster servisinin çalışırlılığının anlık olarak izleyebiliyoruz. Yukarda görüldüğü gibi node2 online ve cluster servisimiz node2 üzerinde çalışıyor. Node2 üzerinde yaptığımız işlemleri node1 üzerinde de düzgün bir şekilde yapmadığımız için node1 offline olarak gözükmektedir. Aynı işlemleri node1 üzerinde yaparken “watch” komutuyla durumu izleyebilirsiniz. cluster.conf dosyasında değişiklikler yapabilme adına bir örnek verdikten sonra cluster konfigürasyonuna kaldığımız yerden devam ediyoruz. D. Resources Konfigürasyonu Cluster yapıda çalıştırmak istediğimiz mysql veritabanı için gerekli kaynakların(resources) oluşturulması işlemidir. Eğer siz cluster yapıda çalıştırmak istediğiniz uygulama farklıysa, uygulamanın gerektirdiği şekilde kaynaklar(resources) oluşturmalısınız. Mysql veritabanını cluster olarak çalıştırmak için gerekli kaynaklar(resources); Virtual ip adres Cluster’da çalışan uygulamanın verilerinin yazılacağı ortak alan
  • 60. Mysql veritabanı servisinin çalışırlılığının kontrolü için gerekli script kaynak(resources) oluşturma işlemi olmak üzere 3 tane kaynak oluşturuyoruz. Cluster grafik arayüzdenResources sekmesini tıklıyoruz ve Add diyerek kaynak oluşturma işlemine başlıyoruz. ilk olarak konfigürasyona floating ip adres ekliyoruz yani diğer bir deyimle virtual ip adres. Clusterdaki aktif node hangisiyse o node üzerine ağ trafiğini yönlendiren cluster ip adresi diyebiliriz. Aktif olan node üzerinde “ip a” komutunu çalıştırdığımızda cluster ip adresini secondary olarak görüyor olacağız. Yani aynı network portu üzerinde iki tane ip adresi olacak bunlar; sunucunun kendi ip adresi ve cluster ip adresidir. Şimdi aşağıdaki şekilde de görüldüğü gibi virtual ip adresi ekleme işlemini gerçekleştiriyoruz. Add tıkladıktan sonra IP Address kaynağını(resource) aşağıdaki şekilde de görüldüğü gibi seçiyoruz. IP Adress bölümüne virtual ip adres olarak belirlediğimiz ip adresini giriyoruz. Submit butonunu tıklıyoruz ve ip adres kaynak ekleme işlemini tamamlıyoruz. Şekil 4.36 virtual ip adres oluşturma işlemi
  • 61. İkinci olarak cluster verilerinin yazılacağı ortak alanı oluşturmalıyız. Cluster verilerinin yazılması için gfs2 yada ext4 dosya sistem (File system) türlerinden hangisini kullanacaksanız ona göre seçim yapmalısınız. Dosya sistemi (File system) olarak ext4 kullanıyorsanız aşağıdaki şekildeki gibi kaynak (resource) oluşturabilirsiniz; Add tıkladıktan sonra Filesystem kaynağını(resource) seçiyoruz. Name bölümüne paylaşılmış alanı tanımlamak adına “db_data” adını veriyoruz. Filesystem Type bölümünü ext4 olarak seçiyoruz. Mount Point bölümüne mysql veritabanı verilerinin yazılacağı yolu göstermek adına “/var/lib/mysql” yolunu yazıyoruz. Device, FS Label, or UUID bölümüne paylaşım alanı olarak oluşturduğumuz veri diskinin yolunu gösteriyoruz. Veri diskini oluştururken isimlendirmede ve konfigürasyonda farklılık olabileceği için, oluşturduğunuz veri diskinin yolunu göstermelisiniz. Force Unmount, Force fsck, Use Quick Status Checks, Reboot Host Node if Unmount Fails kutucuklarını işaretliyoruz. Submit butonunu tıklıyoruz ve ext4 dosya sistemli kaynak ekleme işlemini tamamlıyoruz.
  • 62. Şekil 4.37 ext4 dosya sistemli ortak alan oluşturma işlemi Dosya sistemi (File system) olarak gfs2 kullanıyorsanız aşağıdaki şekildeki gibi kaynak (resource) oluşturabilirsiniz;
  • 63. Şekil 4.38 gfs2 dosya sistemli ortak alan oluşturma işlemi Son olarak cluster mimari de yüksek erişebilirlik(HA) olarak kullanacağımız mysql veritabanınnı servisinin çalıştırılması için gerekli olan script resource oluşturuyoruz; Add tıkladıktan sonra Script kaynağını(resource) seçiyoruz. Name bölümüne mysql veritabanını tanımlamak adına “mysqld” adını veriyoruz. Full Path to Script File bölümüne mysql veritabanının servisini göstermek adına “/etc/init.d/mysqld” yolunu yazıyoruz. Submit butonuna tıklıyoruz ve script kaynak ekleme işlemini tamamlıyoruz.
  • 64. Şekil 4.39 script resource oluşturma işlemi Cluster mimaride mysql veritabanını çalıştırmak için gerekli olan kaynak oluşturma(resources) işlemlerini tamamladık. Eğer oluşturmuş olduğunuz kaynaklardan(resources) herhangi birinde değişiklik yapmak isterseniz, değişiklik yapmak istediğiniz kaynağı tıklayıp gerekli gördüğünüz değişiklikleri yaptıktan sonra Apply butonuna basıp yapılan değişiklikleri tamamlayabilirsiniz. Ayrıca herhangi bir kaynağı silmek istediğinizde kaynağın yanındaki kutucuğu işaretleyip Delete etmelisiniz. Oluşturduğumuz kaynakları (resources) aşağıdaki şekildeki gibi görebiliriz. şekilde görüldüğü üzere kaynaklar kulanımda değil “In use : no” olarak görülmektedir. Çünkü şuana kadar sadece kaynakları oluşturma işlemlerini gerçekleştirdik. Şekil 4.40 oluşturulan kaynakların gösterimi E. Failover Domains Konfigürasyonu Failover domains cluster node’larının arasında öncelik sırası oluşturmak
  • 65. diyebiliriz. Cluster, aktif node üzerinde çalışırken oluşabilecek herhangi bir hata sonrasında cluster servislerini üzerine alacak node’un belirlenmesidir. Örneğin cluster yapımız A, B ve C olmak üzere 3 node üzerinde yapılandırıldığını düşünelim. Bunlardan A aktif node olarak çalışıyor ve failover domain konfigürasyonunda öncelik sırasını A-C-B olarak belirledik. Eğer aktif node olarak çalışan A herhangi bir hata sonucu cluster servislerini kapattığında, öncelik sırasına göre cluster servislerini üzerine alacak node C dir. Not: Failover domain cluster yapının çalışması için zorunlu bir gereksinim değildir. N ot : Failover domainde yapılacak herhangi bir değişiklik çalışan cluster servislerini etkilemez. Failover domain özellikleri; Prioritized: cluster servislerinin failover olacağı node’ların önceliklendirilmesi için seçilmesi gerekiyor. Unrestricted(kısıtlanmamış): Cluster servisleri cluster içerisindeki hernangi bir node üzerinde çalışır ve aktif node hata ile karşılaştığında cluster servisleri cluster içerisindeki herhangi bir node üzerine atanır. Default durumunda yani herhangi bir failover konfigürasyonu yapılmadıysa, failover domains unrestricted’dır. Restricted(kısıtlı): Eğer restricted özelliği seçilirse sadece belirlenmiş node’lar üzerinde cluster servisleri çalışabilir. Restricted failover domain olarak belirlenmiş node’ların hiçbirisine ulaşılamıyorsa, cluster servisleri başlatılamaz. No Failback: Önceliklendirilmiş bir node üzerinde cluster servisleri başarısız olduktan sonra tekrar ulaşılabilir olduğunda cluster servislerini üzerine almaması için seçilmiş olması gerekiyor. Failover domains’den bahsettiğimize göre artık failover domains konfigürasyonunu yapabiliriz. Cluster konfigürasyon arayüzden Failover Domains sekmesine geçiyoruz ve Addsekmesini tıklıyoruz ve adım adım konfigürasyonu gerçekleştiriyoruz;
  • 66. Name kutusuna herhangi bir isim yazıyoruz. Cluster node’ları arasında failover önceliğini aktif etmek için Prioritized kutucuğunu işaretliyoruz. Sadece failover domain içerisindeki node’ların failover yapabilmesi için Restricted kutucuğunu işaretliyoruz. 1. Öncelikli node ulaşılabilir olduğunda tekrar servisleri üzerine almaması için No Failback kutucuğunu işaretliyoruz. Failover domain’e dahil etmek istediğimiz node’lar içinMember kutucuğunu işaretliyoruz ve failover domaine dahil edilen her bir node’un Priority kutucuğundaki öncelik ayarlarını yapıyoruz. V e C re a t e di yer ek Failover Domains konfigürasyonlarını tamamlıyoruz. Şekil 4.41 failover domain konfigürasyonu Aşağıdaki şekilde görüldüğü üzere Failover Domains konfigürasyonunu tamamladık. Eğer Prioritized, Restricted,yada No Failbacközelliklerini değiştirmek isterseniz. Oluşturmuş olduğunuz failover domains konfigürasyonunu tıklıyoruz ve kutucuk işaretleme yada işaret kaldırma işlemini yaptıktan sonra Update Properties diyoruz. Eğer failover domains’e yeni node dahil etmek veya failover domain’den node çıkarmak isterseniz Member kutucuğunu işaretlemek
  • 67. yada kaldırmalısınız ve öncelik ayarlarında da değişiklikler yaptıktan sonra Update Settings tıklamalısınız. Failover domain’i silmek istediğinizde oluşturduğunuz failover domains işaretleyip Delete etmelisiniz. Şekil 4.42 oluşturulan failover domains konfigürasyonu gösterimi F. Fence Devices Konfigürasyonu Fence Devices konfigürasyonu her linux temelli cluster bir yapı gerçekleştirmek için önemli bir komponenttir. Fencing gerçekleştirmenin ana amacı cluster yapısında veri bütünlüğünü(data integrity) sağlamaktır. Veri bütünlüğü derken anlatmak istediğimiz aslında, sadece bir node cluster servisini çalıştırabilir ve aynı zamanda sadece bir node cluster servisine erişebilir. Böylece failover süreçleri esnasında cluster servisinin bir node’dan diğer node’ geçmesini sağlarken, aynı anda iki node’unda verilere erişimini ve veri bozulmalarını(simultaneously accessing the same data and corrupting it) önler. Böylece Fence devices olası oluşabilecek bütün hatalara karşı veri bütünlüğünü sağlar. Cluster için fence device oluşturma, güncelleme, silme gibi işlemleri yapabileceğimiz Fence Devices sekmesini tıklıyoruz. Cluster konfigürasyonu adına herhang bir fence device oluşturulmadığı için hiçbir yapılmış ayar bulunmamaktadır. Şimdi network power switch ile yedeklilik oluşturacak şekilde fence device oluşturma işlemine geçebiliriz. Öncelikle apc network power switch’lerimize serial konsoldan bağlanıp, SSH portunu açıyor ve ağ üzerinden bir ip adres veriyoruz ve network power switchlerimizi yeniden başlatıyoruz(reboot) ediyoruz. Network power switchleriniz açıldıktan sonra, verdiğiniz ip adresi ile http üzerinden bağlanıp özel olarak istediğiniz bir ayar varsa yapabilirsiniz. Biz herhangi bir şey yapmadan devam ediyoruz.
  • 68. Not: Bazı eski APC pdu’lar SHH desteklemiyor ve fence_apc ile çalışmıyor. Bundan dolayı bu pdu’larda fence agent olarak fence_apc_snmp kullanarak SNMP ile çalışmasını sağlayabilirsiniz. 1) Fence_apc agent konfigürasyonu Fence Devices sekmesinden fence device olarak apc power switch kullandığımız için APC Power Switch seçiyoruz ve aşağıdada görüldüğü gibi fence_apc agent oluşturma işlemlerini gerçekleştiriyoruz. Add tıkladıktan sonra APC Power Switch seçiyoruz. Name bölümüne apc power switch tanımlamak adına “pwr01” adını veriyoruz. İkinci apc power switch’e de “pwr02” adını veriyoruz. IP Addresss or Hostname bölümüne apc power switch için belirlediğimiz ip adresini giriyoruz. Login bölümüne apc power switch’e bağlantı yaptığımız kullanıcı bilgisini giriyoruz. Password bölümüne apc power switch’e bağlantı yaptığımız kullanıcının şifresini giriyoruz. Submit butonuna tıklıyoruz ve fence_apc agent oluşturma işlemini tamamlıyoruz.
  • 69. Şekil 4.43 apc power switch 1 oluşturma işlemi
  • 70. Şekil 4.44 apc power switch 2 oluşturma işlemi Power switch tarafında yedeklilik sağlaması için pwr01 ve pwr02 adlı iki tane network power switchimizin fence device olarak konfigürasyonunu aşağıdaki şekil 4.45’teki gibi görebiliriz. Aşağıdaki şekilde de görüldüğü üzere fence_apc agentlar clusterdaki node’lar tarafından kullanımda değil. Fence_apc agent’lar hazır olduğuna göre artık clusterdaki node’larımıza tanıtmaya geçiyoruz. Cluster’a dahil herbir node için fencing konfigürasyonu yapılmalıdır.
  • 71. Şekil 4.45 oluşturulan fence_apc agentların gösterimi Node 1 için fencing konfigürasyonu; Nodes sekmesini tıkladıktan sonra clusterdaki herbir node üzerinde fencing konfigürasyonu yapmak için; Add Fence Method sekmesini tıklıyoruz Method Name bölümüne node üzerindeki fence method tanımlamak adına “Method_1”adını veriyoruz. Submit butonunu tıklıyoruz fence method oluşturma işlemini tamamlıyoruz. Şekil 4.46 fence method oluşturma işlemi Method_1 adlı oluşturduğumuz fence method’a fence_agentları ekleme işlemlerini yapıyoruz. Add Fence Instance tıklıyoruz ve oluşturduğumuz fence device’ları sırasıyla seçip port bilgilerini girdikten sonra aşağıdaki gibi fence device oluşturma işlemini tamamlıyoruz. Bu işlemleri diğer node’lar üzerinde de yapmayı unutmuyoruz.
  • 72. Şekil 4.47 node1 üzerinde fence device oluşturma işleminden sonra gösterimi Node 2 için fencing konfigürasyonu; Node1’de yaptığımız işlemleri burada da tekrarlıyoruz. Şekil 4.48 node2 üzerinde fence device oluşturma işleminden sonra gösterimi
  • 73. Görüldüğü gibi cluster’a dahil herbir node için fence device konfigürasyonlarını yedekli olarak tamamlamış bulunuyoruz. Konfigürasyonları tamamladıktan sonra Fence Devices sekmesine tıkladığımızda aşağıdaki şekilde de görüldüğü üzere pwr01 ve pwr02 adlı fence device’lar clusterdaki node’lar tarafında kullanımda olduğu görülmektedir. Şekil 4.49 fence devices konfigürasyonlarından sonra fence device’ların gösterimi 2) Fence_apc_snmp agent konfigürasyonu Fence device konfigürasyonunda agent olarak fence_apc_snmp kullanmak için, APC Power Switch (SNMP interface)üzerinden fence_apc’de yaptığımız konfigürasyona benzer şekilde işlemleri gerçekleştiriyoruz. Add tıkladıktan sonra APC Power Switch (SNMP interface) seçiyoruz. Name bölümüne apc power switch tanımlamak adına “pwr01” adını veriyoruz. İkinci apc power switch’e de “pwr02” adını veriyoruz. IP Addresss or Hostname bölümüne apc power switch için belirlediğimiz ip adresini giriyoruz. Login bölümüne apc power switch’e bağlantı yaptığımız kullanıcı bilgisini giriyoruz. Password bölümüne apc power switch’e bağlantı yaptığımız kullanıcının şifresini giriyoruz. Submit butonuna tıklıyoruz ve fence_apc agent oluşturma işlemini tamamlıyoruz.
  • 74. Şekil 4.50 pwr01 adlı apc power switch(SNMP interface) oluşturma işlemi
  • 75. Şekil 4.51 pwr02 adlı apc power switch(SNMP interface) oluşturma işlemi Network power switch tarafında yedeklilik sağlaması içinpwr01 ve pwr02 adlı iki tane network power switch fence device olarak konfigürasyonunu aşağıdaki şekil 4.52’deki gibi görebilirsiniz. Aşağıdaki şekilde de görüldüğü üzere fence_apc_snmp agent’lar clusterdaki node’lar tarafından kullanımda değil. fence_apc_snmp agent’lar hazır olduğuna göre artık clusterdaki node’larımıza tanıtmaya geçiyoruz. Cluster’a dahil herbir node için fencing konfigürasyonu yapılmalıdır. Şekil 4.52 oluşturulan fence_apc_snmp agent’ların gösterimi
  • 76. Node 1 için fencing konfigürasyonu; Yukarda anlatığımız şekilde cluster’daki herbir node için fencing konfigürasyonunu gerçekleştiriyoruz. Aşağıdaki şekilde görüldüğü gibi node1 için fence method içerisinde yedeklilik sağlanacak şekilde fence device oluşturulmuştur. Şekil 4.53 node1 üzerinde fence device oluşturma işleminden sonra gösterimi Node 2 için fencing konfigürasyonu; Node1’de yaptığımız işlemleri burada da tekrarlıyoruz ve aşağıdaki şekilde görüldüğü gibi node2 için fence method içerisinde yedeklilik sağlanacak şekilde fence device oluşturma işlemlerini gerçekleştiriyoruz.
  • 77. Şekil 4.54 node2 üzerinde fence device oluşturma işleminden sonra gösterimi Görüldüğü gibi cluster’a dahil herbir node için fence device konfigürasyonlarını yedekli olarak tamamlamış bulunuyoruz. Konfigürasyonları tamamladıktan sonra Fence Devices sekmesine tıkladığımızda aşağıdaki şekilde de görüldüğü üzere pwr01 ve pwr02 adlı fence device’lar clusterdaki node’lar tarafında kullanımdadır. Şekil 4.55 fence devices konfigürasyonlarından sonra fence devices’ların gösterimi Görüldüğü gibi cluster’a dahil her node için fence agent olarak kullandığımız fence_apc_snmp agent yedekli olarak tanımlamış bulunuyoruz. Fence device konfigürasyonlarını tamamladığımıza göre çalışırlılığını kontrol etmek adına aşağıdaki işlemleri gerçekleştirebilirsiniz. Yaptığınız konfigürasyonun çalışıp çalışmadığını kontrol etmek adına, bir node’u
  • 78. fence’lemek için “fence_node” komutunu kullanabilirsiniz. “fence_node” komutu belirtilen node için cluster.conf dosyasından fencing ayarlarını okur ve fencing konfigürasyonunu çalıştırır. Sonuç olarak log’lara fenced success yada fenced failed sonucunu döndürür. # fence_node node1 # cluster’daki node1 makinesini fence’liyoruz. Aynı şekilde sırasıyla clusterdaki diğer node’larıda fence’leyip durumu gözlemleyebilirsiniz. Ancak yapacağınız bu işi sırasıyla yapmak gerekmektedir. Yani node1 makinesini fence’ledikten sonra cluster yapı tamamıyla ayağa kalkdıktan sonra node2 için fence’leme işlemini gerçekleştirmek gerekmektedir. # tail - f /var/log/messages # komut ile fence device konfigürasyonunun çalışırlığını gözlemleyebilirsiniz. Node1 makinesini fence’lediğimizde node2 makinesi üzerinden loglara baktığımızda “node2 fenced[1962]: fence node1 success” şeklinde fencing konfigürasyonunun çalıştığını teyit ediyoruz. Sizlerde aynı şekilde kontrolerinizi yapmayı unutmayınız. G. Services Groups Konfigürasyonu Cluster node’ları arasında aktif node üzerinde çalışması gereken kaynakları(resources) yönetecek olan servistir. Yani sadece aktif node üzerinde çalışacak olan cluster servisidir. Cluster grafik arayüzden Service Groups sekmesini tıklıyoruz ve Add diyerek cluster servisini oluşturma işlemine başlıyoruz. Service Name bölümüne cluster servisini belirtecek bir isim veriyoruz. Aşağıdaki şekilde görüldüğü gibi biz “db_cluster” adı verdik. Automatically Start This Service kutucuğunu işaretliyoruz. Run Exclusive kutucuğunu işaretliyoruz. Failover Domain bölümünde eğer failover domain oluşturduysanız buradan seçiyorsunuz. Biz failover domain oluşturduğumuz için seçiyoruz. Recovery Policy bölümünde “Relocate” seçiyoruz. Relocate seçeneği farklı node üzerinde servisi çalıştırmayı denemesini sağlar.
  • 79. Add Resource butonunu tıklıyoruz ve Resources bölümünde oluşturduğumuz kaynakları(ip adress, db_data ve mysqld ) ekliyoruz. Submit butonunu tıklıyoruz ve servis oluşturma işlemini tamamlıyoruz. Şekil 4.56 Service Groups oluşturma işlemi Not: Oluşturduğumuz service groups’a Add Resource butonunu tıklayarak ilk olarak eklemek istediğimiz resources ekledikten sonra, ikinci resource’u eklemek istediğimizde Add Resource’ın yanında birde Child Resource butonu gelecektir. Child resource ile Add Resource arasında hiyerarşi farkı bulunmaktadır. Eğer belirlediğiniz herhangi bir kaynağın(resource) altına add child resource ile yeni bir kaynak(resource) tanımlarsanız üstteki kaynak(resource) başlatılmadan diğer kaynak(resource) başlatılamaz. Bunun yerine oluşturmuş olduğunuz kaynakları(resource), add resource ile yeni bir kaynak(resource) olarak tanımlarsanız bu ikisi birbirinden bağımsız olarak çalışırlar. Herbir kaynak(resoruce) cluster servisi üzerinde başlatılmaya çalışılır.
  • 80. Cluster servisinide oluşturma işlemini tamamladığımıza göre cluster yapısının çalışırlılığını “clustat” komutunu çalıştırarak kontrol edebiliriz. Aşağıdaki şekil 4.57’de görüldüğü üzere db_cluster adında servisimiz node1 üzerinde çalışıyor. Cluster servisiniz üzerinde herhangi bir değişiklik yapmak isterseniz aşağıdaki şekil 4.57’de de görüldüğü üzere db_cluster servisini durdurabilir, başlatabilir ve yeniden bir cluster serviside oluşturmak istersenizde silebilirsiniz. Şekil 4.57 Service Groups oluşturma işleminden sonra cluster servisinin gösterimi Cluster servisi hangi node üzerinde aktifse, virtual ip adres’in o node üzerinde çalıştığını görmek adına “ip addr list eth0” komutunu aşağıdaki şekilde görüldüğü gibi çalıştırabilirsiniz. Aşağıdaki şekilde görüldüğü gibi “eth0” portuna ait 2 adet ip adresi bulunmaktadır. Secondary eth0 olarak geçen ip adres bizim cluster yapının virtual ip adresidir. Buradan da anlaşılacağı üzere aktif node olarak node1 çalışıyor demektir. Eğer sizin sisteminizde bonding varsa, “eth0” yerine bonding interface bakmalısınız. Şekil 4.58 virtual ip adres gösterimi Cluster yapıda node1 aktif node olarak çalıştığına göre, node1 üzerinde “df -h” komutunu çalıştırdığımda mysql veritabanı verilerinin yazılması için oluşturduğumuz veri diskine mount olduğunu aşağıdaki şekil 4.59’daki gibi görüyor olmanız gerekiyor.
  • 81. Şekil 4.59 df -h komutunun çıktısı Gerekli işlemleri yaptıktan sonra, bütün cluster servislerinin node’lar yeniden başlatılsada her zaman açık olması için aşağıdaki komutları çalıştırıyoruz. # chkconfig --list cman # chkconfig cman on # chkconfig --list clvmd # chkconfig clvmd on #Eğer cluster volume’ler oluşturulurken clvm kullandıysanız gereklidir. # chkconfig --list gfs2 # chkconfig gfs2 on #Eğer dosya sistemi olarak RedHat GFS2 kullanıldıysa gereklidir. # chkconfig modclusterd on # chkconfig --list modclusterd # chkconfig --list rgmanager # chkconfig rgmanager on Bu komutları cluster’daki bütün node’lar üzerinde çalıştırdıktan sonra artık makineler reboot olsada cluster servisleri her zaman açık olacaktır. Ayrıca cluster servislerini komutsatırındanda herhangi bir cluster servisinin çalışırlılığını kontrol etmek için aşağıda verildiği gibi kullanabilirsiniz. # service rgmanager status/start/restart/stop
  • 82. H. Cluster Konfigürasyon Dosyasını İnceleme Cluster konfigürasyon çalışmalarını tamamladık. Şimdi yapılan cluster konfigürasyonuna göz gezdirelim ve farklı açılardan cluster konfigürasyonunu değiştirmek adına neler yapılabilir ve dikkat edilmesi gereken durumlar neler olabilir örneklerle inceleyelim. # cat /etc/cluster/cluster.conf #herhangi bir node üzerinde komutunu çalıştırdığımızda cluster konfigürasyonu aşağıdaki gibi ekrana gelecektir. [root@node1 ~]# cat /etc/cluster/cluster.conf <?xml version="1.0"?> <cluster config_version="26" name="mycluster"> <clusternodes> <clusternode name="node1" nodeid="1"> <fence> <method name="Method_1"> <device name="pwr01" option="off" port="1"/> <device name="pwr02" option="off" port="1"/> <device name="pwr01" option="on" port="1"/> <device name="pwr02" option="on" port="1"/> </method> </fence> </clusternode> <clusternode name="node2" nodeid="2"> <fence> <method name="Method_1"> <device name="pwr01" option="off" port="2"/> <device name="pwr02" option="off" port="2"/> <device name="pwr01" option="on" port="2"/>
  • 83. <device name="pwr02" option="on" port="2"/> </method> </fence> </clusternode> </clusternodes> <cman expected_votes="1" two_node="1"/> <rm> <resources> <ip address="192.168.128.13" sleeptime="10"/> <fs device="/dev/mapper/3600a0b80005a0e42000012fa52a467e7p1" force_fsck="1" force_unmount="1" fsid="28092" fstype="ext4" mountpoint="/var/lib/mysql" name="db_data" quick_status="1" self_fence="1"/> <script file="/etc/init.d/mysqld" name="mysqld"/> </resources> <failoverdomains> <failoverdomain name="prefernode" nofailback="1" ordered="1" restricted="1"> <failoverdomainnode name="node1" priority="1"/> <failoverdomainnode name="node2" priority="2"/> </failoverdomain> </failoverdomains> <service domain="prefernode" exclusive="1" name="db_cluster" recovery="relocate"> <ip ref="192.168.128.13"/> <fs ref="db_data"/> <script ref="mysqld"/>
  • 84. </service> </rm> <fencedevices> <fencedevice agent="fence_apc_snmp" ipaddr="192.168.128.100" login="apc" name="pwr01" passwd="apc"/> <fencedevice agent="fence_apc_snmp" ipaddr="192.168.128.101" login="apc" name="pwr02" passwd="apc"/> </fencedevices> </cluster> [root@node1 ~]# Konfigürasyona baştan sona doğru göz gezdirdiğimizde, grafik arayüzden yaptığımız cluster konfigürasyonlarının buraya xml formatında yazıldığını görüyoruz. Cluster konfigürasyonu ile ilgili değişiklikler yapmak istediğimizde buradan “vi” editörü ile yapabiliriz. Ancak buradan yapacağımız düzenlemelerde herhangi bir hata yaptığımızda cluster konfigürasyonu çalışmayacaktır. Burada yapılabilecek hatalara örnek olması için aşağıdaki konfigürasyon örneklerini inceleye bilirsiniz. Cluster konfigürasyon dosyasının başında belirlenmiş olan cluster config_version="26" değerinin ne olduğu akıllara gelebilir. Bir cluster konfigürasyon dosyası, cluster konfigürasyon versiyon değeri içerir. Bu değere ilk defa cluster konfigürasyon dosyası oluşturduğunuz zaman default olarak “1” atanır ve siz cluster konfigürasyonunda yaptığınız her değişiklik sonrası bu değer otomatik olarak “1” artar. Bizim yaptığımız konfigürasyonda bu değer 26 olduğuna göre, cluster konfigürasyonu süresince bu kadar değişiklik yaptığımızın göstergesidir. Bu değerin kaç olduğunu aşağıdaki komutu çalıştırarakta görebilirsiniz. Not: cluster config verisoncluster’daki herbir node üzerinde aynı değerde olması gerekir aksi takdirde cluster konfigürasyon dosyaları arasında farklılıklar olduğu anlaşılır ve cluster yapısında hatalarla karşılaşabilirsiniz. # ccs -h node1 --getversion # cluster konfigürasyon versiyon değerinin
  • 85. kaç olduğunu gösterir. # ccs -h node1 --incversion # bu komut cluster konfigürasyon versiyon değerinin 1 arttırılmasını sağlar. Örnek-1: cluster.conf örnek konfigürasyon: XML hatası <cluster nam ="mycluster" config_version="1"> <clusternodes> <clusternode name="node-01" nodeid="1"> <fence> </fence> </clusternode> <clusternode name="node-02" nodeid="2"> <fence> </fence> </clusternode> <clusternode name="node-03" nodeid="3"> <fence> </fence> </clusternode> </clusternodes> <fencedevices> </fencedevices> <rm > </rm > <cluster> <----------------GEÇERSİZ Bu örnekte, konfigürasyonun son satırında geçersiz diyerek belirttiğimiz yere
  • 86. dikkatlice baktığımızda </cluster> şeklinde yazılmasını gerekiyorken <cluster> yazılmıştır. Yani sadece bir “/” eksikliği cluster’ın çalışmamasına sebep olacaktır. Örnek-2: cluster.conf dosyasının sadece resource bölümüne örnek konfigürasyon: Geçersiz seçenek <resources> <ip address="192.168.128.13" sleeptime="10"/> <fs device="/dev/sdg1" force_fsck="on" force_unmount="on" fsid="28092" fstype="ext4" mountpoint="/var/lib/mysql" name="db_data" quick_status="on" self_fence="on"/> <script file="/etc/init.d/mysqld" name="mysqld"/> </resources> Bu örnekte, sarı renkle belirttiğimiz yere dikkatlice baktığımızda "/dev/sdb1" yazılması gerekiyorken "/dev/sdg1" yazılmıştır. Yani cluster konfigürasyonuna mount ettğimiz disk yanlış tanımlanmış. Örnek-3: cluster.conf örnek konfigürasyon: Geçersiz değer girilmesi <cluster nam ="mycluster" config_version="1"> <clusternodes> <clusternode name="node-01" nodeid="1"> <fence> </fence> </clusternode> <clusternode name="node-02" nodeid="-2"> <---------------- GEÇERSİZ <fence> </fence> </clusternode> <clusternode name="node-03" nodeid="3">
  • 87. <fence> </fence> </clusternode> </clusternodes> <fencedevices> </fencedevices> <rm > </rm > </cluster> Bu örnekte, sarı renkle belirttiğimiz yere dikkatlice baktığımızda clusternode daki node-02 için nodeid xml için geçersiz bir değer içerir. Bu değer negatif bir değer “-2” dir. Bunun yerine pozitif bir değer “2” girilmelidir. Yani nodeid değerleri pozitif olmalıdır. Sonuç olarakcluster.conf dosyasında yapacağınız düzenlenmelerde ve değişikliklerde, yaptığınız işlemlerden sonra aşağıdaki komutu çalıştırarak configürasyon dosyasında hata yapıp yapmadığınızı görebilirsiniz. Aşağıdaki şekilde görüldüğü üzere bizim yaptığımız konfigürasyonda herhangi bir hata bulunmadığını gösteren bir sonuç alıyoruz. # ccs_config_validate Şekil 4.60 cluster.conf dosya geçerliliğinin kontrol edilmesi I. Grafik Arayüzden Varolan Cluster’a Node Ekleme-Kaldırma Var olan cluster’ımıza grafik arayüzden kolay bir şekilde yeni bir node ekleyebilir veya cluster node’lardan istediğimizi cluster’dan çıkarabiliriz. Cluster servislerini ve node’ları etkilemeksizin bu işlemleri kolayca yapabilirsiniz ancak hata yapma işlemine karşın dikkatli bir şekilde işlemleri gerçekleştirmekte fayda vardır.
  • 88. Varolan cluster’a yeni bir node ekleme için; Anasayfada sol taraftaki menüden Manage Clusters tıklıyoruz. Birden fazla cluster yapısı varsa, hangi cluster’a node ekleyeceksek onu seçiyoruz. Add tıklıyoruz ve Add Nodes to Cluster ekrana geliyor. Node isimini ve ricci şifresini giriyoruz. Add Clustertıklıyoruz ve cluster’a yeni bir node ekleme işlemini aşağıdaki şekilde görüldüğü gibi tamamlıyoruz. Şekil 4.61 Cluster’a node ekleme işlemi Not: Node ekleme işlemini yaptıktan sonra, fence device konfigürasyonlarını yeni eklediğimiz node’a tanıtmayı unutmamalısınız. Varolan cluster’dan herhangi bir node kaldırma işlemi; Anasayfada sol taraftaki menüden Manage Clusters tıklıyoruz. Cluster’dan kaldırmak istediğimiz node veya node’ları seçiyoruz. Leave Clustertıklıyoruz ve cluster’dan node çıkarma işlemini aşağıdaki şekilde görüldüğü gibi tamamlıyoruz.
  • 89. Şekil 4.62 cluster’dan node çıkarma işleminden sonraki gösterimi Node’u cluster’dan çıkardıktan sonra, yanındaki kutucu işaretleyipDelete dediğimizde clusterdan tamamen kaldırma işlemini gerçekleştirmiş oluyoruz. Grafik arayüz üzerinden genel olarak cluster yapısından bahsettik. Bunların dışından konfigürasyonda ince ayarlar gerekmediği sürece cluster konfigürasyonunu ve yönetimini grafik arayüzden yapabileceğinizi gösterdik. Cluster’daki node’ların yeniden başlatılması (reboot), cluster’a yeni bir node eklenmesi (Add) ve cluster’a dahil edilmesi (Join Cluster), cluster’daki node’un silinmesi (Delete) gibi işlemlerden cluster konfigürasyonunda yapmak istediğiniz değişikliklere kadar (Fence Devices, Failover Domains, Resources, Service Groups, Configure) gerekli gördüğünüz işlemleri yapabilirsiniz. Cluster konfigürasyon ve yönetim çalışmalarını grafik arayüzden yaptığımıza göre, komut satırınada alışmak adına ki Linux/Unix türü işletim sistemlerinin yönetimini yapıyorsanız komut satırından kaçamazsınız. Ayrıca bulunduğunuz ortamda grafik arayüz bulunmayabilir yada uzaktan sisteme bağlanmış ve grafik arayüzden yoksun olabilirsiniz bunlarıda gözönünde bulundurduğumuzda komut satırı vazgeçilmez oluyor. Artık bölüm 5’te ccs komutuyla komut satırından cluster konfigürasyon ve yönetimine geçebiliriz. Şunu da belirtmek isterim ki komut satırına alıştıktan sonra, komut satırının daha kolay ve eğlenceli olduğunu farkedeceksiniz.
  • 90. BÖLÜM – 5 Cluster Konfigürasyonu &Yönetimi (Komut Satırı) Cluster konfigürasyonunu ve yönetimini bir önceki bölümde grafik arayüzden anlatmıştık. Şimdi de komut satırından nasıl yapacağımızı görüyor olacağız. Cluster yapıyı ccs komutu ile oluşturabilir, değiştirebilir ve yönetimini sağlayabilirsiniz. ccs komutunu kullanarak lokalden yada uzaktan cluster konfigürasyon dosyasında yada cluster servisleri üzerinde yapmak istediklerinizi gerçekleştirebilirsiniz. Cluster konfigürasyonunu ve yönetimini bölüm-4’te detaylı bir şekilde anlattığımız için burada detaydan daha çok komut satırından, ccs komutuyla cluster konfigürasyonlarını yapabileceğimize ve cluster yönetimini sağlayabileceğimize değineceğiz. Bu bölümde cluster konfigürasyonu ve yönetimini aşağıdaki gibi ele alıyor olacağız; Cluster Oluşturma(Create) Cluster’a Node Ekleme/Kaldırma Fence Devices Failover Domains Resources Service Groups A. Cluster Oluşturma Aşağıdaki komutu çalıştırdığınızda cluster’a dahil etmek istediğiniz node’lardan birisinin üzerinde cluster konfigürasyon dosyasını oluşturmuya başlıyor olacaksınız. -h parametresi node isminin girilmesi için gerekli parametredir. --createcluster parametresi cluster isminin girilmesi için gerekli parametredir. # ccs -h node1 --createcluster mycluster
  • 91. Şekil 5.1 Node1 üzerinde mycluster adında cluster oluşturma işlemi Not: Eğer cluster oluşturmak istediğiniz node üzerinde cluster.conf dosyası varsa, şekil 5.1’de gösterildiği gibi komutu çalıştırdığınızda var olan dosya yerine yeni oluşturduğunuz cluster konfigürasyon dosyası geçecektir. Cluster konfigürasyon dosyasının üzerine yazmak için “–i” parametresi gerekebilir. Şekil 5.1 de çalıştırılan komutu yorumlarsak; node1 üzerinde mycluster adlı bir konfigürasyon dosyası oluşturulmuştur. Bu işlemden sonra cat komutuyla, oluşturulan konfigürasyon dosyasını şekil 5.2’deki gibi görebilirsiniz. # cat /etc/cluster/cluster.conf Şekil 5.2 cat komutuyla yeni oluşturulan cluster.conf dosyasının gösterimi Not: Daha önceki bölümlerde ricci servisini çalıştırma ve şifre verme işlemini yapmıştık. Bundan dolayı burada tekrardan değinmiyoruz. Ancak ricci servisinin çalışması önemli olduğundan durumunu gözlemleyip geçiyoruz. Ricci servisi, clusterda node’lar üzerindeki cluster konfigürasyon dosyalarını dağıtmak ve oluşturmak için herbir node üzerinde çalıştırılması gereklidir. # /etc/init.d/ricci status Şekil 5.3 Node1 üzerinde ricci servisinin durumu Şekil 5.4 Node2 üzerinde ricci servisinin durumu
  • 92. B. Cluster’a Node Ekleme/Kaldırma mycluster adlı cluster konfigürasyon dosyasını oluşturduğumuza göre şimdi, cluster’a dahil etmek istediğimiz node’ları ekleme işlemine geçebiliriz. Aşağıdaki komutları çalıştırdığımızda node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasına node1 ve node2 adında makineleri eklemiş olacağız. # ccs -h node1 --addnode node1 # ccs -h node1 --addnode node2 Şekil 5.5 Cluster’a node ekleme işlemi Cluster’a dahil edilmiş node’ların listesini aşağıdaki komutu çalıştırdığımızda görebiliriz. şekil 5.6’da görüldüğü gibi node1 ve node2 makineleri cluster’a eklenmiştir. Ayrıca cluster’a eklenmiş node’ları şekil 5.7’deki gibi cluster.conf dosyasında da görebiliriz. # ccs -h node1 --lsnodes Şekil 5.6 Cluster’a eklenmiş node’ların listesi Şekil 5.7 Node ekleme işleminden sonra cluster.conf dosyasının gösterimi
  • 93. Not: Cluster’a node eklerken, eğer quorum disk kullanacaksanız node’ların oylarınıda(votes) belirlemek adına, komutu aşağıda belirtilen şekilde kullanabilirsiniz. # ccs -h node1 --addnode node1 --votes 1 #votes olarak biz değer olarak “1” verdik defaulta da herbir node’un votes değeri “1” dir. Ancak siz isterseniz faklı değerlerde verebilirsiniz. Not: cluster.conf dosyasında node’ların votes değerleri görülmediğine göre defaultta bırakılmıştır ve default değerde herbir node için “1” dir. Cluster’a node eklerkenccs komutu node’lara nodeid olarak benzersiz bir değer atıyor. Yukardaki şekil 5.7’de görüldüğü üzere node1 için nodeid=1 ve node2 içinde nodeid=2 atanmış.Ancak siz kendi istediğiniz şekilde nodeid oluşturmak isterseniz komutu aşağıdaki gibi kullanmalısınız. # ccs -h node1 --addnode node1 --nodeid nodeid_giriniz Cluster’dan herhangi bir node’u kaldırmak isterseniz aşağıdaki komutu kullanmalısınız. Şekil 5.8’de görüldüğü üzere cluster’dannode2 adlı makineyi kaldırma işlemini geçrekleştirdik. Şekil 5.9’a baktığımızda node2 artık cluster konfigürasyon dosyasında görülmemektedir. # ccs -h node1 --rmnode node2 Şekil 5.8 Cluster’dan node kaldırma işlemi
  • 94. Şekil 5.9 Cluster’dan node kaldırma işleminden sonraki gösterimi Cluster’dan node kaldırma işlemini gösterdikten sonra cluster konfigürasyonuna devam etmek için node2 makinesini tekrar cluster’a ekliyoruz ve konfigürasyonlara devam ediyoruz. C. Fence Devices Fence device hakkında bilgi bölüm-4 verildiği için burada fence device özelliklerine baktıktan sonra fence device konfigürasyonlarının nasıl yapılacağını anlatıyor olacağız. Fence device konfigürasyonunu yapmadan önce, fence daemon özelliklerine default değerler yerine başka değerler verebilirsiniz. Biz default değerlerde bırakıp konfigürasyona devam edeceğiz. Ancak fence daemon özelliklerinde bahsedelim. Fence daemon özellikleri; Post_fail_delay özelliği, aktif node başarısız olduktan sonra bir node’un fencing olmadan önce fence daemon(fenced) saniye cinsinden bekleme süresidir. Default değer 0’dır. Bu değer ağ performansı ve cluster’ın durumuna göre değiştirilebilir. Post_fail_delay özelliğinin değerini değiştirmek için aşağıdaki komutu kullanabilirsiniz: komutu çalıştırdığınızda post_fail_delay değerini 3 saniye olarak değiştirmiş oluyoruz. # ccs -h node1 --setfencedaemon post_fail_delay=3 Şekil 5.10 post_fail_delay değer atama işleme Post_join_delay özelliği, fence domain’e node ekleme yapıldıktan sonra bir node’un fencing olmadan önce fence daemon(fenced) saniye cinsinden bekleme süresidir. Default değer 3 saniyedir. Bu değer ağ performansı ve cluster’ın durumuna göre değiştirilebilir.
  • 95. Post_join_delay özelliğinin değerini değiştirmek için aşağıdaki komutu kullanabilirsiniz: komutu çalıştırdığımızda post_join_delay değerinin 10 saniye olarak değiştirmiş oluyoruz. # ccs -h node1 --setfencedaemon post_join_delay=10 Şekil 5.11 post_join_delay değer atama işleme Fence daemon’ın bazı özelliklerinden bahsettiğimize göre, fence device konfigürasyonuna geçebiliriz. Cluster için fence device konfigürasyonunu aşağıdaki komutları kullanarak yapabilirsiniz. Cluster konfigürasyonunda fence device olarak yedekli olması için 2 adet apc power swicth kullanıyoruz. Aşağıdaki komutları yorumlarsak; node1 üzerindeki cluster konfigürasyon dosyasına pwr01 ve pwr02 adlı, 192.168.128.100 ve 192.168.128.101 ip adresli, oturum açma ve şifre girilerek fence device oluşturma işlemlerini gerçekleştiriyoruz. # ccs -h node1 --addfencedev pwr01 agent=fence_apc_snmp ipaddr=192.168.128.100 login=apc passwd=Passw0rd # ccs -h node1 --addfencedev pwr02 agent=fence_apc_snmp ipaddr=192.168.128.101 login=apc passwd=Passw0rd Şekil 5.12 Fence device oluşturma işlemi Apc power switch fence device ekleme işlemini yaptıktan sonra aşağıdaki verilen komutu çalıştırdığımızda konfigürasyonu yapılmış fence device’ları görebiliriz. Ayrıca cat komutuyla cluster.conf dosyası üzerinden de kontrol ettiğimizde iki adet fence device oluşturulduğunu şekil 5.14’teki gibi görebiliriz. # ccs -h node1 --lsfencedev
  • 96. Şekil 5.13 fence device’ların listelenmesi Şekil 5.14 fence device’ların cluster.conf dosyasında listelenmesi Cluster’dan fence device kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz. Bu komutu çalıştırdığımızda pwr02 adlı fence device’ı cluster konfigürasyonundan kaldırma işlemini gerçekleştirdiğimizi cluster.conf dosyasında şekil 5.15’teki gibi görebiliriz. # ccs -h node1 --rmfencedev pwr02
  • 97. Şekil 5.15 pwr02 adlı fence device’ın kaldırılmasından sonra cluster.conf dosyasını gösterimi N o t : Fence device ekleme işlemlemlerini yaptıktan sonra fence daemon özelliklerinde değişiklikler yapmak isterseniz. Önce fence device’ları kaldırmalısınız ve fence daemon özelliklerinde yapmak istediğiniz değişiklikleri yapıp tekrar fence device ekleme işlemlerini gerçekleştirmelisiniz. Cluster’danfence device kaldırma işlemini gösterdikten sonra cluster konfigürasyonuna devam etmek için kaldırdığımız fence device tekrar cluster’a ekliyoruz ve konfigürasyonlara devam ediyoruz. Fence device olarak apc power switch kullandığımızı ve apc power switch fence device konfigürasyonunu nasıl yaptığımızdan bahsettik. Fakat fence device olarak sadece apc power switch kullanabileceğiniz düşünülmesin. Fence device olarak kullanabileceğiniz seçenekleri aşağıdaki komutu çalıştırdığınız da şekilde 5.16’daki gibi görebilirsiniz. Size uygun olduğunu düşündüğünüz herhangi bir fence device’ı kullanabilirsiniz. Daha öncede bölüm-1’de fence device olarak kullanılabilen aygıtların linkini vermiştik. Bu link üzerinden de desteklenen aygıtlara bakabilir ve size uygun olanını seçebilirsiniz. # ccs -h node1 --lsfenceopts
  • 98. Şekil 5.16 fence device seçenekleri Cluster yapısı için konfigürasyonunu yaptığımız fence_apc_snmp fence agent için gerekli ve opsiyonel fence seçeneklerini aşağıdaki komutu çalıştırdığınızda görebilirsiniz. Sizde hangi fence device kullanıyorsanız onunla ilgili seçenekleri inceleyebilir ve gerekli gördüğünüz ayarları yapabilirsiniz. # ccs -h node1 --lsfenceopts fence_apc_snmp
  • 99. Şekil 5.17 fence_apc_snmp agent için fence device seçenekleri iki adet apc power switch fence device ekleme işlemlerini yaptığımıza göre, clusterdaki herbir node için fencing konfigürasyonlarını tamamlayabiliriz. Cluster’daki herbir node üzerinde iki adet güç kaynağı (power supply) var ve herbiri yedeklilik açısından, bir apc power switch’e bağlı durumda. Böylece fence device konfigürasyonunu yaparken, bir yöntem(method) içerisinde iki adet güç kaynağına sahip, herbir node için fencing konfigürasyonu aşağıdaki gibi yapmalısınız. Konfigürasyona başlamadan önce kontrol amaçlı aşağıdaki komutu çalıştırarak fence device’ları listeliyoruz. # ccs -h node1 --lsfencedev
  • 100. Şekil 5.18 fence device listeleme İlk önce fence method ekleme işlemini aşağıdaki komutları çalıştırarak yapabilirsiniz. Herbir node için bir tane yöntem(method) oluşturuyoruz. Aşağıdaki komutları yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyonunda, clustardaki herbir node üzerinde fence device konfigürasyonu için, node1 üzerinde method_1 adlı bir yöntem ve aynı şekilde method_1 adlı bir yöntemde clusterdaki node2 üzerinde oluşturulmuştur. # ccs -h node1 --addmethod method_1 node1 # ccs -h node1 --addmethod method_1 node2 Şekil 5.19 node’lar üzerinde method oluşturma işlemi Herbir node için oluşturduğumuz fence method’larını aşağıdaki şekil 5.20’deki gibi cluster.conf dosyasında görebiliriz. Şekil 5.20 cluster.conf dosyasının gösterimi Method’ları oluşturduğumuza göre fence instance’ları herbir node üzerindeki method’lara ekleyebiliriz. Herbir yöntem içerisinde iki adet instances konfigürasyonu yapılırken, her instances için, iki defa fence device ekleme işlemi yapılır; önce action özelliği off olarak eklenir, sonrada action özelliğini on
  • 101. olarak eklenir. Bu işlem her bir fence instances için yapılmalıdır. Aşağıda verilen komutları çalıştırdığımızda clusterda bulunan herbir node için fence device konfigürasyonlarını tamamlamış olduğumuzu cluster.conf dosyasına şekil 5.21’deki gibi baktığımızda görebiliriz. Aşağıdaki komutlardan birincisini yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasında, bir fence instances eklemek için, clusterdaki node1’e method_1 adlı yöntemine pwr01 adlı fence device ekleme işlemini yapıyoruz. Ekleme işlemini yaparken apc power switch port 1 kullanılır ve action özelliği off olarak girilmiştir. Bu mantıkta diğer komutlarıda siz yorumlayabilirsiniz. Not: fence device olarak herbir node’daki herbir fence method için port number farklı olmalıdır. # ccs -h node1 --addfenceinst pwr01 node1 method_1 port=1 action=off # ccs -h node1 --addfenceinst pwr02 node1 method_1 port=1 action=off # ccs -h node1 --addfenceinst pwr01 node1 method_1 port=1 action=on # ccs -h node1 --addfenceinst pwr02 node1 method_1 port=1 action=on # ccs -h node1 --addfenceinst pwr01 node2 method_1 port=2 action=off # ccs -h node1 --addfenceinst pwr02 node2 method_1 port=2 action=off # ccs -h node1 --addfenceinst pwr01 node2 method_1 port=2 action=on # ccs -h node1 --addfenceinst pwr02 node2 method_1 port=2 action=on Şekil 5.21 cluster daki herbir node için fence instances ekleme işlemi
  • 102. Şekil 5.22 fence device konfigürasyonları yapıldıktan sonra cluster.conf dosyasının gösterimi N o t : Cluster’daki herbir node için birden fazla fencing method tanımlayabilirsiniz. Böylece eğer ilk kullanılanfencing method başarısız olursa, sistem ikinci method’u kullanmaya çalışacaktır. Buna yedekli fencing yöntemi(backup fencing method) diyebiliriz. Bu yöntemi kullanmak için, cluster daki herbir node üzerinde iki adet method konfigürasyonu yapmalısınız. Sistem birinci fencing method olarak ilk oluşturduğunuz yöntemi kabul edecek ve ikinci yöntemi(method) oluşturduğunuzda bunu yedek fencing yöntem (backup fencing method) olarak kabul edecektir. Eğer ikinci oluşturduğunuz yöntemin birinci fencing method olmasını istiyorsanız, ilk oluşturduğunuz fencing method’u cluster konfigürasyon dosyasından kaldırıp, tekrardan oluşturduğunuzda artık yeni
  • 103. oluşturduğunuz fencing method yedek fencing yöntem (backup fencing method) olacaktır. clusterdaki herhangi bir node’un, fence method içerisinde bulunan fence device’ın fence instances’larını kaldırmak için aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster daki node2 üzerinde konfigürasyonu yapılmış method_1 adlı yöntemimizdeki pwr01 adlı fence device’a ait instances’ları kaldırma işlemini gerçekleştiriyoruz. Bu işlemin sonuçlarını görmek için cluster.conf dosyasına aşağıdaki şekil 5.24’te görüldüğü gibi baktığımızda node2 makinesine ait fence device’lar içerisinde sadece pwr02 fence device’a ait instances’ların olduğunu göreceksiniz. # ccs -h node1 --rmfenceinst pwr01 node2 method_1 Şekil 5.23 fence instances kaldırma işlemi Şekil 5.24 Node2 üzerindeki pwr01 fence device’a ait instances’ların kaldırılmasından sonra cluster.conf dosyasının gösterimi Cluster konfigürasyonunda oluşturmuş olduğunuz bir fence method kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster daki node2 üzerinde konfigürasyonu yapılmış method_1 adlı yöntemi kaldırma
  • 104. işlemidir. Bu işlemi yaptıktan sonra cluster.conf dosyasına şekil 5.26’daki gibi baktığımızda node2 makinesine ait oluşturulmuş herhangi bir yöntem(method) bulunmamaktadır. # ccs -h node1 --rmmethod method_1 node2 Şekil 5.25 Node2 üzerinde yöntem(method) kaldırma işlemi Şekil 5.26 Node2 üzerinde method_1 adlı yöntemin kaldırılmasından sonra cluster.conf dosyasında gösterimi Cluster konfigürasyonundan kaldırdığımız fence device konfigürasyonunu tekrardan yaptıktan sonra, kaldığımız yerden cluster konfigürasyonuna devam ediyoruz D. Failover Domains Genel olarak failover domain’den bölüm-4’te bahsettiğimiz için burada sadece komut satırından failover domain oluşturma ve yönetme işlemlerini gösteriyor olacağız. Bir failover domain konfigürasyonu için, öncelikle istenen özelliklerde bir failover domain eklemek gerekir bunun içinde aşağıda verilen komutu kullanabilirsiniz. bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz node1 üzerinde, restricted, nofailback ve ordered olacak şekilde prefernode1 adlı bir failover domain ekleme işlemi tamamlanmıştır. Ekleme
  • 105. işleminden sonra şekil 5.28’deki gibi cluster.conf dosyasına baktığımızda belirtilen özelliklerde failover domain oluşturulduğunu görebiliriz. # ccs -h node1 --addfailoverdomain prefernode1 restricted ordered nofailback Şekil 5.27 Failover domain oluşturma işlemi Şekil 5.28 Failover domain oluşturduktan sonra cluster.conf dosyasında gösterimi Yukarda görüldüğü üzere failoverdomain oluştururken restricted, ordered ve nofailback özelliklerini ekleyerek oluşturduk. Eğer siz bu özelliklerden kullanmak istemediğiniz varsa, komut satırında giriş yaparken hangi özelliği istemiyorsanız onu girmemeniz yeterlidir. Örneğin, bir failover domain oluştururken komutu # ccs -h node1 --addfailoverdomain prefernode1 ordered nofailback şeklinde çalıştırırsak, failover domain unrestricted, ordered ve nofailback özelliklerinde olacak şekilde oluşturulmuş olur. Prefernode1 adında bir failover domain oluşturduğumuza göre, clusterdaki node’ları failover domaine eklemek için aşağıdaki komutları kullanabilirsiniz. Bu komutları yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasındaki prefernode1 adından failover domain’e node1 makinesini 1. öncelikte ve node2 makinesinide 2. öncelikli olarak ekleme işlemlerini gerçekleştiriyoruz. # ccs -h node1 --addfailoverdomainnode prefernode1 node1 1 # ccs -h node1 --addfailoverdomainnode prefernode1 node2 2 Şekil 5.29 failover domain’e node ekleme işlemi Failover domain konfigürasyonlarını tamamladığımıza göre konfigürasyonları
  • 106. kontrol etmek için, aşağıda verilen komutu çalıştırdığınızda şekil 5.30’da görüldüğü üzere failover domain konfigürasyon bilgilerini görebilirsiniz. Ayrıca aşağıdaki şekil 5.31’de de görüldüğü gibi cluster.conf dosyasınada bakarakta failover domain konfigürasyon yapılandırmasını görebilirsiniz. # ccs -h node1 --lsfailoverdomain Şekil 5.30 failover domain konfigürasyon listesi Şekil 5.31 failover domain konfigürasyon bilgilerinin cluster.conf dosyasında gösterimi Failover domain konfigürasyonundan herhangi bir node’u kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz. bu komutu yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasındaki prefernode1 adındanki failover domain içerisinde bulunan node2 adlı makineyi kaldırma işlemidir. Bu işlemi yaptıktan sonra şekil 5.34’te görüldüğü gibi cluster.conf dosyasına baktığınızda node2 makinesi failover domain konfigürasyonu içerisinde olmayacaktır. Ayrıca şekil 5.33’te görüldüğü üzere failover domain konfigürasyon bilgileri içerisinde node2 bulunmamaktadır. # ccs -h node1 --rmfailoverdomainnode prefernode1 node2 Şekil 5.32 Node2 makinesini failover domainden çıkarma işlemi # ccs -h node1 --lsfailoverdomain
  • 107. Şekil 5.33 Node2 makinesinin failover domainden çıkarıldıktan sonraki failoverdomain listesinin gösterimi Şekil 5.34 Node2 makinesinin failover domainden çıkarıldıktan sonra cluster.conf dosyasında gösterimi Cluster konfigürasyonundan failover domain’i kaldırmak için aşağıdaki komutu kullanabilirsiniz. bu komutu yorumlarsak, node1 üzerinde oluşturmaya devam ettiğimiz cluster konfigürasyon dosyasındaki prefernode1 adındanki failover domaini kaldırma işlemini gerçekleştiriyoruz. Bu işlemi yaptıktan sonra cluster.conf dosyasına bakarsanız prefernode1 adında bir failover domain olmayacaktır. Ayrıca şekil 5.36’da görüldüğü üzere artık failover domain konfigürasyonu bulunmamaktadır. # ccs -h node1 --rmfailoverdomain prefernode1 Şekil 5.35 failover domain kaldırma işlemi Şekil 5.36 failover domain kaldırma işleminden sonraki durum Cluster konfigürasyonundan kaldırdığımız failover domain konfigürasyonunu tekrardan yaptıktan sonra, kaldığımız yerden cluster yapılandırmasına devam ediyoruz. E. Resources Genel olarak kaynaklardan(resources) bölüm-4’te bahsettiğimiz için burada sadece komut satırından kaynak (resource) oluşturma ve yönetme işlemlerini
  • 108. gösteriyor olacağız. Bizim kuracağımız cluster yapı, mysql veritabanının cluster mimaride çalışmasını sağlamak olduğu için, mysql veritabanının cluster yapıda çalışması için gerekli olacak kaynakları(resources) oluşturacağız. Sizin oluşturduğunuz cluster yapıda çalışacak uygulama farklı ise, ona göre kaynaklar oluşturmalısınız. Kaynak oluşturmak için aşağıda verilen komutları kullanabilirsiniz. Bu komutları sırasıyla yorumlarsak; İlk oluşturduğumuz kaynak virtual ip adresdir. Clusterdaki aktif node hangisiyse o node üzerine ağ trafiğini yönlendiren cluster ip adresi diyebiliriz. İkinci oluşturduğumuz kaynak dosya sistemi(file system)dir. Clusterda çalışan uygulamanın verilerinin yazılacağı ortak alandır. Üçüncü ve son olarak oluşturduğumuz kaynak ise script’tir. Mysql veritabanı servisinin çalışırlılığının kontrol etmek için kullanılır. # ccs -h node1 --addresource ip address=192.168.128.13 # ccs -h node1 --addresource fs name=db_data device= /dev/mapper/ 3600a0b80005a0e42000012fa52a467e7p1 mountpoint=/var/lib/mysql fstype=ext4 # ccs -h node1 --addresource script file=/etc/init.d/mysql name=mysql Şekil 5.37 resources oluşturma işlemi Kaynak(resouces) oluşturma işlemlerini tamamladıktan sonra, aşağıdaki komutu çalıştırdığımızda şekil 5.38’de görüldüğü üzere oluşturmuş olduğumuz kaynakları(resources) görebiliriz. Ayrıca cluster.conf dosyasınada şekil 5.39’da görüldüğü üzere baktığımızda oluşturulan kaynakları(resources) görebiliriz. # ccs -h node1 --lsservices
  • 109. Şekil 5.38 Oluşturulan resources listelenmesi Şekil 5.39 resources oluşturma işleminden sonra cluster.conf dosyasında gösterimi Cluster konfigürasyonunda oluşturmuş olduğunuz kaynaklardan(resources) herhangi birini kaldırmak için aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster konfigürasyonundan ip resource kaynağının kaldırma işlemdir. Bu işlemden sonra aşağıdaki şekil 5.41’de görüldüğü üzere ip resource kaynağı listede bulunmamaktadır. Ayrıca cluster.conf dosyasına baktığımızda da şekil 5.42’deki gibi artık ip resource gözükmeyecektir. # ccs -h node1 --rmresource ip address=192.168.128.13 Şekil 5.40 cluster konfigürasyonundan resource kaldırma işlemi Şekil 5.41 cluster konfigürasyonundan resource kaldırma işleminden sonra gösterimi Şekil 5.42 cluster konfigürasyonundan ip resource çıkarılmasından sonra cluster.conf dosyasında gösterimi N o t : Eğer oluşturmuş olduğunuz herhangi bir kaynağın(resources) parametrelerinde değişiklik yapmak isterseniz. Öncelikle parametresinde
  • 110. değişiklik yapmak istediğiniz kaynağı cluster konfigürasyonundan kaldırmalısınız ve tekrardan istediğiniz parametreleride ekleyerek konfigürasyonu yapmalısınız. Cluster yapısından kaldırdığımız ip resource konfigürasyonunu tekrardan yaptıktan sonra, kaldığımız yerden cluster konfigürasyonuna devam ediyoruz. F. Service Groups Genel olarak Service Groups bölüm-4’te bahsettiğimiz için burada sadece komut satırından cluster servisi oluşturma ve yönetme işlemlerini gösteriyor olacağız. Cluster kaynaklarını(resources) çalıştırmak için gerekli olan cluster servisini oluşturmak adına aşağıda verilen komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz node1 üzerinde, prefernode1 adlı failover domain’i kullanan ve recovery policy ayarı relocate olan db_cluster adında bir servis oluşturma işlemi tamamlanmıştır. Bu işlemi tamamladıktan sonra şekil 5.44’te görüldüğü üzere cluster servisini görebilirsiniz. Ayrıca cluster servisini görmek adına cluster.conf dosyasınada bakabilirsiniz. # ccs -h node1 --addservice db_cluster domain=prefernode1 recovery=relocate Şekil 5.43 cluster için cluster servisi oluşturma işlemi Şekil 5.44 cluster servisinin listelenmesi Cluster servisini oluşturduğumuza göre, artık kaynakları(resources) sırasıyla cluster servisine eklemek için aşağıdaki komutları kullanabilirsiniz. Bu komutları yorumlarsak, sırasıyla ip resource, fs resource ve script resource’ların cluster servisine eklenmesi işlemleridir. Bu işlemler tamamlandıktan sonra şekil 5.46’da görüldüğü üzere oluşturmuş olduğumuz kaynakları(resources) cluster servisine
  • 111. eklediğimizi görüyoruz. Ayrıca cluster.conf dosyasınada baktığımızda cluster servisinin konfigürasyonunun tamamlandığını şekil 5.47’deki gibi görebilirsiniz. # ccs -h node1 --addsubservice db_cluster ip ref=192.168.128.13 # ccs -h node1 --addsubservice db_cluster fs ref=db_data # ccs -h node1 --addsubservice db_cluster script ref=mysql Şekil 5.45 cluster servisine resources ekleme işlemi Şekil 5.46 cluster servisine resources ekleme işleminden sonraki gösterimi Şekil 5.47 cluster servisine resources ekleme işleminden sonraki cluster.conf gösterimi Cluster servisi içerisindeki kaynaklardan(resources) birini kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz node1 üzerinde, db_cluster adındaki cluster servisimize ait ip resource cluster servisinden çıkartılmıştır. Bu işlemden sonra şekil 5.50’de görüldüğü üzere cluster servisi içerisinde ip resource görülmemektedir. Ayrıca cluster.conf dosyasınada baktığımızda cluster servisi içerisinde ip resource görülmeyecektir. # ccs -h node1 --rmsubservice db_cluster ip
  • 112. Şekil 5.48 cluster servisinden resource çıkarma işlemi Şekil 5.49 cluster servisinden ip resource çıkarma işleminden sonra gösterimi Şekil 5.50 cluster servisinden ip resource çıkarma işleminden sonra cluster.conf gösterimi Cluster servisini tamamen kaldırmak isterseniz aşağıdaki komutu kullanabilirsiniz. Bu komutu yorumlarsak, cluster konfigürasyonunu oluşturmaya devam ettiğimiz node1 üzerinde, db_cluster adında artık bir cluster servisi bulunmayacaktır. Aşağıdaki şekil 5.51’de görüldüğü üzere cluster servisine dair bir şey gözükmemektedir. Ayrıca cluster.conf dosyasınada bakarsanız cluster servisine dair bir şey gözükmeyecektir. # ccs -h node1 --rmservice db_cluster Şekil 5.51 cluster servisini tamamen kaldırma işleminden sonraki durum Cluster konfigürasyonundan kaldırdığımız cluster service konfigürasyonunu tekrardan yaptıktan sonra, kaldığımız yerden devam ediyoruz. Cluster konfigürasyonu genel olarak hazır diyebiliriz. Yaptığımız cluster konfigürasyona göre mysql veritabanı linux işletim sistemleri üzerinde aktif-pasif olarak çalışacaktır. Sizlerde istediğiniz uygumalarınızı kesintisiz bir iş sürekliliği sağlayacak şekilde konfigürasyonunu yapabilirsiniz. Aşağıdaki komutu çalıştırdığınızda cluster için oluşturulabilecek servislerinin listesini
  • 113. görebilirsiniz. Ayrıca eğer sizin kendi özel uygulamanızı(third-party software) cluster yapı üzerinde kesintisiz bir iş sürekliliği sağlayarak çalıştırmak isterseniz, bu tür uygulamalarınızıda cluster yapıda kullanabilirsiniz. # ccs -h node1 --lsserviceopts # ccs -h node1 --lsserviceopts fs # bu komut cluster servisi için oluşturulmak istenen fs resource oluşturulurken gerekli seçenekleri ve opsiyonel seçenekleri listeler. Böylece sizde konfigürasyonunu yapacağınız servis türlerini bu şekilde inceleyebilir ve yapılacak işlemlere yardımcı bilgileri görüntüleyebilirsiniz. Clusterdaki node1 üzerinde yaptığımız cluster konfigürasyon dosyasını oluşturma ve düzenleme işlemlerini tamamladığımıza göre, cluster içerisindeki bütün node’lara cluster konfigürasyon dosyasını göndermek ve cluster konfigürasyonunu aktif hale getirip cluster yapıyı çalıştırmaya başlayabiliriz. # ccs -h node1 --sync # komutu çalıştırdığımızda cluster.conf dosyasını cluster’a dahil edilen bütün node’lara gönderecektir. Şekil 5.52’de görüldüğü üzere cluster.conf dosyasını node2 makinesine göndermek için şifre soruyor. Şifreyi girdiğinizde dosyayı göndermeye başlıyor. Şekil 5.52 node1 üzerinde hazırlanan cluster.conf dosyasını cluster’a dahil edilen bütün node’lara gönderilmesi # cat /etc/cluster/cluster.conf # komutunu clusterdaki bütün node’larda çalıştırdığınızda, cluster’daki bütün node’ların artık cluster.conf dosyasına sahip olduğunu ve bütün node’ların aynı cluster konfigürasyonuna sahip olduğunu görebilirsiniz. # ccs -h node1 --checkconf # komutunu çalıştırdığımızda clusterdaki bütün node’ların aynı cluster.conf dosyasına sahip olup olmadığını kontrol eder.
  • 114. Şekil 5.53 node’lar üzerindeki cluster.conf dosyasının aynı olup olmadığının kontrolü Not: Node1 üzerindeki cluster konfigürasyonunda herhangi bir değişiklik yaptıktan sonra aşağıdaki şekilde de görüldüğü gibi konfigürasyonların aynı olup olmadığını kontrol ettiğimde, node’ların cluster konfgürasyonlarının eşleşmediğini belirten bir sonuç veriyor. Bundan dolayı tekrar senkrenizasyon sağlamak için yukarda belirtilen gerekli komutu çalıştırıyoruz ve tekrar konfigürasyonların aynı olup olmadığını kontrol ettiğim de artık cluster konfigürasyonların aynı olduğunu şekil 5.54’teki gibi görebilirsiniz. Şekil 5.54 node’lar üzerindeki cluster.conf dosyasının kontrolü Not: Eğer iki node’lu bir cluster kuruyorsanız aşağıdaki komutu tek node üzerinde de cluster servisinin çalışmasını sağlamak için çalıştırmalısınız. Aksi takdirde cman servisi çalışmayacaktır. # ccs -h node1 --setcman two_node=1 expected_votes=1 # komutu çalıştırdıktan sonra cluster konfigürasyonu yaptığımız node1 makinesi üzerinde değişiklik yapacağı için, tekrardan senkronizasyon sağlamak için yukarda belirtilen komutların çalıştırılması gerekir. Gerekli işlemleri yaptıktan sonra, bütün cluster servislerin makine yeniden başlatılsada her zaman açık olması için aşağıdaki komutları çalıştırıyoruz. # chkconfig --list cman # chkconfig cman on # chkconfig --list clvmd # chkconfig clvmd on #Eğer cluster volume’ler oluşturulurken clvm
  • 115. kullandıysanız gereklidir. # chkconfig --list gfs2 # chkconfig gfs2 on #Eğer dosya sistemi olarak RedHat GFS2 kullanıldıysa gereklidir. # chkconfig modclusterd on # chkconfig --list modclusterd # chkconfig --list rgmanager # chkconfig rgmanager on Bu komutları cluster’daki bütün node’lar üzerinde çalıştırdıktan sonra, node’ları yeniden başlatıyoruz (reboot) ve cluster servisleri başlatılmış bir şekilde makineler açılıyor. Siz isterseniz node’ları yeniden başlatmak (reboot) yerine servisleri sırasıyla çalıştırabilirsiniz. Makineler açıldıktan sonra, clustat komutunu çalıştırdığımızda, aşağıdaki şekil 5.55’de görüldüğü üzere cluster yapısında iki tane node bulunmaktadır ve db_cluster olarak adlandırdığımız cluster servisimiz node1 üzerinde çalışmaktadır. Böylece aktif node olarak node1 görülmektedir. Şekil 5.55 clustat komutunun çıktısı Cluster servisi node1 üzerinde çalıştığına göre, mysql servisininde node1 üzerinde ortak alana mount olduğunu df –h komutunu çalıştırdığımızda aşağıdaki şekil 5.56’daki gibi görüyor olmalıyız.
  • 116. Şekil 5.56 df -h komutunun çıktısı Cluster yapısı ile ilgili aşağıda verilen birkaç komut ve ne işe yaradıkları belirtilmiştir. Ayrıca ccs --help komutunu çalıştırdığınızda ccs komutu ile yapılacak işlemlerin komut listesini bulabilirsiniz. # ccs -h node2 --stop # cluster yapıdaki herhangi bir makineyi durdurmak için kullanılabilecek komut. Bu komutu çalıştırdığımızda cluster yapıdaki node2 makinesini durdurmuş olacağız. # ccs -h node2 --start #cluster yapıdaki herhangi bir makineyi başlatmak için kullanılabilecek komut. Bu komutu çalıştırdığımızda cluster yapıdaki node2 makinesini başlatmış olacağız. # ccs -h node1 --stopall # cluster servislerinin bütün node’lar üzerinde durdurulmasını sağlar. # ccs -h node2 --startall # cluster servislerinin bütün node’lar üzerinde başlatılmasını sağlar. Linux Cluster kurulumlarını ve yönetimini hem grafik arayüzden hemde ccs komutu ile nasıl yapıldığından bahsettik. Bunların dışında cluster konfigürasyonu hazırlamak isterseniz. Temel bir cluster konfigürasyon dosyası belirleyip onun üzerinden direk kendiniz v i editörü ile cluster konfigürasyonunu istediğiniz uygulamayı yada uygulamaları çalıştıracak şekilde düzenleyip hazırlayabilirsiniz. Hazırladığınız cluster konfigürasyon dosyasınıda scp komutuyla cluster’a dahil etmek istediğiniz diğer node’larada gönderdikten sonra, cluster servislerini çalıştırıp sisteminizi hazır hale getirebilirsiniz.
  • 117. BÖLÜM - 6 Cluster Yedekleme & Geri Dönüş (Backup & Restore) Cluster konfigürasyonlarını tamamlayıp çalışırlılığını kontrol ettikten sonra, zaman içerisinde yaşanabilecek olası hatalara karşı cluster konfigürasyonunun yedeklerini almak yararlı olacaktır. Çünkü yaşanabilecek basit hatalarda elimizde cluster konfigürasyonlarının yedeklerinin olması, hatanın daha kolay ve kısa zamanda bulunmasına fayda sağlayabileceği gibi gerekli görüldüğünde de yedekten dönme işleminin yapılmasını sağlayacaktır. Cluster yapının yedeğini alma işlemini iki başlık altında toplayabiliriz; Cluster konfigürasyonunun bulunduğu dosyanın yedeğinin alınması Luci(Grafik arayüz) veritabanının ve gerekli olanhost.pem dosyasının yedeğinin alınması A. Cluster konfigürasyon dosyasının yedeğini alma & geri dönüş (backup & restore) Cluster konfigürasyonunun yedeğinin alınması işlemi aslında cluster.conf dosyasının bulunduğu dizinden “/etc/cluster/cluster.conf“ kopyalanması işlemidir. cluster.conf dosyasını aşağıdaki komutu çalıştırdığımızda “/home” dizinine kopyalıyoruz. Örnek olması açısındancluster.conf dosyasının yedeğinin alınması işlemini şekil 6.1’de görüldüğü gibi aldık. Sizlerde yedeklerinizi nerde tutuyorsanız cluster.conf dosyasınında yedeğini oraya alabilirsiniz. # cp /etc/cluster/cluster.conf /home Şekil 6.1 cluster.conf dosyasının yedeğinin alınması işlemi Not: cluster.conf dosyası cluster’a dahil bütün node’larda aynıdır ve aynı da olması gerekir. Not: cluster.conf dosyasını başka bir makine üzerine yada genel olarak
  • 118. sistemlerinizin yedeğini aldığınız yere almanızı öneririm. Cluster yapısında yaşadığınız herhangi bir sıkıntıda yedek aldığınız cluster.conf dosyası ile varolan cluster.conf dosyasını karşılaştırabilirsiniz. Böylece cluster.conf dosyasında olası yaşanabilecek hataları gözlemleme şansınız olacaktır. Ayrıca cluster’da konfigürasyon dosyasının silinmesi gibi bir durum ile karşılaştığınızda, yedeğinizde bulunan cluster.conf dosyasını “/etc/cluster/” directory altına kopyalayabilirsiniz. Bu tür yapacağınız çalışmalarda cluster’daki bütün node’larda aynı konfigürasyon dosyasının bulunmasına dikkat etmelisiniz. B. Luci(Grafik arayüz) konfigürasyon yedekleme & geri dönüş (backup & restore) Luci “/var/lib/luci/data/luci.db” dosyasında depolanan bir veritabanıdır. Bu cluster konfigürasyon dosyasının kendisi değildir. Cluster konfigürasyonu dosyası daha öncede söylediğimiz gibi “/etc/cluster/cluster.conf” dosyasıdır. Yani Luci diğer bir deyimle grafik arayüzü herhangi bir nedenden dolayı kaybetsekte cluster sistemimiz etkilenmeden çalışıyor olacaktır. Bundan dolayı cluster yapıyı komut satırından yönetmesini bilmenin önemine değinmiştik. Şimdi luci.db veritabanının yedeğini nasıl alacağımıza ve geri dönmek(restore) istediğimizde yapılacak işlemlerin neler olduğunu görelim. Default’ta luci.db dosyasının yedeğini aldığımızda, yedeği luci.db.backup adında aynı klasör içerisinde oluşturacaktır. Aşağıdaki komutları sırayla çalıştırdığımızda şekil 6.2’de görüldüğü üzere aynı klasör içerisinde luci veritabanının yedeği oluşturulmuş durumda. # service luci stop # service luci backup-db # ll /var/lib/luci/data/ Şekil 6.2 Luci veritabanı yedeğinin alınması işlemi
  • 119. Eğer yedeği başka bir yere almak isterseniz “backup-db” komutu için bir parametre olarak dosya ismi ve yerini belirtebilirsiniz. Aşağıdaki komutu çalıştırdığımızda l uc i yedeğini / home dizini altına luci.db.backup adında alıyoruz. # service luci backup-db /home/luci.db.backup Şekil 6.3 Luci veritabanı yedeğinin başka bir yere alınması işlemi Yedek alma işlemini gerçekleştirdiğimize göre luci servisini tekrar çalıştırmak için aşağıdaki komutu kullanabilirsiniz. # service luci start Şekil 6.4 Luci servisinin çalıştırılması işlemi Not: luci veritabanı yedeğini default şekilde değilde başka bir yere alırsanız geri dönüş (restore) işlemi sırasında yedek aldığınız luci veritabanını listelemek adına “service luci list-backups” komutunu çalıştırdığınızda herhangi bir sonuç göstermeyecektir. Luci veritabanından geri dönüş (restore) işlemleri; Aşağıdaki şekil 6.5’de görüldüğü üzere “service luci list-backups” komutunun çıktısı herhangi bir sonuç vermedi çünkü biz yedeği /home dizinine almıştık. # service luci stop # service luci list-backups Şekil 6.5 Luci servisinin durdurulması işlemi # service luci restore-db /home/luci.db.backup
  • 120. # service luci start Yukardaki komutları çalıştırdığımızda luci.db.backup adlı yedeğinden geri dönme(restore) işlemini gerçekleştirmiş olduk. Geri dönüş(restore) işleminden s o nr a luci servisini çalıştırıyoruz ve yedekten dönme(restore) işlemini tamamlamış oluyoruz. Not: Luciveritabanını yedekten dönmek istiyorsunuz fakat yedekten dönmek istediğiniz makinede yaşadığınız bir sıkıntıdan dolayı makineyi yeniden kurdunuz yada luci yedeğini aldığınız makineden, başka bir makineye geri dönmek(restorre) istiyorsunuz fakat host.pem dosyasına sahip değilsiniz. Böyle bir durumda yukarda anlatıldığı gibi yedekten dönme(restore) işlemi yapmak istesenizde başarısız olursunuz. Yedeğini aldığınız makineden, farklı bir makine üzerine luci veritabanını geri dönmek(restore) isterseniz aşağıdaki işlemleri gerçekleştirmelisiniz; Aşağıdaki komutları sırasıyla çalıştırdığımızda, öncelikle luci servisini durduruyoruz. Luci veritabanı yedeğini aldıktan sonra, luci veritabanı ve host.pem dosyasını hangi makine üzerine yedekten dönme işlemini(restore) yapacaksak, o makine üzerine kopyalama işlemini gerçekleştiriyoruz. Yada yedek olarak saklamak istiyorsanız luci veritabanı ile birlikte host.pem dosyasınıda yedeklerinizi tuttuğunuz yere kopyalamalısınız. # service luci stop # service luci backup-db # service luci list-backups # scp /var/lib/luci/certs/host.pem /var/lib/luci/data/luci-backup- 20140206093938.db node2:/home/kurtulus/cluster
  • 121. Şekil 6.6 yedek alma işlemlerinin gerçekleştirilmesi Yedekten dönme(restore) işlemini yapacağımız makine üzerinde luci paketleri yüklü değilse, öncelikle gerekli paketleri yüklemek gerekiyor. Eğer luci yüklü değilse aşağıdaki komutla yükleyebilirsiniz. # yum install luci Artık yedekten dönme(restore) işlemini aşağıdaki komutları çalıştırarak gerçekleştirebiliriz; Aşağıdaki komutları sırasıyla yorumlarsak öncelikle luci servisini durdurarak işleme başlıyoruz. İkinci olarakhost.pem dosyasını aşağıda belirtildiği gibi gerekli dizin altına kopyalıyoruz. Kopyalama işleminden sonra host.pem dosyasının sahibini aşağıda belirtildiği gibi değiştiriyoruz. Yedek aldığımız luci veritabanını yedekten dönme (restore) işlemini gerçekleştiriyoruz ve shred komutuyla kopyaladığımız yerdeki host.pem v e luci-backup yedeğini kalıcı olarak kaldırıyoruz. Son olarak luci servisini başlatarak işlemleri tamamlıyoruz. Bu işlemleri yaptıktan sonra https://node2:8084 şeklinde node2 makinesinin cluster arayüzüne bağlandığımızda aşağıdaki şekil 6.7’de görüldüğü üzere artık cluster bilgilerine node2 üzerinden ulaşabiliriz. # service luci stop # cp /home/kurtulus/cluster/host.pem /var/lib/luci/certs/ # chown luci: /var/lib/luci/certs/host.pem # /etc/init.d/luci restore-db /home/kurtulus/cluster/luci- backup20140206093938.db # shred -u /home/kurtulus/cluster/host.pem /home/kurtulus/cluster/luci-
  • 122. backup20140206093938.db # service luci start Şekil 6.7 node2 üzerine grafik arayüz yükleme sonrası gösterimi
  • 123. BÖLÜM – 7 Cluster Konfigürasyonunda Sorun Giderme(Troubleshooting) Cluster konfigürasyonunda, bütün sistemlerde olduğu gibi çeşitli türden hatalarla karşılaşabilirsiniz. Herhangi bir hatayla karşılaştığınızda öncelikli olarak hatanın cluster yapının hangi bölümüyle ilgili olduğu hakkında bilgi sahibi olmak için (/var/log/messages & /var/log/cluster/…) log’ları incelemenin yararlı olacağı kanaatindeyim. Karşılaştığınız hatanın cluster’ın hangi bölümüyle ilgili olduğunu farkettikten sonra ilk olarak (/etc/cluster/cluster.conf)cluster konfigürasyon dosyasını incelemenizi hatta bölüm-6’ta anlattığımız gibi cluster konfigürasyon dosyasının yedeğini aldığınızı varsayarak, iki cluster konfigürasyon dosyası arasındaki farklılıkları karşılaştırmak yararlı olacaktır. Genel olarak hatalarla ilgilenmeyi bu şekilde başlatabilirsiniz. Ancak hatanın sadece cluster konfigürasyonundan kaynaklanmayacağını gözönünde bulundurmak gereklidir. Bundan dolayı cluster ile beraber çalışan tüm yapıyı kontrol etmek gereklidir. cluster.conf dosyasının kontrolü cluster servislerinin çalışırlılığının kontrolü cluster yapı üzerinde çalışan uygulamanın kontrolü ağ portlarının ve ip’lerin kontrolü fence device ağ bağlantısını ve ip’lerin kontrolü firewall açıksa, kuralların(rules) kontrolü veri depolama ünitesinden verilen diskin kontrolü oluşturulan volume’lerin kontrolü clvm(clustered logical volume manager) varsa kontrolü sunucu & veri depolama bağlantılarının kontrolü bonding varsa kontrolü multipath varsa kontrolü Not : Genel olarak kitap içerisinde cluster yapılandırmasını ve yönetimini anlatırkende bazı dikkat edilmesi gereken hususlara değinmiştik. Şimdi burada da bir takım sorunlarla ilgili değerlendirmelerde bulunacağız. Cluster yapı üzerinde mysql veritabanını çalıştırdığınızı düşünelim.
  • 124. Linux.iso ile gelen mysql versiyonunu değilde, mysql’in daha yeni versiyonunu kullanmak isterseniz mysql’in konfigürasyon dosyası olan my.cnf dosyası düzgün ayarlanmazsa, cluster yapı üzerinde düzgün çalışmadığına ve cluster yapıyı “recoverable” gibi benzer bir duruma düşürdüğüne şahit olabilirsiniz. Cluster yapı kurulumunda dosya sistemi olarak “/dev/sdb1” olarak mount ettiğiniz diskiniz herhangi bir nedenden dolayı(sunucu yeniden başlatıldıktan sonra) “/dev/sdc1” olabilir. Bu durumda cluster yapıda fs resource çalışmayacağı için cluster başarısız (failed) olacaktır. Cluster yapı kurulumunda belirlediğiniz virtual ip adresiniz, ağ’ınızda bulunan başka bir makine üzerine farkında olmadan statik olarak verilmesi durumunda cluster başarısız(failed) olacaktır. Cluster yapıda ortak alan olarak kullandığınız diskinizde gfs2 dosya sistemi(file system) kullanıyorsanız. GFS2 dosya sistemi ile ilgili sorunlarda, gfs2 ile ilgili ayarları kontrol etmek gerekecetir. Böyle bir durumda cluster hataları ile ilgili dökümanlardan çok gfs2 dosya sistemi ile ilgili dökümanlara bakmakta ve gfs2 dosya sistemi ile ilgili araştırma yapmakta yarar vardır. Cluster’daki node’lar üzerinde cluster config versiyonu farklı ise, cluster config versiyonu farklı olan node cluster yapıya dahil olamayacaktır. Daha önceki bölümlerde belirttiğimiz şekliyle c c s komutuyla yada cluster.conf dosyalarını kontrol ederek clusterdaki node’ların config versiyonlarının farklı olup olmadığını görebilirsiniz. Cluster yapının düzgün çalışması adına ağ anahtarları tarafında da kontrol edilmesi gereken hususlar bulunmaktadır. Bunlardan birisi eğer cluster node’ları üzerinde bonding kullanıyorsanız ağ anahtarı tarafında da lacp ayarlarının yapılması gerektiğini belirtmiştik. Diğer bir durum ise cluster node’ları arasındaki haberleşmenin sağlanması için multicast ayarlarının cluster node’larınıda dahil edecek şekilde enable edilmesidir yada ağ anahtarları üzerinde bu tür özel ayarlar yapmayabilirsiniz, yapılmışsada kaldırmak gereklidir. Aksi takdirde node’lar arasındaki haberleşmede sıkıntı olduğunda cluster node’ları sürekli birbirlerini fence’leyerek
  • 126. BÖLÜM – 8 Kavramlar Bonding: Bir IP adresini iki ethernet arabirimine birden tanımlayarak, bir kartın devre dışı kalması durumunda sistemin diğer kart üzerinden ve aynı IP ile devam etmesini sağlamaktır. Conga: Conga ile adlandırılan Linux cluster yapısının yönetimi için geliştirilen arayüzdür. Temel olarak ricci ve luci servislerinden oluşur. Ricci: cluster’a dahil olacak node’lar üzerinde çalışır ve bu servis aracılığıyla local ya da uzak makine üzerinde cluster yapılandırmalarını sağlar. Luci: ricci servisi aracılığıyla yapılacak konfigürasyon için gerekli web arayüzünü sağlar. Fence Devices: Node’lar birbiri ile cluster yapınızda kullanmayı belirlediğiniz fence device üzerinden haberleşirler. Eğer node’lardan biri devre dışı kalırsa, diğer node’un bundan haberi olur ve devreye girerek cluster servisinin devamlılığını sağlar. Fence device cluster yapının en önemli kompenentidir diyebiliriz. Failover Domains: Bu bölümde cluster servisinin aktif node üzerinde durması durumunda node’ların nasıl davranacağı ile ilgili tanımlamalar yapılır. Öncelikler tanımlanarak node’lara cluster servisini üzerine alma sırası verilebilir. Resources: Servis tanımlamalarının yapıldığı bölümdür. Cluster yapı üzerinde kullanmayı düşündüğünüz resources belirleyerek, servis tanımlamaları için gerekli olan resource oluşturma işlemlerinin yapıldığı bölümdür. Service Groups: Bu bölümde resources kısmında tanımladığımız servisleri tek bir servis gibi (grup haline getirerek) cluster yapı üzerinde çalışacak olan cluster servisini oluşturduğumuz bölümdür. Öncelikle bir servis grubu oluşturuyoruz ve resources bölümünde oluşturduğumuz tanımlamaların cluster üzerinde çalışması için bu servis grubuna tanıtılması işlemidir. Bunun için Add Resources butonu kullanılır.
  • 127. Aktif Node & Pasif Node: Adında anlaşılacağı üzere cluster servisini üzerinde çalıştıran node Aktif Node’dur. Bekleme olan node ise Pasif Node’dur. Cluster ip adress: cluster servisleri hangi node üzerinde çalışıyorsa o node’üzerinde görülebilecek olan ve resource bölümünde oluşturduğumuz virtual ip adresimizdir. IP Address Takeover : Aktif Node’un herhangi bir sebepten dolayı cluster servislerini çalıştıramaz hale geldiğinde Pasif Node'un virtual ip adres olarak belirlediğimiz ip adresni üzerine alması işlemidir. Split brain: Split brain senaryosunode’lar arasındaki iletişimin kesilmesi olayıdır. Yani cluster içerisindeki bütün node’lar arasında hiçbir iletişim yoktur.
  • 128. Ekler Ek-1: Linux Yöneticisi İçin Komutlar Clustat cluster durumunu gösterir. Ccs kendisiyle beraber kullanılan parametrelerle cluster konfigürasyonunu ve yönetimini yapabilmeyi sağlar. Clusvcadm cluster servisinlerinin yönetimini sağlar. Ccs_config_validate cluster.conf dosyanın geçerliliğini denetler. Fence_tool fence daemon sorgularını ve kontrollerini yapmayı sağlar. Fenced_node fence’in node’lar üzerinde çalışırlılığını test etmeye yarar. fence_ack_manual fence device’ların manuel olarak kullanımını sağlar. tail -f /var/log/messages /var/log/secure # ikinci bir terminal açıp orada logları online izlemeyi sağlar. Not: Kitap içerisinde gerekli komutlardan yeterince bahsedildiği için burada tekrardan anlatıma gerek duyulmamıştır. Sadece bilgi amaçlı bazı temel komutlardan bahsedilmiştir. Ek-2: MBR ve GPT disk türlerinin karşılaştırması Functionality MBR GPT Legacy OS like MS DOS,MS Windows Yes No Greater than 2TB No Yes Data disk in x86_64 and x86 version of OS Yes Yes Boot disk in x86_64 version of OS Yes Yes Boot disk in x86 version of OS Yes No More than 4 primary partition No Yes (Up to 128) BIOS Mode Booting Yes Implementation specific UEFI Mode Booting No Yes
  • 129. Ek-3: Default Multipath Konfigürasyon Seçenekleri [root@node1 ~]# cat /usr/share/doc/device-mapper-multipath- 0.4.9/multipath.conf.defaults # These are the compiled in default settings. They will be used unless you # overwrite these values in your config file. #defaults { # udev_dir /dev # polling_interval 5 # path_selector "round-robin 0" # path_grouping_policy failover # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # prio const # path_checker directio # rr_min_io 1000 # rr_weight uniform # failback manual # no_path_retry fail # user_friendly_names no #} # #blacklist { # devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" # devnode "^hd[a-z]" # devnode "^dcssblk[0-9]*" #} # #devices { # device { # vendor "APPLE*" # product "Xserve RAID" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0"
  • 130. # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "3PARdata" # product "VV" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "DEC" # product "HSG80" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "1 hp_sw" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker hp_sw
  • 131. # prio hp_sw # } # device { # vendor "HP" # product "A6189A" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "(COMPAQ|HP)" # product "(MSA|HSV)1.0.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "1 hp_sw" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker hp_sw # prio hp_sw # } # device { # vendor "(COMPAQ|HP)"
  • 132. # product "MSA VOLUME" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker tur # prio alua # } # device { # vendor "HP" # product "MSA2000s*" # getuid_callout "/sbin/cciss_id %n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "(COMPAQ|HP)" # product "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
  • 133. # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker tur # prio alua # } # device { # vendor "HP" # product "MSA2[02]12*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # failback immediate # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "HP" # product "LOGICAL VOLUME.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0"
  • 134. # path_selector "round-robin 0" # path_grouping_policy multibus # failback immediate # rr_weight uniform # no_path_retry 12 # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "HP" # product "OPEN-.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # no_path_retry 18 # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "HP" # product "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCS" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio
  • 135. # rr_weight uniform # no_path_retry 18 # rr_min_io 100 # path_checker tur # prio alua # } # device { # vendor "DDN" # product "SAN DataDirector" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "EMC" # product "SYMMETRIX" # getuid_callout "/lib/udev/scsi_id --whitelisted --page=pre-spc3-83 -- device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # no_path_retry 6 # rr_min_io 1000 # path_checker tur
  • 136. # prio const # } # device { # vendor "DGC" # product ".*" # product_blacklist "LUNZ" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # prio_callout "/sbin/mpath_prio_emc /dev/%n" # features "1 queue_if_no_path" # hardware_handler "1 emc" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 60 # rr_min_io 1000 # path_checker emc_clariion # prio emc # } # device { # vendor "EMC" # product "Invista" # product_blacklist "LUNZ" # getuid_callout "/lib/udev/scsi_id --whitelisted --page=pre-spc3-83 -- device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # no_path_retry 5 # rr_min_io 1000
  • 137. # path_checker tur # prio const # } # device { # vendor "FSC" # product "CentricStor" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_serial # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "FUJITSU" # product "ETERNUS_DX(L|400|8000)" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 10 # rr_min_io 1000 # path_checker tur # prio alua # } # device {
  • 138. # vendor "HITACHI" # product "OPEN-.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # no_path_retry 6 # rr_min_io 100 # path_checker tur # prio const # } # device { # vendor "HITACHI" # product "DF.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio hds # } # device { # vendor "IBM" # product "ProFibre 4000R" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0"
  • 139. # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker readsector0 # prio const # } # device { # vendor "IBM" # product "1722-600" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry 300 # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "IBM" # product "1742" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate
  • 140. # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "IBM" # product "1814" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "IBM" # product "1815" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue
  • 141. # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "IBM" # product "3526" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "IBM" # product "3542" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_serial # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio const # }
  • 142. # device { # vendor "IBM" # product "2105(800|F20)" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_serial # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "IBM" # product "1750500" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio alua # } # device { # vendor "IBM" # product "2107900" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path"
  • 143. # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "IBM" # product "2145" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio alua # } # device { # vendor "IBM" # product "S/390 DASD ECKD" # product_blacklist "S/390.*" # getuid_callout "/sbin/dasd_id /dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform
  • 144. # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "NETAPP" # product "LUN.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "3 queue_if_no_path pg_init_retries 50" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 128 # path_checker tur # flush_on_last_del yes # prio ontap # } # device { # vendor "IBM" # product "Nseries.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 128 # path_checker directio # prio ontap
  • 145. # } # device { # vendor "IBM" # product "1820N00" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 100 # path_checker tur # prio alua # no_path_retry queue # } # device { # vendor "Pillar" # product "Axiom.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio alua # } # device { # vendor "IBM" # product "3303 NVDISK"
  • 146. # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_grouping_policy failover # failback immediate # no_path_retry 60 # rr_weight uniform # rr_min_io 1000 # path_checker tur # } # device { # vendor "AIX" # product "NVDISK" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 alua" # path_grouping_policy group_by_prio # failback immediate # no_path_retry 60 # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio alua # prio_args "" # } # device { # vendor "SGI" # product "TP9[13]00" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0"
  • 147. # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "SGI" # product "TP9[45]00" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "SGI" # product "IS.*" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue
  • 148. # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "STK" # product "OPENstorage D280" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio rdac # } # device { # vendor "SUN" # product "(StorEdge 3510|T4)" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device {
  • 149. # vendor "PIVOT3" # product "RAIGE VOLUME" # getuid_callout "/lib/udev/scsi_id --whitelisted --page=0x80 -- device=/dev/%n" # features "1 queue_if_no_path" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy multibus # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio const # } # device { # vendor "SUN" # product "CSM200_R" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "SUN" # product "LCSM100_[IF]" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
  • 150. # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "STK" # product "FLEXLINE 380" # product_blacklist "Universal Xport" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 rdac" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # no_path_retry queue # rr_min_io 1000 # path_checker rdac # prio rdac # } # device { # vendor "EUROLOGC" # product "FC2502" # getuid_callout "/lib/udev/scsi_id --page=0x80 --whitelisted -- device=/dev/%n"
  • 151. # features "0" # hardware_handler "0" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # rr_weight uniform # rr_min_io 1000 # path_checker directio # prio const # } # device { # vendor "NEC" # product "DISK ARRAY" # getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n" # features "0" # hardware_handler "1 alua" # path_selector "round-robin 0" # path_grouping_policy group_by_prio # failback immediate # rr_weight uniform # rr_min_io 1000 # path_checker tur # prio alua # } #} [root@node1 ~]# Not: Burada görüldüğü üzere genel olarak üretici firmaların ürünlerinin ayrı ayrı multipath konfigürasyon bilgileri verilmiştir. Sizlerde sisteminizde kullandığınız ürüne göre gerekli görülen konfigürasyonları burada belirtildiği gibi kendi multipath konfigürasyon dosyanızda kullanabilirsiniz.