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
Hola! Ben Ali. Hepsiburada’da DevOps Engineer olarak çalışmaktayım. Microservis mimarisine özgü altyapı tasarlamayı, kurmayı ve operasyonel süreçlerini yönetmeyi seviyorum. Ayrıca şu sıralar GO Lang öğrenmek için de emeklemekteyim.