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.
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"/>
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
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-
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"