Dosyaları depolamanın tek yolu bir dosya sistemi değil. Object Storage; yedekleme, log arşivi, medya, veri gölü ve uygulama içerikleri gibi alanlarda fiili standart haline geldi. Bu yazıda önce temel kavramları anlatıyor, ardından Oracle Linux 8 üzerinde tek düğümlü, çok diskli bir AIStor Free kurup rclone ve mc ile kullanıyoruz.
1. Üç depolama modeli
| Blok | Dosya | Nesne | |
|---|---|---|---|
| Birim | Sabit boyutlu blok | Dizin içinde dosya | Anahtarı olan nesne |
| Erişim | SAN/iSCSI, işletim sistemi dosya sistemi koyar | NFS/SMB, POSIX | HTTP API (S3) |
| Güçlü yanı | Düşük gecikme, rastgele I/O | Paylaşım, tanıdık semantik | Ölçek, dayanıklılık, basit API |
| Tipik kullanım | Veritabanı veri dosyaları | Ortak klasörler | Yedek, log, medya, veri gölü |
Object Storage’da dizin hiyerarşisi, rename veya dosyanın ortasına yazma yoktur. Nesne yazılır, okunur, silinir veya yeniden yazılır. Bu kısıt, ölçeklenebilirliğin bedelidir.
2. S3 kavramları
Object Storage dünyasının fiili standardı Amazon’un S3 API’sidir. Çoğu ürün bu API’yi konuşur, bu yüzden bu bölümdeki kavramlar ürün bağımsızdır.
- Bucket: Nesnelerin kapsayıcısı. Erişim ve yaşam döngüsü kuralları genellikle bucket seviyesinde tanımlanır.
- Nesne ve anahtar (key): Her nesnenin bucket içinde benzersiz bir anahtarı vardır, örneğin
raporlar/2026/10/19/rapor-0001.csv.gz. Dizin yoktur:/sıradan bir karakterdir, araçlar onu “klasör gibi” göstermek için kullanır. - Prefix: Anahtarın baş kısmı. Listelemeyi prefix ile daraltırız. Bu yüzden anahtar tasarımı önemlidir:
kaynak/yyyy/mm/dd/hh/gibi zaman tabanlı bir yapı, “şu saatin nesnelerini listele” sorgusunu ucuz yapar. - Metadata: Nesneyle birlikte saklanan anahtar-değer çiftleri (içerik türü, özel etiketler vb.).
- Versioning: Açılırsa üzerine yazılan veya silinen nesnenin eski sürümleri korunur. Yanlışlıkla silmeye karşı koruma sağlar ama kapasite harcar.
- Atomik görünürlük: Bir nesne, yükleme tamamlanana kadar okuyucuya görünmez. Dosya aktarım protokollerindeki “dosya yarım mı?” belirsizliği burada yoktur.
- Multipart upload: Büyük dosyalar parçalara bölünüp paralel yüklenir, sonunda “tamamla” çağrısıyla birleştirilir. AWS S3’te parça boyutu ve sayısı için sınırlar vardır; S3 uyumlu ürünlerde bu sınırlar farklı olabilir, ürünün dokümanına bak.
- ETag ve checksum: Tek parçalı yüklemede ETag genellikle içeriğin MD5’idir. Multipart yüklemede ETag içeriğin MD5’i değildir, parça özetlerinden türetilmiş bir değerdir ve bütünlük doğrulaması için güvenilmemelidir. S3 API’si ek checksum algoritmalarını (CRC32, CRC32C, SHA-1, SHA-256) destekler; ürünlerin bunu ne kadar desteklediğini kontrol et.
- Lifecycle kuralları: “30 günden eski nesneleri sil” gibi otomatik kurallar. Retention yönetimini script yazmadan yapmanı sağlar.
- Presigned URL: Süreli, imzalı bir bağlantıyla kimlik bilgisi paylaşmadan tek bir nesneye erişim vermek.
3. Veri koruma: replikasyon ve erasure coding
Object Storage ürünleri veriyi ucuz sürücülere yayar, bu yüzden sürücü ve düğüm arızasına dayanıklılık yazılımın işidir. İki temel yöntem var.
Replikasyon: Her nesnenin birden fazla kopyası tutulur (genellikle 3). Basit ve hızlı okur, ama kapasite verimi %33’e düşer.
Erasure coding (EC): Nesne k veri parçasına bölünür, m eşlik (parity) parçası hesaplanır. Toplam k+m parça farklı sürücülere dağıtılır. Herhangi m parça kaybedilse bile nesne geri kurulabilir.
| Yöntem | Kapasite verimi | Dayanabileceği kayıp |
|---|---|---|
| 3× replikasyon | %33 | 2 kopya |
| EC 2+2 | %50 | 2 parça |
| EC 4+2 | %67 | 2 parça |
| EC 8+4 | %67 | 4 parça |
Aynı kapasite verimini veren iki EC düzeninden 8+4 daha fazla arızaya dayanır ama daha fazla sürücü ve düğüm gerektirir. EC’nin dezavantajı, çok sayıda küçük nesnede verimsiz olması ve arıza sonrası yeniden kurmanın CPU ve ağ harcamasıdır. Büyük, bir kez yazılan nesneler için EC genellikle doğru tercihtir.
4. Ne zaman uygun, ne zaman değil?
Uygun: Büyük ve yazıldıktan sonra değişmeyen dosyalar, çok sayıda nesne, ölçeğin büyüyeceği durumlar, birden fazla istemcinin aynı veriye HTTP üzerinden erişmesi.
Uygun değil:
- Veritabanı veri dosyaları veya düşük gecikmeli rastgele I/O gerektiren her şey (bu blok depolamanın işi).
- POSIX semantiği bekleyen uygulamalar: atomik
rename, dosyaya append, dosya kilitleme. S3’terenameyoktur, kopyala ve sil yapılır. - Çok sık güncellenen küçük nesneler.
5. Lab ortamı ve ürün seçimi
Bu yazıda MinIO AIStor Free kullanıyorum. Bilmen gereken noktalar:
- MinIO’nun community sürümü artık yalnızca kaynak kod olarak dağıtılıyor ve depo arşivlendi. Resmî yol AIStor: tek düğümlü AIStor Free ve dağıtık, destekli AIStor Enterprise.
- AIStor Free, tek düğüm tek sürücü ve tek düğüm çok sürücü desenlerini destekler. Bu yazıdaki 4 diskli kurulum ikincisidir ve erasure coding’i gösterebilmemizi sağlar. Çok düğümlü küme Free kapsamında değildir.
- Çalışması için bir lisans anahtarı gerekir. Geçerli lisans yüklenene kadar S3 işlemleri engellenir; yönetim API’si ve konsol erişilebilir kalır.
- Free lisansın kullanım koşulları ve kimlerin alabileceği değişebilir. İndirmeden önce lisans sözleşmesini oku. Bu yazıdaki S3 kavramları ve
rclonekullanımı ise herhangi bir S3 uyumlu üründe aynen geçerlidir.
Lab sanal makinesi:
| Bileşen | Değer |
|---|---|
| İşletim sistemi | Oracle Linux 8 |
| CPU / RAM | 2 vCPU / 8 GB |
| Disk 1 | İşletim sistemi (/dev/sda) |
| Disk 2–5 | 4 adet 10 GB boş disk (/dev/sdb–/dev/sde) |
Disk adlarını lsblk ile kontrol et, kendi ortamında farklı olabilir.
6. Disklerin hazırlanması
Object Storage ürünleri dosya sistemi olarak genellikle XFS önerir. Her diski ayrı formatlayıp ayrı bağlıyoruz. RAID kullanmıyoruz, dayanıklılığı yazılım sağlayacak.
lsblk
sudo mkfs.xfs -f -L DISK1 /dev/sdb
sudo mkfs.xfs -f -L DISK2 /dev/sdc
sudo mkfs.xfs -f -L DISK3 /dev/sdd
sudo mkfs.xfs -f -L DISK4 /dev/sde
sudo mkdir -p /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4
/etc/fstab dosyasına ekle:
LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2
LABEL=DISK2 /mnt/disk2 xfs defaults,noatime 0 2
LABEL=DISK3 /mnt/disk3 xfs defaults,noatime 0 2
LABEL=DISK4 /mnt/disk4 xfs defaults,noatime 0 2
mkdir /mnt/disk1
mkdir /mnt/disk2
mkdir /mnt/disk3
mkdir /mnt/disk4
sudo mount -a
df -h | grep /mnt/disk
Servis kullanıcısını oluşturup disklerin sahipliğini veriyoruz:
sudo useradd -r -s /sbin/nologin minio-user
sudo chown -R minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4
7. AIStor Free kurulumu
Lisans anahtarı: Üreticinin indirme sayfasından ücretsiz lisans anahtarını al ve sunucuya /opt/minio/minio.license olarak kaydet:
sudo mkdir -p /opt/minio
# lisans dosyasını /opt/minio/minio.license olarak kaydet
sudo chown -R minio-user:minio-user /opt/minio
sudo chmod 600 /opt/minio/minio.license
Sunucu ikili dosyası: Üreticinin hızlı başlangıç dokümanındaki indirme adresini kullanıyoruz. RPM paketi de mevcut; onu tercih edersen kurulum dokümanındaki adımları izle.
sudo curl -L https://dl.min.io/aistor/minio/release/linux-amd64/minio -o /usr/local/bin/minio
sudo chmod +x /usr/local/bin/minio
minio --version
Ortam dosyası (/etc/default/minio):
MINIO_VOLUMES=/mnt/disk{1...4}
MINIO_OPTS='--license /opt/minio/minio.license --console-address :9001'
MINIO_ROOT_USER=minioadmin-lab
MINIO_ROOT_PASSWORD=LabIcinGucluParola123!
Burada {1...4} (üç nokta) üreticinin kendi gösterimidir; kabuğun {1..4} genişletmesi değildir. Dosyayı koru:
sudo chmod 600 /etc/default/minio
systemd servisi (/etc/systemd/system/minio.service):
[Unit]
Description=MinIO AIStor
After=network-online.target
Wants=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo journalctl -u minio -f
Üreticinin dokümanında belirtildiği gibi servis yeniden başlatmada kendiliğinden açılmaz; yukarıdaki enable bunu sağlıyor. Günlükte 4 sürücünün bulunduğunu ve lisansın kabul edildiğini görmelisin.
Güvenlik duvarı:
sudo firewall-cmd --permanent --add-port=9000/tcp --add-port=9001/tcp
sudo firewall-cmd --reload
9000 S3 API, 9001 web konsoludur. Tarayıcıdan http://SUNUCU_IP:9001 adresine girip root kullanıcıyla oturum açabilirsin.
8. İstemci araçları: mc ve rclone
İki araç kullanacağız. mc (üreticinin istemcisi) yönetim işleri için, rclone ise ürün bağımsız veri aktarımı için.
mc: Üreticinin dokümanındaki istemci kurulum bölümünden güncel indirme adresini al. Klasik adres şöyleydi; değişmişse dokümana bak:
sudo curl -L curl -fL https://dl.min.io/aistor/mc/release/linux-amd64/mc -o /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
rclone:
curl https://rclone.org/install.sh | sudo bash
rclone version
9. Bucket, kullanıcı ve yetki
Root kimliğini günlük işlerde kullanmamak için ayrı bir kullanıcı oluşturuyoruz:
mc alias set lab http://127.0.0.1:9000 minioadmin-lab LabIcinGucluParola123!
mc mb lab/lab-bucket
mc admin user add lab labuser LabKullaniciParola123!
mc admin policy attach lab readwrite --user labuser
mc admin info lab
Bu readwrite politikası tüm bucket’ları kapsar. Gerçek bir ortamda yalnızca ilgili bucket’a izin veren özel bir politika yazmalısın. Komut sözdizimi sürümler arasında değişebilir; hata alırsan mc admin --help çıktısına bak.
10. rclone ile kullanım
Yapılandırma dosyası:
mkdir -p ~/.config/rclone
cat > ~/.config/rclone/rclone.conf <<'EOF'
[lab]
type = s3
provider = Minio
access_key_id = labuser
secret_access_key = LabKullaniciParola123!
endpoint = http://127.0.0.1:9000
EOF
type = s3 provider = Minio access_key_id = labuser secret_access_key = LabKullaniciParola123 endpoint = http://127.0.0.1:9000 EOF
Rastgele test dosyaları üretip yükleyelim:
mkdir -p ~/testdata
for i in 1 2 3; do head -c 10M /dev/urandom > ~/testdata/dosya$i.bin; done
head -c 60M /dev/urandom > ~/testdata/buyuk.bin
rclone copy ~/testdata lab:lab-bucket/test/ -P
rclone lsl lab:lab-bucket/test/
rclone check ~/testdata lab:lab-bucket/test/
rclone check yerel ve uzak içeriği karşılaştırır. İçerik bütünlüğünü bağımsız olarak da doğrulayabilirsin:
sha256sum ~/testdata/dosya1.bin
rclone cat lab:lab-bucket/test/dosya1.bin | sha256sum
İki özet aynı olmalı. Diğer günlük komutlar:
rclone ls lab:lab-bucket
rclone sync ~/testdata lab:lab-bucket/senkron/
rclone delete lab:lab-bucket/test/dosya2.bin
Dikkat: rclone sync hedefi kaynakla aynı yapar ve hedefte fazla olan nesneleri siler. Önce --dry-run ile dene.
11. Multipart upload denemesi
rclone varsayılan olarak yalnızca büyük dosyalarda multipart kullanır. Eşiği düşürerek 60 MB’lık dosyayı parçalara bölmeye zorlayalım:
rclone copy ~/testdata/buyuk.bin lab:lab-bucket/multipart/ --s3-upload-cutoff 5M --s3-chunk-size 5M -vv
Ayrıntılı çıktıda dosyanın parçalar halinde yüklendiğini göreceksin. Tamamlanmamış (yarım kalmış) multipart yüklemeleri şöyle listeleyebilirsin:
mc ls --incomplete lab/lab-bucket
Yükleme ortasında Ctrl+C ile kesersen yarım kalan parçaların nasıl göründüğünü burada görürsün. Bu kavram önemlidir: yarım yükleme nesne olarak görünmez, ama depolama alanı tüketebilir. Üreticiler genellikle bunları temizleyen lifecycle kuralları sunar.
12. Versioning ve lifecycle
mc version enable lab/lab-bucket
rclone copy ~/testdata/dosya1.bin lab:lab-bucket/surum/
head -c 10M /dev/urandom > ~/testdata/dosya1.bin
rclone copy ~/testdata/dosya1.bin lab:lab-bucket/surum/
mc ls --versions lab/lab-bucket/surum/
Aynı anahtara iki kez yazdığın için iki sürüm göreceksin. Şimdi bir lifecycle kuralı ekleyelim:
mc ilm rule add --expire-days 30 --prefix gecici/ lab/lab-bucket
mc ilm rule ls lab/lab-bucket
Bu kural gecici/ altındaki nesneleri 30 gün sonra siler. Lifecycle taramaları düzenli aralıklarla çalışır, anında değil. Versioning açıkken “sil” işlemi bir silme işareti (delete marker) oluşturur; eski sürümlerin temizlenmesi için ayrı kural gerekir.
13. Erasure coding’i doğrulama ve sürücü arızası testi
Önce durumu görelim:
mc admin info lab
Çıktıda 4 sürücünün çevrimiçi olduğunu ve erasure set bilgisini görürsün. Parity sayısı sürüme ve yapılandırmaya göre değişebilir; 4 sürücülü kurulumda yaygın düzen 2 veri + 2 parity’dir. Çıktıdaki değeri kendi ortamında doğrula.
Şimdi bir arızayı taklit edelim. Bu test yalnızca lab içindir, gerçek ortamda yapma.
sha256sum ~/testdata/buyuk.bin
sudo rm -rf /mnt/disk3/lab-bucket
rclone cat lab:lab-bucket/multipart/buyuk.bin | sha256sum
Bir sürücüdeki bucket verisi silinmiş olmasına rağmen nesne eksiksiz okunmalı ve özetler eşleşmeli; çünkü eksik parçalar diğer sürücülerdeki veri ve parity’den yeniden hesaplanır. Sonrasında günlükten (journalctl -u minio) ve mc admin info lab çıktısından yeniden kurma (healing) durumunu izle. Healing davranışı ve komutları sürümler arasında farklılık gösterebilir; kendi sürümünün dokümanına bak.
14. Sık karşılaşılan sorunlar
- S3 komutları hata veriyor, konsol açılıyor: Lisans yüklenmemiş veya geçersiz olabilir. Günlüğe bak.
- Sunucu başlamıyor, sürücü hatası: Bağlama noktalarının
minio-usersahipliğinde ve gerçekten bağlı olduğunu kontrol et (df -h). Bağlı olmayan bir dizin kök dosya sistemini kullanır ve ürünler bunu reddedebilir. - Dışarıdan bağlanılamıyor:
firewall-cmd --list-portsile 9000 ve 9001’i kontrol et. - İmza hataları: Sunucu ve istemci saatleri arasında fark varsa S3 imzaları reddedilir.
chronyc trackingile saati doğrula. - SELinux: Servis çalışmazsa
ausearch -m avc -ts recentile engelleme olup olmadığına bak.
15. Üretime geçerken dikkat edilecekler
- TLS: Lab’da HTTP kullandık. Gerçek ortamda mutlaka TLS kullan.
- Dağıtık kurulum: Tek düğüm, düğüm arızasına karşı koruma sağlamaz. Düğüm düzeyinde dayanıklılık için çok düğümlü bir sürüm ve lisans gerekir; Free lisans bunu kapsamaz.
- Yetkilendirme: Her uygulama için ayrı kullanıcı ve bucket’a özel politika.
- İzleme: Ürünlerin çoğu Prometheus uyumlu metrik sunar; kapasite, sürücü durumu ve lisans süresini izle.
- Yedekleme: Object Storage’ın dayanıklılığı yedek değildir. Yanlışlıkla silmeye ve mantıksal hataya karşı versioning, nesne kilidi veya ayrı bir kopya düşün.
- Ürün seçimi: Seçerken şunlara bak: S3 uyumluluğu, multipart ve ek checksum desteği, koruma yöntemleri, ölçekleme modeli, izleme ve lisans maliyeti.
Sonuç
Object Storage, büyük ve değişmeyen veri için ölçeklenebilir, dayanıklı ve HTTP üzerinden erişilebilen bir depolama modeli sunar. Bu yazıda kavramları gördük, Oracle Linux 8 üzerinde 4 diskli bir AIStor Free kurduk, bucket ve kullanıcı oluşturduk, rclone ile yükleme ve doğrulama yaptık, multipart, versioning ve lifecycle’ı denedik ve bir sürücü kaybını taklit ettik. Öğrendiğin S3 kavramları ve rclone komutları, kullandığın ürün değişse de geçerli kalır.






Bir yanıt yazın