MinIO, büyük ölçekli, çoklu veri merkezli bulut depolama hizmetleri için tasarlanmıştır. Her kiracı, diğer kiracılardan tamamen izole edilmiş kendi MinIO kümesini çalıştırır ve bu da onlara yükseltme, güncelleme, güvenlik olaylarında herhangi bir kesintiye karşı koruma yeteneği verir.

Burada MiniIO kurulumunu sağlarken 3 Node olacak şekilde kuracağım. Benim kurulum sağladığım sunucularım Ubuntu22.04(Hardened Image)
İlk olarak sunucularda Minio’un hangi Data_dir’i kullanacağını ayarlıyacağız. Bunun için sunucularımda ayrı bir Path oluşturup 100GB’lık alan vereceğim dosya formatını XFS olarak ayarlıyacağım çünkü Image bazlı file tiplerinde XFS kullanılması önerilir.
Aşağıdaki link üzerinden kaç tane node’umuz varsa ona göre ayarlama sağlıyabiliriz bize daha güzel bir hesaplama sağlıyor olacaktır.
https://min.io/product/erasure-code-calculator?source=post_page—–151215e70643—————————————

3 Tane VM oluşturuldu. +100GB ek disk eklendi.
3 Sunucu üzerinde aşağıdaki gibi storage path’leri ayarladım…

/minio
https://min.io/docs/minio/linux/index.html üzerinden minio’u download edeceğiz.

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20241107005220.0.0_amd64.deb -O minio.deb
İndirdiğimiz paketleri dpkg ile açıyoruz ve minio’nun kurulumunu sağlıyoruz.

sudo dpkg -i minio.deb
Kurulum tamamlandıktan sonra versiyonlarının aynı olduğundan emin oluyoruz.

minio — version
Sistem için bir kullanıcı oluşturuyoruz daha sonrasında ise “-/sbin/nologin” komutunu yazıyoruz bundan dolayıda doğrudan oturum açılmasını engellemiş oluyoruz.

useradd -r minio-user -s /sbin/nologin
minio-user adında bir sistem grubu oluşturuyoruz ve minio-user kullanıcısını minio-user grubuna dahil ediyoruz.

groupadd -r minio-user / usermod -g minio-user minio-user

chown minio-user:minio-user data1

chown -R minio-user:minio-user /minio
data1 dizini ve minio dizininin sahibini minio-user kullanıcısı ve grubuna değiştirmemiz gerekiyor.

vi /etc/default/minio
# Set the hosts and volumes MinIO uses at startup
# The command uses MinIO expansion notation {x...y} to denote a
# sequential series.
#
# The following example covers four MinIO hosts
# with 4 drives each at the specified hostname and drive locations.
# The command includes the port that each MinIO server listens on
# (default 9000)
MINIO_VOLUMES="http://minio01/minio/data1 http://minio02/minio/data1 http://minio03/minio/data1"
# Set all MinIO server options
#
# The following explicitly sets the MinIO Console listen address to
# port 9001 on all network interfaces. The default behavior is dynamic
# port selection.
MINIO_OPTS="--console-address :9001"
# Set the root username. This user has unrestricted permissions to
# perform S3 and administrative API operations on any resource in the
# deployment.
#
# Defer to your organizations requirements for superadmin user name.
#MINIO_LOG_DIR="/var/log/minio
MINIO_ROOT_USER="admin"
# Set the root password
#
# Use a long, random, unique string that meets your organizations
# requirements for passwords.
MINIO_ROOT_PASSWORD="Your_Password"
# Set to the URL of the load balancer for the MinIO deployment
# This value *must* match across all MinIO servers. If you do
# not have a load balancer, set this value to to any *one* of the
# MinIO hosts in the deployment as a temporary measure.
#MINIO_SERVER_URL="http://minio:9000"
Burada dikkat etmemiz gereken bazı noktalar mevcut ilk olarak hosts dosyamız içerisine cluster yapacağımız sunucuların bilgilerini yazalım. Firewall tarafından gerekli izinleri tanımlayalım. Sunucu içerisinde iptables,firewalld vb… Servislerin kapalı yada ilgili portların erişim izinlerini verdiğinden emin olalım.

systemctl start minio

http://ip_adresiniz:9001
MinioCluster kurulumunu tamamladık… Bu MinioCluster’ı şimdi nasıl HAProxy arkasına alacağız ondan bahsedeceğim.
HAProxy için iki adet sunucu kullanacağım içerisine keepalived servisini kuracağım.

Keepalived’in HAProxy ile Kullanım Amaçları
1. Failover (Hata Toleransı)
• Eğer bir HAProxy sunucusu çökerse, Keepalived otomatik olarak diğer HAProxy sunucusuna trafiği yönlendirir.
• Kullanıcılar kesinti yaşamaz ve hizmet devam eder.
2. VIP (Virtual IP) Kullanımı
• Keepalived, bir sanal IP adresi (VIP) oluşturur.
• Kullanıcılar bu VIP’ye bağlanır ve arkada çalışan birden fazla HAProxy sunucusundan hizmet alır.
3. Yüksek Erişilebilirlik (HA)
• Keepalived, iki veya daha fazla HAProxy sunucusunu Master-Slave veya Active-Active modda çalıştırır.
• Bir sunucu devre dışı kalırsa, diğeri VIP’yi devralır ve hizmet kesintisiz devam eder.
4. Sağlık Kontrolleri (Health Check)
• Keepalived, HAProxy’nin durumunu izleyebilir.
. Eğer HAProxy servisi durursa veya çökerse, Keepalived trafiği otomatik olarak diğer sunucuya yönlendirir.

Hardened Image Ubuntu 22.04
HaProxy ve Keepalived servislerinin kurulumlarını sağlıyoruz.
apt-get install — no-install-recommends software-properties-common
add-apt-repository ppa:vbernat/haproxy-3.0
apt install keepalived haproxy
chmod 644 /etc/haproxy/haproxy.cfg

useradd -r -s /bin/false keepalived_script
Bu komutun amacı, Keepalived sağlık kontrolü (health check) veya script çalıştırmaları için özel bir sistem kullanıcısı oluşturmaktır.
Her iki node üzerinde de aynı ayarları yapmamız gerekiyor.

vi /etc/keepalived/haproxy.sh
#!/bin/bash
TYPE=$1
NAME=$2
STATE=$3
case $STATE in
"MASTER") systemctl start haproxy
exit 0
;;
"BACKUP") systemctl stop haproxy
exit 0
;;
"FAULT") systemctl stop haproxy
exit 0
;;
*) echo "unknown state"
exit 1
;;
esac
~
Bu script, Keepalived ile HAProxy’nin durumunu yönetmek için yazdık.

vi /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
max_auto_priority
}
vrrp_script check_gw {
script "/usr/bin/ping -c1 10.0.1.1"
interval 5
}
vrrp_instance VI_1 {
interface ens160
state MASTER
virtual_router_id 28
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 987654
}
virtual_ipaddress {
10.0.1.109/24 dev ens160
}
unicast_src_ip 10.0.1.103
unicast_peer {
10.0.1.104
}
track_script {
check_gw
}
notify "/etc/keepalived/haproxy.sh" root
keepalived servisimiz için gerekli ayarlamaları sağlıyoruz.

vi /etc/haproxy/haproxy.cfg
listen haproxy-stats
mode http
bind 10.0.1.109:7000
stats enable
stats uri /
# DEV MinIO API Load Balancer
listen minio-api
mode http
balance roundrobin
bind *:9000
option httpchk GET /minio/health/live HTTP/1.1
http-check send hdr Host minio.dev
http-check expect status 200
default-server inter 3s fall 2 rise 2 on-marked-down shutdown-sessions
server minio01 10.0.1.100:9000 check maxconn 300
server minio02 10.0.1.101:9000 check maxconn 300
server minio03 10.0.1.102:9000 check maxconn 300
# MinIO Console Load Balancer
listen minio-console
mode http
balance roundrobin
bind *:9001
option httpchk GET /minio/health/ready
http-check expect status 200
default-server inter 3s fall 2 rise 2 on-marked-down shutdown-sessions
server minio01 10.0.1.100:9001 check maxconn 300
server minio02 10.0.1.101:9001 check maxconn 300
server minio03 10.0.1.102:9001 check maxconn 300
HaProxy arkasına alacağımız servisimizi config’in içerisine kayıt ediyoruz. bind kısmında * olduğundan dolayı bizim keepalived’da yazdığımız VIP ip adresini baz alarak servisleri ilgili ip arkasına alacaktır.

systemctl start keepalived
keepalived servisini yeniden başlattığımızda ise master/slave farkını görebilirsiniz. Bir sunucumuzda 1.109 ip adresi var diğerinde yok. 1. sunucu bu durumda Master oluyor.

systemctl start haproxy
HA Proxy servisini de başlatıyoruz. Bu servisleri mutlaka enable etmekte de fayda var.

http://ip_adresiniz:7000
HAProxy Stat’dan ilgili ayarlarımızı görüyoruz. Servislerimizin up/down olup olmadığını kontrol ediyoruz. Sıra ise Minio servisimizi başarılı bir şekilde erişebildiğimizi kontrol ediyoruz. VIP ip adresimizin 9001 portuna erişim sağlıyacağız.

http://VIP_Adresi:9001
Bu sayede MinioCluster’ımızı HaProxy arkasına almış olduk.