İçeriğe geç
Garage

Garage, Rust ile yazılmış, kendi sunucunuzda çalışan S3 uyumlu nesne depolama yazılımıdır. Farklı veri merkezlerine yayılmış node’larla, veri merkezleri arası gecikmenin yüksek olduğu ağlarda çalışacak şekilde tasarlanmıştır. Uygulama tarafında S3 API’si kullanılıyorsa değişen tek şey endpoint ve anahtar bilgisidir.

Mono, Garage’ı Gebze, Çerkezköy ve Temelli’deki üç veri merkezine yayılmış tek bir cluster olarak işletir. Müşteri tarafında tek bir S3 endpoint’i vardır. Bu kurulumu coğrafi dağıtık S3 olarak adlandırıyoruz: nesne tek endpoint’e yazılır, kopyaları ayrı lokasyonlara dağıtılır.

MinIO’dan Garage’a geçiş

Nesne depolamayı uzun süre MinIO üzerinde işlettik. MinIO tarafında iki değişiklik oldu: admin panelinden bucket, kullanıcı ve policy yönetimi çıkarıldı ve GitHub reposu 13 Şubat 2026’da arşivlendi. Mevcut kurulumlar çalışmaya devam ediyor, ancak arşivlenen bir depoda hata düzeltmesi ve güvenlik güncellemesi gelmez. Müşteri verisini taşıdığımız katmanı bu durumda bırakmak yerine geliştirmesi süren Garage’a taşıdık.

Coğrafi dağıtık S3 kurulumu

Cluster üç zone’dan oluşur: Gebze (IST1), Çerkezköy (IST2) ve Temelli (ANK1). Her node 120 TB kapasite sunar ve üçü de aynı endpoint arkasında tek cluster olarak çalışır.

Her node’da aynı garage.toml dosyası okunur. Replication factor, metadata dizini, veri dizini ve RPC adresi burada tanımlanır:

  • replication_factor = 3
  • metadata_dir = "/var/lib/garage/meta"
  • data_dir = "/var/lib/garage/data"
  • db_engine = "lmdb"
  • rpc_bind_addr = "[::]:3901"

Node’un hangi zone’da olduğu konfigürasyonda değil, layout kaydında tutulur. Bu sayede aynı konfigürasyon üç veri merkezinde değişmeden kullanılabilir.

Dayanıklılık

Replication factor 3 ile her nesnenin üç kopyası üç ayrı zone’da tutulur. Okuma ve yazma için üç kopyadan ikisinin erişilebilir olması yeterlidir.

Bir node düştüğünde quorum bozulmaz, okuma ve yazma kesintisiz sürer. Bir veri merkezi bütünüyle devre dışı kalsa dahi kalan iki zone servisi vermeye devam eder ve endpoint değişmez. Node geri döndüğünde eksik kopyalar otomatik senkronize edilir, elle müdahale gerekmez. Planlı bakım da aynı mekanizmayla yürür: bakıma alınan lokasyon cluster’dan çıkarılmadan servis devam eder.

Kapasite ve layout yönetimi

Hangi node’un hangi zone’da olduğu ve ne kadar kapasite sunduğu layout ile tanımlanır. Her node’a ayrı kapasite verilebilir.

  • garage layout assign <node_id> -z IST1 -c 120T ile node’un zone’u ve kapasitesi yazılır.
  • garage layout show ile hazırlanan değişikliğin etkisi kontrol edilir.
  • garage layout apply --version N ile yeni versiyon uygulanır.

Her layout ayrı bir versiyon olarak tutulduğu için önceki duruma dönülebilir.

Kapasite büyütmek iki adımdan oluşur: ilgili node’un kapasitesini artırmak ve yeni layout versiyonunu uygulamak. Partition’ların yeni kapasiteye göre dağıtımı rebalance mekanizmasıyla arka planda yapılır. Disk çıkarma da aynı yolu izler; kapasite düşürülür ve veri kalan node’lara taşınır. Kesinti penceresi veya elle veri taşıma gerekmez.

Bucket, anahtar ve yetki

Her proje veya müşteri için ayrı bucket açılır ve kullanım ayrı ayrı izlenebilir. Access ve secret key çiftleri bucket’tan bağımsız üretilir; bir anahtar birden fazla bucket’a erişebilir. Yetki bucket bazında verilir.

  • garage bucket create musteri-yedek yeni bucket açar.
  • garage key create musteri-app uygulama için anahtar üretir.
  • garage bucket allow --read --write musteri-yedek --key musteri-app yetkiyi verir.

Yönetim CLI üzerinden yapılır. Mono’nun geliştirdiği yönetim konsolunda cluster sağlığı, kapasite, node listesi ve layout işlemleri tek ekrandan takip edilir.

Versioning ve public bucket

Versioning açıksa üzerine yazılan veya silinen nesnenin önceki sürümü saklanır. Yanlış silme ve fidye yazılımı senaryolarında geri dönüş imkânı verir.

Public bucket ile statik dosya ve medya içerikleri imzasız erişime açılabilir; web sitesi varlıkları doğrudan bucket’tan servis edilebilir. İki ayar da bucket bazında açılıp kapatılır, cluster genelinde bir değişiklik gerekmez.

Trafik yönlendirme

Tek bir hostname üç veri merkezine dağıtılır. Cloudflare load balancer her veri merkezi için ayrı bir pool tutar ve sağlık durumlarını sürekli izler. Proximity steering ile istek coğrafi olarak en yakın node’a gider ve o node kendi lokasyonundaki diske yazar, böylece WAN gecikmesi kullanıcıya yansımaz. Bir pool sağlıksız hale geldiğinde trafik diğer lokasyonlara kayar; DNS veya endpoint değişikliği gerekmez.

Yanıt başlıkları isteğin hangi lokasyona düştüğünü ve upstream gecikmesini gösterir: x-glb-backend ve x-glb-upstream-latency.

İzleme ve bakım

Cluster’ın Prometheus endpoint’i 10 saniyelik aralıkla ölçülür ve metrikler Grafana’ya akar: partition durumu, node sağlığı, toplam S3 istek sayısı ve p50/p95/p99 yanıt süreleri. Alarm zinciri aynı metriklere bağlıdır.

Bakım işleri Mono konsolundan tek node veya tüm cluster için tetiklenir:

  • Repair: tablo, blok ve rebalance görevlerini arka planda çalıştırır.
  • Scrub: disklerdeki blokları periyodik olarak doğrular, bozulan kopyayı sağlam kopyadan yeniden yazar.
  • Metadata snapshot: point-in-time metadata yedeği alır.

Node sağlığı ayrıca Grafana, Uptime Kuma ve benzeri araçlarla sürekli kontrol edilir.

Mono’da kullanım alanları

  • WAL-G ve MonoDB Backup ile alınan PITR yedekleri
  • GitLab ve CI/CD zincirinin container registry imajları
  • Coğrafi dağıtık çalışan projeler için versioning ve public bucket destekli S3 alanı

Tekil node’larda POSIX ve ZFS tabanlı depolama için VersityGW tercih ediyoruz.

Nesne depolama ve blok depolama

Garage nesne depolama katmanıdır: veri HTTP üzerinden S3 API ile nesne olarak yazılır ve okunur, erişim access key ile verilir. Blok depolama ise diski doğrudan sunucuya bağlar; veritabanı ve sanal makine diski gibi düşük gecikme isteyen iş yükleri için kullanılır.

Mono Cloud’da nesne depolama Nesne Depolama, blok depolama ise Blok Depolama başlığı altında verilir. Yaygın kurulum, blok diskte çalışan veritabanının yedeğini S3 üzerinden Garage’a yazmasıdır: PostgreSQL yedekleri WAL-G ile, uygulama veritabanları MonoDB Backup ile bu katmana yazılır.

Garage ve MinIO

İki çözüm arasındaki pratik farklar:

KonuGarageMinIO
Geliştirme durumuAktif geliştirme, AGPL v3Repo arşivlendi (13 Şubat 2026)
Coğrafi dağıtımWAN için tasarlandı, zone bazlı replikasyonAynı veri merkezinde erasure coding
Yönetim arayüzüMono yönetim konsolu ve CLIPanel yetkileri kaldırıldı

İlgili hizmetlerimiz

Sıkça sorulan sorular

Garage MinIO yerine kullanılabilir mi?
Evet. İkisi de S3 API’si konuştuğu için uygulama tarafında değişen tek şey endpoint, access key ve secret bilgisidir. Yedekleme araçları, GitLab Registry ve S3 SDK’ları aynı şekilde çalışmaya devam eder. Mono bu geçişi veri taşıma ile birlikte planlar.
Veriler nerede tutuluyor?
Mono’nun işlettiği cluster Gebze, Çerkezköy ve Temelli’deki üç veri merkezine yayılmış durumda. Replication factor 3 ile her nesnenin üç kopyası üç ayrı zone’da tutulur.
Tek node'da da kurulur mu?
Kurulur, ancak asıl kazanç coğrafi dağıtık kurulumda ortaya çıkar: kopyaların ayrı lokasyonlarda olması ve quorum sayesinde tek lokasyon kaybında servisin sürmesi. Tekil node’larda POSIX ve ZFS temelli depolama için VersityGW kullanıyoruz.
Endpoint veya uygulama ayarı değişiyor mu?
Hayır. Müşteri tarafında tek bir hostname vardır; Cloudflare load balancer isteği sağlıklı ve en yakın veri merkezine yönlendirir. Bir lokasyon devre dışı kaldığında trafik diğerlerine kayar, DNS veya uygulama tarafında bir değişiklik gerekmez.
Coğrafi dağıtık S3 nedir?
Nesnelerin tek bir S3 endpoint’i arkasında birden çok veri merkezine yazıldığı kurulumdur. Garage’ta replication factor 3 ile her nesnenin üç kopyası Gebze (IST1), Çerkezköy (IST2) ve Temelli (ANK1) zone’larında tutulur; okuma ve yazma için kopyalardan ikisinin erişilebilir olması yeterlidir. Böylece tek veri merkezi kaybı servisi durdurmaz.
S3 uyumlu olması ne sağlar?
S3 API’sini konuşan her araç Garage ile çalışır: AWS CLI, s3cmd, resmî SDK’lar, WAL-G, GitLab Registry ve yedekleme yazılımları. Kurulumda değişen tek şey endpoint ile access ve secret anahtarıdır; uygulama kodunda değişiklik gerekmez.
Nesne depolama ile blok depolama arasındaki fark nedir?
Nesne depolama, veriyi HTTP üzerinden S3 API ile nesne olarak sunar; versiyonlama, yaşam döngüsü ve paylaşımlı erişim için uygundur (Garage). Blok depolama, diski doğrudan sunucuya bağlar; veritabanı ve sanal makine diski gibi düşük gecikmeli iş yükleri için tercih edilir. Mono’da nesne depolama Garage, blok depolama TrueNAS ve ZFS tabanlı NVMe disklerle verilir; ikisi birlikte kullanılabilir.
Veriler Türkiye'de mi tutuluyor?
Evet. Cluster’ın üç zone’u da Türkiye’deki veri merkezlerinde: Gebze (IST1), Çerkezköy (IST2) ve Temelli (ANK1). Veri yerelliği gereksinimlerinde nesnenin üç kopyası da bu lokasyonlarda kalır.

Bir sonraki dönüşümü birlikte planlayalım.

Ekibimiz teknik gereksinimlerinizi anlamak ve hızlıca prototip çıkarmak için hazır.