FILESTORE KURULUMU
İçindekiler
- 1 Test Sistemi Donanım Bilgileri
- 2 Test Sistemi Bağlantı Şeması
- 3 İşletim Sistemi Yapılandırması
- 3.1 İşletim Sistemi Sürümü
- 3.2 /etc/hosts Dosyasının Düzenlenmesi
- 3.3 NTP ile Saat Senkronizasyonu
- 3.4 /etc/security/limits.conf Dosyası Dosya Açma Limitlerinin Arttırılması
- 3.5 SSD Diskler İçin I/0 Scheduler ve Rotation Değerlerinin Değiştirilmesi
- 3.6 Disk read_ahead değerinin Arttırılması
- 3.7 Apparmor Yazılımının Kapatılması
- 4 XFS Dosya Sistemi Yapılandırması
- 5 Ceph Yazılımı Kurulumu
- 6 Ceph Calamari GUI Kurulumu
Test Sistemi Donanım Bilgileri
6 Adet Dell R815 Sunucu, 5 Adedi data düğümü bir adedi monitör olarak kullanıldı. Data sunucularının özellikleri:
- 4 x AMD Opteron(tm) Processor 6174 İşlemci
- 128GByte Bellek
- 5x500GByte 7200RPM SAS Disk, 1 Adet 240G SSD Disk
root@ceph1:/home/ubuntu# lshw -short -C disk H/W path Device Class Description ============================================================ /0/100/4/0/0/0/2.0.0 /dev/sda disk 499GB PERC H700 /0/100/4/0/0/0/2.1.0 /dev/sdb disk 499GB PERC H700 /0/100/4/0/0/0/2.2.0 /dev/sdc disk 499GB PERC H700 /0/100/4/0/0/0/2.3.0 /dev/sdd disk 499GB PERC H700 /0/100/4/0/0/0/2.4.0 /dev/sde disk 239GB PERC H700 /0/100/4/0/0/0/2.5.0 /dev/sdf disk 499GB PERC H700
- 4 Adet 1Gbps Ethernet kartı
root@ceph1:/home/ubuntu# lshw -short -C network H/W path Device Class Description ============================================================ /0/100/2/0 em1 network NetXtreme II BCM5709 Gigabit Ethernet /0/100/2/0.1 em2 network NetXtreme II BCM5709 Gigabit Ethernet /0/100/3/0 em3 network NetXtreme II BCM5709 Gigabit Ethernet /0/100/3/0.1 em4 network NetXtreme II BCM5709 Gigabit Ethernet
Sunucu bağlantıları için ilk olarak 1Gbps arayüz ile Juniper EX4300 Anaharalama cihaz ile yapıldı. Daha sonra Intel 82599 chiptetli 10Gbps ethernet kartları takılarak Cluster ağı 10Gbps olarak bağlandı.
Test Sistemi Bağlantı Şeması
IMAGE
İşletim Sistemi Yapılandırması
İşletim Sistemi Sürümü
İşletim sistemi olarak ubuntu MAAS aracılığı ile ubuntu-14.04 kuruldu. Ubuntu 14.04 ile gelen 3.13.0-48 çekirdeği 3.15 ve üzeri çekirdekler ile gelen xfs dosya sistemindeki değişikleri (boş olan inode’latın takibi için btree desteği) içermediğinden işletim sistemi çekirdeği
apt-get -y install linux-image-generic-lts-utopic
komutu ile 3.16.0-33 olarak güncellendi.
/etc/hosts Dosyasının Düzenlenmesi
Sunucuların birbirinden haberdar olması için /etc/hosts dosyasına sunucu bilgileri eklendi.
172.16.3.3 ceph1 172.16.3.10 ceph2 172.16.3.11 ceph3 172.16.3.12 ceph4 172.16.3.13 ceph5 172.16.3.14 cephm
NTP ile Saat Senkronizasyonu
Sunucuların saatlerinin senkronize edilmesi için sisteme ntp sunucu kurup gerekli yapılandırma gerçekleştirildi.
/etc/security/limits.conf Dosyası Dosya Açma Limitlerinin Arttırılması
Kullanıcıların açabileceği maksimum dosya tanımlayıcısı (file descriptor) sayısını /etc/security/limits.conf dosyasına aşağıdaki satırları ekleyerek arttırıyoruz.
soft nofile 65000 hard nofile 65000
SSD Diskler İçin I/0 Scheduler ve Rotation Değerlerinin Değiştirilmesi
SSD disklerin scheduler’i atanmış değerinden SSD diskler için daha uygun olan noop’a değiştirmek için: (SSD disk sde)
echo noop > /sys/block/sde/queue/scheduler
yazmak yeterli. SSD diskler klasik diskler gibi dönen hareketli parçalardan oluşmadığı için SSD diskleri kullanan işletim sistemlerinin I/O operasyonlarını bu durumu göz önüne alarak gerçekleştirmeleri gerekiyor. Bu nedenle SSD disklerin rotation değeri 0 olmalı. Mevcut durumu görmek için:
root@ceph1:/home/ceph# cat /sys/block/sde/queue/rotational 1
komutunu kullandığımızda değerin 1 olduğunu görüyoruz. Normalde işletim sisteminin diskin SSD olduğunu anlayıp bu değer 0 yapmasını bekliyoruz. Manüel olarak 0 yapmak için:
echo "1" > /sys/block/sde/queue/rotational
Disk read_ahead değerinin Arttırılması
Disklerin atanmış değerleri olan 128, 2048 olarak değiştirildi. Mevcut değeri görmek için:
root@ceph1:/home/ceph# cat /sys/block/sde/queue/read_ahead_kb 128
Yeni değerin atanması:
root@ceph1:/home/ceph# echo 2084 > /sys/block/sde/queue/read_ahead_kb root@ceph1:/home/ceph# cat /sys/block/sde/queue/read_ahead_kb 2084
OSD diskleri için değerleri açılışta geçerli kılmak için aşağıdaki satırları /etc/rc.local dosyasına ekleyebilirsiniz.
echo 2084 > /sys/block/sdb/queue/read_ahead_kb echo 2084 > /sys/block/sdc/queue/read_ahead_kb echo 2084 > /sys/block/sdd/queue/read_ahead_kb echo 2084 > /sys/block/sde/queue/read_ahead_kb echo 2084 > /sys/block/sdf/queue/read_ahead_kb
read_ahead_kb değerinin arttırılması sıralı okuma (sequential read) performansınızı arttıracaktır. I/O örüntünüze göre bu değeri daha arttırarak performans kazanımı sağlayabilirsiniz. Bu değerin arttırılması hafıza kullanımının artmasına neden olacağı için bellek kullanımı üzerinde bir baskı oluşturabilir.
yazmak yeterli. Açılışta geçerli olması için echo ile başlayan komutları satırı /etc/rc.local’a ekleyebilirsiniz.
Apparmor Yazılımının Kapatılması
invoke-rc.d apparmor kill update-rc.d -f apparmor remove
XFS Dosya Sistemi Yapılandırması
Ceph XFS Dosya Sistemi Yapılandırması
Ceph’te ext4,btrfs ve xfs dosya sistemi olarak kullanılabiliyor. Btrfs’in henüz production için kullanımı önerilmiyor. Ceph belgelerinde production sistemler için xfs kullanımı önerildiği için kurulumu xfs üzerinden gerçekleştiriyoruz. Dosya sisteminin ne olacağı, mkfs ve mount opsiyonları ceph.conf dosyasında tanımlanıyor.
Dosya Sistemi Yaratılması
Disklerin dosya sistemini yaratırken mkfs.xfs programında ilk olarak size=2048 argümanını kullanıyoruz. Bunun nedeni ceph tarafından kullanılan Extended Attributes (XATTRs) daha fazla alan açmak. Size argümanı inode büyüklüğü tanımlamak için kullanılıyor. Atanmış değeri (default) 256 ki buda 256Byte’a karşılık geliyor. 512 Byte inode kullanımında ortalama 350 Byte’lık bir alan xattr kullanımına kalıyor. Bu değeri 2048 yaptığımızda yaklaşık1900 Byte alanı xattr için ayırmış oluyoruz.
mkfs.xfs programına argüman olarak kullandığımız opsiyonlardan bir diğeri finobt=1. Bu argüman xfs’in boş inode’ların takibini btree algoritması ile yapılmasını sağlıyor. Bu özelliği kullanmak için çekirdek sürümünüzün 3.15 xfsprogs sürümünüzün 3.2 ve üzeri olması gerekiyor.
Ubuntu 14.04 ile xfsprogs sürümü 3.1.9 olarak geliyor. xfsprogs 3.2 ve üzerinde gelen finobt argümanının kullanabilmek için xfsprogs paketini aşağıdaki komutları kullanarak güncelliyoruz.
wget -c http://mirrors.kernel.org/ubuntu/pool/main/x/xfsprogs/xfsprogs_3.2.1ubuntu1_amd64.deb dpkg -i xfsprogs_3.2.1ubuntu1_amd64.deb
mkfs.xfs programında kullandığımız üçüncü argüman crc=1. Bu argüman xfs’in metadatadaki bozulmaları karcı CRC32 algoritmasını kullanarak denetlemesini sağlıyor. Hepsi bir arada komut sdb diski için dosya sistemi yaratmak istersek:
mkfs.xfs -m crc=1,finobt=1 -f -i size=2048 /dev/sdb
halini alıyor.
Dosya Sistemi Mount Opsiyonları
Örnek olarak verdiğimizi sdb diskinin fstab’a eklemek için:
/dev/sdb /disk1 xfs rw,noatime,inode64,logbsize=256k,delaylog 0 1
Kullandığımız mount opsiyonları açıklamaları: noatime: Dosya sisteminin en son erişim zamanı bilgisini tutmaması için inode64: 1TByte üzeri disklerde kullanılması önerilen ve inode’ların 64 bit olarak tanımlanması logbsize=256k : Çok fazla okuma yazma yapan dosya sistemleri için artırılması öneriliyor. Atanmış değeri 32k delaylog: Metadata bilgisinin bellekte mümkün olduğunca tutulup yapılan I/O miktarını azaltan bir opsiyon. Ceph’te dosya sistemini yaratılırken hangi opsiyonların kullanılacağını ceph.conf’ta [osd] başlığı altında tanımlıyoruz. Elle mkfs yapmanıza yada mount etmenize gerek yok.
[osd] osd mkfs type = xfs osd mkfs options xfs = -m crc=1,finobt=1 -f -i size=2048 osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog
Ceph Yazılımı Kurulumu
İlk olarak tüm sunucularda ceph kullanıcısını açıyoruz.
root# useradd -d /home/ceph -m ceph root# apt-get install sudo root# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph root# chmod 0440 /etc/sudoers.d/ceph
Ceph monitor sunucusunda (cephm) ssh anahtarlarını yaratıyoruz:
ceph@cephm: ssh-keygen -t dsa
Yarattığımız ssh anahtarlarını ceph depolama sunucularına (ceph1,ceph2,ceph3,ceph4,ceph5) kopyalıyoruz:
ceph@cephm: ssh-copy-id -i .ssh/id_dsa.pub ceph@ceph1 ceph@cephm: ssh-copy-id -i .ssh/id_dsa.pub ceph@ceph2 ceph@cephm: ssh-copy-id -i .ssh/id_dsa.pub ceph@ceph3 ceph@cephm: ssh-copy-id -i .ssh/id_dsa.pub ceph@ceph4 ceph@cephm: ssh-copy-id -i .ssh/id_dsa.pub ceph@ceph5
Tüm sunucularda Ceph reposunu ekleyip ceph’i kuruyoruz:
root# wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add - root# echo deb http://ceph.com/debian-giant/trusty main | sudo tee /etc/apt/sources.list.d/ceph.list root# apt-get update root# apt-get install ceph-deploy
Cephm sunucusunda ceph kullanıcısı ile aşağıdaki komutları çalıştırıyoruz. İlk olarak config isimli bir dizin yaratıp yaptığımız yapılandırmalarının bu dizin altında yer almasını sağlayalım.
mkdir config cd config
ceph-deploy ile ilk sunucumuz olan monitor sunucusunu tanımlayalım.
ceph-deploy new cephm
Bu komuttan sonra bulunduğunuz dizinin içinde ceph.mon.keyring dosyası ile ceph.conf dosyasının oluşmuş olması gerekiyor. ceph.conf dosyasına [global] tanımı altına aşağıdaki satırları ekliyoruz:
#20 disk x 100 / 3 replica = 666 osd pool default pg num = 666 osd pool default pgp num = 666 osd pool default size = 3 public network = 172.16.3.0/16 cluster network = 10.10.10.0/24
[osd] kısmı altında xfs dosya sistemi yaratılırken ve mount edilirken geçerli olacak argümanları tanımlıyoruz.
osd mkfs type = xfs osd mkfs options xfs = -m crc=1,finobt=1 -f -i size=2048 osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog
ceph.conf dosyamızın son hali aşağıdaki şekilde:
[global] fsid = 12bee812-a843-4103-9321-febe8c5108e6 mon_initial_members = cephm mon_host = 172.16.3.14 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx filestore_xattr_use_omap = true #20 disk x 100 / 3 replica = 666 osd pool default pg num = 666 osd pool default pgp num = 666 osd pool default size = 3 public network = 172.16.3.0/16 cluster network = 10.10.10.0/24 [osd] osd mkfs type = xfs osd mkfs options xfs = -m crc=1,finobt=1 -f -i size=2048 osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog
Bu aşamdan sonra ceph-deploy ile sunucuların kurulumlarını ve monitör sunucusu tanımlarını yapıyoruz:
ceph-deploy install cephm ceph1 ceph2 ceph3 ceph4 ceph5 ceph-deploy mon create-initial
Bundan sonraki aşamada sunucular üzerinde osd için kullanacağımız diskleri hazırlıyoruz. Zap kumutu disklerde bulunan partition vs bilgisini siliyor. osd prepare’ ile disklerin ceph için hazırlanma işlemleri gerçekleştiriliyor. /dev/sde diski journal için kullanılacak olan SSD diski. Bu nedenle osd prepare komutunda hazırlancak diskten sonra araya : koyararak ekliyoruz.
ceph-deploy disk zap ceph1:sdb ceph1:sdc ceph1:sdd ceph1:sde ceph1:sdf ceph-deploy osd prepare ceph1:sdb:/dev/sde ceph-deploy osd prepare ceph1:sdc:/dev/sde ceph-deploy osd prepare ceph1:sdd:/dev/sde ceph-deploy osd prepare ceph1:sdf:/dev/sde
ceph-deploy disk zap ceph2:sdb ceph2:sdc ceph2:sdd ceph2:sde ceph2:sdf ceph-deploy osd prepare ceph2:sdb:/dev/sde ceph-deploy osd prepare ceph2:sdc:/dev/sde ceph-deploy osd prepare ceph2:sdd:/dev/sde ceph-deploy osd prepare ceph2:sdf:/dev/sde
ceph-deploy disk zap ceph3:sdb ceph3:sdc ceph3:sdd ceph3:sde ceph3:sdf ceph-deploy osd prepare ceph3:sdb:/dev/sde ceph-deploy osd prepare ceph3:sdc:/dev/sde ceph-deploy osd prepare ceph3:sdd:/dev/sde ceph-deploy osd prepare ceph3:sdf:/dev/sde
ceph-deploy disk zap ceph4:sdb ceph4:sdc ceph4:sdd ceph4:sde ceph4:sdf ceph-deploy osd prepare ceph4:sdb:/dev/sde ceph-deploy osd prepare ceph4:sdc:/dev/sde ceph-deploy osd prepare ceph4:sdd:/dev/sde ceph-deploy osd prepare ceph4:sdf:/dev/sde
ceph-deploy disk zap ceph5:sdb ceph5:sdc ceph5:sdd ceph5:sde ceph5:sdf ceph-deploy osd prepare ceph5:sdb:/dev/sde ceph-deploy osd prepare ceph5:sdc:/dev/sde ceph-deploy osd prepare ceph5:sdd:/dev/sde ceph-deploy osd prepare ceph5:sdf:/dev/sde
Son olarak admin nodu’u tanımı:
ceph-deploy admin cephm ceph1 ceph2 ceph3 ceph4 ceph5 sudo chmod +r /etc/ceph/ceph.client.admin.keyring
Her şey yolunda giderse:
ceph health
komutun çıktısı aşağıdaki şekilde olmalı: HEALTH_OK
Aşağıdaki hatayı almanız pgs sayısını arttırmanız gerektiği anlamına geliyor:
HEALTH_WARN too few pgs per osd (3 < min 20)
Sayıyı arttırmak için aşağıdaki komutu kullanabilirsiniz.
ceph osd pool set rbd pgp_num 666 ceph osd pool set rbd pg_num 666
Ceph Calamari GUI Kurulumu
Calamari Intank tarafınfan ceph’in izlenmesi için geliştirilen bir gui uygulaması. Orjinal kurulum belgesi oldukça karışık, İnternette arama yaparken bulduğum belge üzerinde Ubuntu 14.04 üzerinden calamari kurulumu gerçekleştirdim. Yazıldığı şekilde çalışmadığı için bir kaç ekleme yapmak gerekti. Kurulum için ilk olarak gerekli olan deb paketlerini hazırlamanız gerekiyor.
Calamari Kurulum için Gerekli Paketler
echo "deb http://ppa.launchpad.net/saltstack/salt/ubuntu trusty main"
> /etc/apt/sources.list.d/saltstack.list
wget -q -O- "http://keyserver.ubuntu.com:11371/pks/lookup?op=get& search=0x4759FA960E27C0A6" | sudo apt-key add -
apt-get update apt-get install salt-master salt-minion salt-syndic
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc
| sudo apt-key add -
apt-get update && sudo apt-get upgrade apt-get install -y curl build-essential openssl libssl-dev apache2 libapache2-mod-wsgi libcairo2 supervisor python-cairo libpq5 postgresql python-m2crypto python-virtualenv git python-dev swig libzmq-dev g++ postgresql-9.1 postgresql-server-dev-9.1 libcairo2-dev python-pip libpq-dev ruby debhelper python-mock python-configobj cdbs gem ruby1.9.1 ruby1.9.1-dev make devscripts software-properties-common python-support
cd ~ git clone https://github.com/joyent/node.git cd node git checkout v0.10.10 ./configure make -j4 make install
mkdir ~/npm cd ~/npm wget --no-check-certificate https://npmjs.org/install.sh sh install.sh
npm install -g bower npm install -g coffee-script npm install -g grunt-cli npm install -g grunt-legacy-util npm install -g grunt-legacy-log npm install -g dateformat npm install -g eventemitter2 npm install -g glob npm install -g minimatch npm install -g findup-sync npm install -g js-yaml npm install -g rimraf npm install -g iconv-lite npm install -g nopt npm install -g grunt-lib-contrib npm install -g uglify-js npm install -g filesize npm install -g optipng-bin npm install -g jpegtran-bin gem install compass gem install sass
Calamari Server Kurulumu Paketi Hazırlanması
cd ~ git clone https://github.com/ceph/calamari.git cd calimari cd debian mv source source.old cd .. dpkg-buildpackage
Bu işlemlerden sonra bir alt dizinde aşağıdaki dosyalar oluşacak:
calamari-server_1.0.0-1_amd64.deb calamari_1.0.0-1.tar.gz