İçindekiler
İlk Bakışta Ceph
Dünyada her geçen gün daha popüler hale gelen açık kaynak kodlu dağıtık depolama sistemlerinden olan Ceph; nesne tabanlı depolama, blok tabanlı depolama ve dosya sistemi olmak üzere üç farklı depolama mimarisini aynı ortamdan sunabilmektedir. Özellikle performans, güvenilirlik ve ölçeklenebilirlik konusunda öne çıkan Ceph, bir metadata sunucusu gerektirmemesi ile diğer dağıtık depolama sistemlerinden bir adım öne çıkmaktadır. Metadata sunucuları verinin hangi konuma yazıldığını tutan sunucular olup bu sunuculara erişim konusunda yaşanan bir problem tüm depolama servislerini etkilemektedir. Bundan farklı olarak Ceph, metadata sunucusu yerine yazacağı verinin yerini belirleyen bir algoritma (CRUSH) kullanır. her istemci bu algoritmayı kullanarak yazacağı konumu belirler. Veri okunacağı zaman yine aynı algoritma sayesinde verinin okunacağı konum belirlenir. Ceph üzerinde verinin dağıtık olarak birden fazla kopyası tutulur. Okuma veya yazma yapılabilmesi için sadece depolama düğümlerinin erişilebilir olup olmadığı bilgisini tutan monitör sunucuları kullanılır.
OpenStack Ceph Entegrasyonu
OpenStack bir çok ticari depolama çözümünün entegrasyonuna izin vermekle birlikte, son zamanlarda Ceph; gelişmiş özellikleri, açık kaynak kodlu olması ve kolay entegrasyonu ile OpenStack için ilk akla gelen depolama çözümü olmaya başlamıştır. Halen bir çok konuda gelişmekte olan Ceph, OpenStack altyapısında Nova, Glance ve Cinder ile birlikte kullanılabilmektedir.
Ceph’in blok cihaz mekanizması RBD (Rados Block Device), OpenStack’in 3 farklı bileşeni ile entegre olabilmektedir:
İmajlar: İşletim sistemi imajları Glance tarafından yönetilir. Değişmeyen içeriğe sahiptirler. OpenStack imajları binary blob olarak saklar.
İşletim Sistemi Diskleri: Açılan sanal sunuculara ait işletim sisteminin bulunduğu disklerdir. Genelde /var/lib/nova/instances/<uuid>/ altında tutulur. Nova ile yönetilir.
Depolama Diskleri: İşletim sistemine eklenen blok cihazlardır. OpenStack ayrıca depolama diski üzerinden sanal sunucu boot etmeyi desteklemektedir. Depolama diskleri Cinder tarafından yönetilir.
Ceph, sanal sunucu diski yapmak üzere QCOW2 imaj formatını desteklemez. Bu nedenle OpenStack ile sanal sunucuyu depolama diskinden boot etmek için Glance üzerindeki imaj formatının RAW olması gerekir.
Ceph Tarafının Hazırlanması
Cinder, glance ve nova ile kullanılmak üzere disk havuzları oluşturulmalıdır.
1 2 3 4 |
ceph osd pool create volumes 128 ceph osd pool create images 128 ceph osd pool create backups 128 ceph osd pool create vms 128 |
Ardından OpenStack Ceph istemcileri yapılandırılmalıdır. Glance-api, cinder-volume, nova-compute ve cinder-backup çalıştıran her sunucuya ceph.conf kopyalanmalıdır.
1 |
ssh {ilgili-openstack-sunucusu} sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf |
Glance-api sunucusuna python-rbd kurulmalıdır.
1 |
sudo apt-get install python-rbd |
Nova-compute, cinder-backup ve cinder-volume servislerini çalıştıran sunuculara ceph-common kurulmalıdır.
1 |
sudo apt-get install ceph-common |
Nova, cinder ve glance yetkilendirmesi için yeni kullanıcılar açılmalıdır.
1 2 3 |
ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' |
client.cinder, client.glance ve client.cinder-backup için keyring eklenmeli ve dosyanın sahipleri değiştirilmelidir.
1 2 3 4 5 6 |
ceph auth get-or-create client.glance | ssh {your-glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring ssh {your-glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring ceph auth get-or-create client.cinder | ssh {your-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring ssh {your-cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring ceph auth get-or-create client.cinder-backup | ssh {your-cinder-backup-server} sudo tee /etc/ceph/ceph.client.cinder-backup.keyring ssh {your-cinder-backup-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring |
nova-compute çalıştıran tüm sunuculara nova-compute için keyring eklenmelidir.
1 |
ceph auth get-or-create client.cinder | ssh {your-nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring |
Bu sunucular aynı zamanda libvirt ile kullanmak üzere client.cinder kullanıcısının şifresine ihtiyaç duymaktadır. Cinder üzerinden blok cihaz ekleneceği zaman libvirt, kümeye erişmek üzere kullanacaktır. Bunun için her birinde geçici olarak gizli anahtar kopyalanmalıdır.
1 |
ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key |
Ardından compute sunucular üzerinde gizli anahtar libvirt’e eklenir ve anahtarın geçici kopyası silinir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
uuidgen 457eb676-33da-42ec-9a8c-9293d545c337 cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF sudo virsh secret-define --file secret.xml Secret 457eb676-33da-42ec-9a8c-9293d545c337 created sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml |
Daha sonra kullanmak üzere uuid not edilmelidir.
OpenStack Yapılandırması
Glance
İmajları depolamak için birden fazla mekenizma kullanabilir. Varsayılan olarak Ceph blok cihaz kullanmak için aşağıdaki yapılandırma (/etc/glance/glance-api.conf ) eklenmelidir.
1 2 3 4 5 6 7 8 9 10 |
[DEFAULT] ... default_store = rbd ... [glance_store] stores = rbd rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf rbd_store_chunk_size = 8 |
Tüm yapılandırma seçenekleri için resmi sayfaya göz atabilirsiniz.
İmajların copy-on-write (COW) olarak klonlanabilmesi için default kısmına aşağıdaki satır eklenmelidir.
1 |
show_image_direct_url = True |
Bu durumda Glance API üzerinden backend lokasyon bilgisinin, dolayısıyla kullanılan backend türü herkes tarafından ulaşılabilir hale geldiği unutulmamalıdır.
Cinder
/etc/cinder/cinder.conf dosyasına Ceph blok cihaz sürücüsü, disk havuzunun ismi gibi bilgiler girilmelidir.
1 2 3 4 5 6 7 8 |
volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_pool = volumes rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 glance_api_version = 2 |
Cephx kimlik doğrulaması için kullanıcı adı ve libvirt’e eklenen gizli anahtar ayrıca eklenmelidir.
1 2 |
rbd_user = cinder rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337 |
Eğer birden fazla cinder backend kullanılıyorsa “glance_api_version” değeri 2 olmalıdır.
Cinder Backup
Önce cinder-backup kurulduktan sonra ilgili sunucudaki /etc/cinder/cinder.conf dosyasına aşağıdaki satırlar eklenmelidir.
1 2 3 4 5 6 7 8 |
backup_driver = cinder.backup.drivers.ceph backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_user = cinder-backup backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true |
Nova
OpenStack ile tüm sanal sunucuları Ceph üzerinde boot etmek ve depolamak için Nova üzerinde “ephemeral backend” aktif edilmelidir. Ceph konfigürasyon dosyasında RBD cache aktif hale getirmek önerilmektedir. Ayrıca problem giderme konusunda admin soketinin kullanılması büyük kolaylık sağlamaktadır. Her sanal sunucu için bir soket kullanmak performansı incelemeye ve sorunları gidermeye yardımcı olacaktır.
İlgili sokete aşağıdaki gibi erişilebilmektedir.
1 |
ceph daemon /var/run/ceph/ceph-client.cinder.19195.32310016.asok help |
Daha sonra her compute sunucu üzerinde Ceph konfigürasyon dosyası ceph.conf aşağıdaki gibi düzenlenmelidir.
1 2 3 4 |
[client] rbd cache = true rbd cache writethrough until flush = true admin socket = /var/run/ceph/$cluster-$type.$id.$pid.$cctid.asok |
Eğer sanal sunucular hali hazırda çalışıyorsa sokete bağlanması için yeniden başlatmak yeterli olacaktır.
Her compute sunucu üzerinde /etc/nova/nova.conf dosyasında [libvirt] bölümüne aşağıdaki satırlar eklenmelidir.
1 2 3 4 5 6 7 |
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337 disk_cachemodes="network=writeback" |
Sunucuyu canlı olarak taşıyabilmek için (live-migration) ilgili satır aşağıdaki gibi düzenlenmelidir.
1 |
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST" |
Servislerin Yeniden Başlatılması
Son olarak servisler yeniden başlatılmalıdır.
1 2 3 4 |
sudo glance-control api restart sudo service nova-compute restart sudo service cinder-volume restart sudo service cinder-backup restart |
Blok Cihaz Üzerinden Sunucu Boot Etme
Varolan bir imajdan depolama diski oluşturmak için aşağıdaki komut kullanılmalıdır.
1 |
cinder create --image-id {id of image} --display-name {name of volume} {size of volume} |
Burada kullanılan imajın formatı RAW olmalıdır. Format tipleri arasında dönüşüm için “qemu-img convert” aracı kullanılabilir. Örneğin:
1 2 |
qemu-img convert -f {source-format} -O {output-format} {source-filename} {output-filename} qemu-img convert -f qcow2 -O raw precise-cloudimg.img precise-cloudimg.raw |
Cinder ve Glance her ikisi Ceph blok cihaz kullandığında imaj copy-on-write (COW) clone olarak kullanılır. Böylece yeni blok cihaz hızlıca oluşturulur.