FILESTORE KURULUMU

BulutWiki sitesinden
Admin (mesaj | katkılar) tarafından oluşturulmuş 12:03, 20 Eylül 2018 tarihli sürüm
(fark) ← Önceki hâli | En güncel hâli (fark) | Sonraki hâli → (fark)
Şuraya atla: kullan, ara

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ı

büyükresim

İş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

Diamond Kurulumu Paketi Hazırlanması

git clone https://github.com/ceph/Diamond.git cd Diamond git checkout calamari dpkg-buildpackage cd .. ls diam* diamond_3.1.0_all.deb diamond_3.1.0_amd64.changes diamond_3.1.0.dsc diamond_3.1.0.tar.gz

Tüm işlemler bitinde yaratılan tüm dosyaları bir dizin altına toplayın. Buraya kadar olan  derleme kısmı sonunda elinizde bulunması gereken dosyalar:

ceph@cephm:~/CEPH$ ls -al total 40176 drwxrwxr-x 2 ceph ceph 4096 Apr 3 07:06 . drwxr-xr-x 15 ceph ceph 4096 Apr 6 09:20 .. -rwxr-xr-x 1 root root 23263443 Apr 2 09:14 calamari_1.0.0-1.tar.gz -rwxr-xr-x 1 root root 319104 Apr 2 14:45 calamari-admin.tar.gz -rwxr-xr-x 1 root root 563767 Apr 2 14:45 calamari-dashboard.tar.gz -rwxr-xr-x 1 root root 338871 Apr 2 14:45 calamari-login.tar.gz -rwxr-xr-x 1 root root 491400 Apr 2 14:45 calamari-manage.tar.gz -rwxr-xr-x 1 root root 11027912 Apr 2 09:21 calamari-server_1.0.0-1_amd64.deb -rwxr-xr-x 1 ceph ceph 231674 Apr 2 14:46 diamond_3.1.0_all.deb -rwxr-xr-x 1 ceph ceph 1123 Apr 2 14:46 diamond_3.1.0_amd64.changes -rwxr-xr-x 1 ceph ceph 711 Apr 2 14:46 diamond_3.1.0.dsc -rwxr-xr-x 1 ceph ceph 4874357 Apr 2 14:46 diamond_3.1.0.tar.gz

CALAMARİ Sunucusu Kurulumu

Kurulumu cephm sunucusunda yapım. Kurulum için gerekli olan dosyaları /home/ceph/CEPH dizini altında.

mkdir -p /opt/calamari/webapp/content cd /opt/calamari/webapp/content/ mkdir dashboard cd dashboard/ tar -xzvf /home/ceph/CEPH/calamari-dashboard.tar.gz cd .. mkdir login mkdir manage mkdir admin cd login tar -xzvf /home/ceph/CEPH/calamari-login.tar.gz cd .. cd manage tar -xzvf /home/ceph/CEPH/calamari-manage.tar.gz cd .. cd admin tar -xzvf /home/ceph/CEPH/calamari-admin.tar.gz cd .. cd /home/ceph/CEPH

aptitute install python-twisted python-txamqp python-greenlet python-sqlalchemy python-gevent

dpkg -i ./calamari-server_1.0.0-1_amd64.deb

En son komutun çıktısı:

root@cephm:/home/ceph/CEPH# dpkg -i ./calamari-server_1.0.0-1_amd64.deb (Reading database ... 100135 files and directories currently installed.) Preparing to unpack .../calamari-server_1.0.0-1_amd64.deb ... Unpacking calamari-server (1.0.0-1) over (1.0.0-1) ... Setting up calamari-server (1.0.0-1) ... ERROR: Module version does not exist! salt-master stop/waiting salt-master: no process found salt-master start/running, process 52801 Stopping supervisor: supervisord. Starting supervisor: supervisord.

  • Stopping web server apache2 *
  • Starting web server apache2 *

Thank you for installing Calamari.

Please run 'sudo calamari-ctl initialize' to complete the installation.

Diamond paketini de kuruyoruz:

dpkg -i ./diamond_3.1.0_all.deb

Salt Minion paketini kurup gerekli ayarları yapıyoruz:

apt-get install salt-minion

/etc/salt/minion dosyasında master ile başlayan tanıma sunucu kurulumunun yaptığımız sunucunun ismini yazıyoruz:

master: cephm

diamond ve salt-minion servislerini restart ediyoruz.

service diamond restart service salt-minion restart

En son olarak sunucu tarafından calamari programının başlatılması için gerekli komutu yazıyoruz. Bu aşamada size web arayüzü için kullanıcı adı ve parola soracak.

calamari-ctl initialize

CALAMARİ İstemcileri  Kurulumu

ceph1,ceph2,ceph3,ceph4,ceph5 sunucularına istemci kurulumlarını yapıyoruz.


aptitude install python-support dpkg -i ./diamond_3.1.0_all.deb cd /etc/diamond/ cp diamond.conf.example diamond.conf apt-get -y install salt-minion

/etc/salt/minion dosyasında master ile başlayan tanıma sunucu kurulumunun yaptığımız sunucunun ismini yazıyoruz.

master: cephm

diamond ve salt-minion servislerini restart ediyoruz.

service diamond restart service salt-minion restart

İstemcilerde salt-minion’u restart ettikten 30sn-1dk içinde sunucu web arayüzünde istemci adı ile birlikte calamari için register edilmeye hazır olarak gözüküyorlar. Ekran görüntüsünü aşağıda: büyükresim