H/A MinIO Kurulumu ve MinIO Client Kullanımı

H/A MinIO Kurulumu ve MinIO Client Kullanımı

Nedir?

MinIO, Amazon S3 protokolü uyumlu bir bulut depolama sunucusudur. Bir nesne deposu olarak MinIO, fotoğraflar, videolarve dosyalar, yedeklemeler ve konteyner imajları gibi verileri depolayabilir.

Başlayalım

Öncelikle H/A yapı için minimum 2 vm ve bir load balancera ihtiyacımız var. Bunun için bu anlatımda ben nginx kullanacağım.

Anlatımda 2 sunucu üzerinden gideceğim, siz dilerseniz arttırabilirsiniz. Her sunucuya min 4 disk tanımlıyoruz.

IP Hostname VM Disk
192.168.166.233 minio.example.com minio-lb -
192.168.166.234 minio-01.example.com minio-01 4 x 50 GB
192.168.166.235 minio-02.example.com minio-02 4 x 50 GB
192.168.166.236 minio-03.example.com minio-03 4 x 50 GB

Load balancer Yapılandırması

/etc/nginx/conf.d altına minio.conf oluşturup içine aşağıdakileri yazıyoruz. SSL termination yapmak için SSL sertifikalarımızı vererek 443'den yapılandırıyoruz.

upstream minio.example.com {
    zone minio.example.com 2048k;
    least_conn;
    keepalive 256;

    server 192.168.166.234:9000 max_fails=0 slow_start=10s;
    server 192.168.166.235:9000 max_fails=0 slow_start=10s;
    server 192.168.166.236:9000 max_fails=0 slow_start=10s;
}

server {
    listen 192.168.166.233:80;
    server_name minio.example.com;
    return 301 https://$host;
}

server {
    listen 192.168.166.233:443 ssl;
    server_name minio.example.com;
    status_zone minio.example.com;
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    location / {
        proxy_set_header Host $http_host;
        proxy_pass       http://minio.example.com;
    }
    location @hc {
        proxy_pass http://minio.example.com;
        proxy_set_header Host minio.example.com;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        health_check uri=/minio/health/live interval=3 fails=2 passes=2;
        error_log /var/log/nginx/error_hc.log info;
    }
}

Disk Yapılandırması

Öncelikle her vm'e 4 adet disk taktıktan sonra disk yapılandırmasına geçiyoruz. Aşağıdaki komutları her iki sunucuda da uyguluyoruz. Aynı işlemleri /dev/sdc, /dev/sdd ve /dev/sde için de yapıyoruz.

# fdisk /dev/sdb
> n
> p
> enter
> enter
> enter
> w
> q
# mkfs.xfs -f /dev/sdb1 
# mkfs.xfs -f /dev/sdc1 
# mkfs.xfs -f /dev/sdd1 
# mkfs.xfs -f /dev/sde1 
# mkdir -p /opt/drive{1..4}

Oluşturduğumuz pathleri kalıcı olarak mount etmek için fstab'i açıyoruz.

# vim /etc/fstab

En altına ekliyoruz.

#device        mountpoint             fstype    options    dump   fsck

/dev/sdb1      /opt/drive1            xfs      defaults    0      1
/dev/sdc1      /opt/drive2            xfs      defaults    0      1
/dev/sdd1      /opt/drive3            xfs      defaults    0      1
/dev/sde1      /opt/drive4            xfs      defaults    0      1

Değişiklikleri kaydetmek için

# mount -a

MinIO Yapılandırması

Şimdi load balancer ve disk yapılandırması tamamlandı, artık minIO kurulumuna geçebiliriz.
MinIO'nun linux da henüz bir paketi yok binary olarak kuracağız.

# wget https://dl.min.io/server/minio/release/linux-amd64/minio && chmod +x minio
# mv minio /usr/local/bin/

MinIO'yu yapılandırması ile beraber çalıştırmak içini bir bash yazıyoruz. Dilerseniz farklı yöntem ile de yapılabilir.

# cat > /etc/default/minio <<EOF

MINIO_ACCESS_KEY=xxxxxxx
MINIO_SECRET_KEY=xxxxxx
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_OPTS=http://192.168.166.{234...236}:9000/opt/drive{1...4}

EOF

Minio'nun systemd altına servisini oluşturuyoruz.

# cat > /etc/systemd/system/minio.service <<EOF
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=root
Group=root

EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target

Kurulum bu kadar, şimdi yazdığımız servisi tanıması için systemd deamon reload ediyoruz ve minio servisinimizi başlatıyoruz.

# systemctl daemon-reload
# systemctl enable minio
# systemctl start minio

Durumunu kontrol ediyoruz.

# systemctl status minio
● minio.service - MinIO
   Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-12-17 15:08:16 +03; 19h ago
     Docs: https://docs.min.io
 Main PID: 14491 (miniostart)
   CGroup: /system.slice/minio.service
           ├─14491 /bin/bash /usr/local/bin/miniostart
           └─14492 /usr/local/bin/minio server 

Tün adımlar tamamlandı, şimdi dilerseniz ui dan dilerseniz minio client (mc) ile bucket oluşturabilirsiniz.

Minio Client (mc) Kullanımı

Kurulum

MacOS

$ brew install minio/stable/mc

Linux

# wget https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x mc

MinIO Clusterına Bağlanmak

# mc alias set minio https://minio.example.com AccessKey SecretKey --api S3v4

Bağlı clusterları listeleme.

# mc alias list

minio
  URL       : https:/minio.example.com
  AccessKey : xxxxxxxxx
  SecretKey : xxxxxxxxx
  API       : S3v4
  Path      : auto

Bucketları listeleme

# mc ls minio

[2020-10-27 23:42:25 +03]     0B backup/

Cluster hakkında bilgi almak

# mc admin info minio

●  192.168.166.234:9000
   Uptime: 19 hours
   Version: 2020-10-03T02:19:42Z
   Network: 2/2 OK
   Drives: 4/4 OK

●  192.168.166.235:9000
   Uptime: 1 month
   Version: 2020-10-03T02:19:42Z
   Network: 2/2 OK
   Drives: 4/4 OK

22 GiB Used, 9 Buckets, 10,083 Objects
8 drives online, 0 drives offline

Bucket Oluşturma

# mc mb --with-lock minio/gitlab-backup-storage

Buckettaki dataların 3 Gün saklanması (aldığınız backupları x gün saklamak için ideal)

# mc rm --recursive --force --older-than 3d minio/backup

Bucket Silme

# mc rb minio/test --force

Buckettaki tüm verileri silmek

# mc rm -r --force minio/backup

Yorum Yapın