MinIO dağıtımları her şekil ve boyutta mevcuttur. Linux'un herhangi bir sürümünde çıplak donanım kurulumlarını, Kubernetes'in herhangi bir sürümünde (Red Hat OpenShift dahil) kapsayıcılı kurulumları destekliyoruz ve küçük, hafif, tek bir ikili programı dağıtabileceğiniz hemen hemen her yere kurulum yapıyoruz. Ancak esneklikle birlikte uç durum sorunlarının hata ayıklama gerektirmesi kaçınılmaz hale gelir.
Bu blog yazısında size Kubernetes'te çalışan bir MinIO kurulumunda nasıl hata ayıklayacağınızı ve ayrıca çıplak donanım kurulumu yaparken karşılaşabileceğiniz bazı genel sorunları ve bunların nasıl düzeltileceğini göstereceğiz.
Kubernetes kümesinde çalışan MinIO API'sine erişmenin birkaç yolu vardır. API'ye erişebilmek için kubectl port-forwarding
kullanabilir veya NodePort
bir Dinleme Service
ayarlayabiliriz. Bu yöntemlerin her ikisi de hizmete ağ dışından erişmenin bir yolunu sunar, ancak bunların büyük bir dezavantajı vardır: Yalnızca NodePort veya Bağlantı Noktası Yönlendirmenin referans verdiği Hizmete kullanılabilir bir bağlantı noktasından erişebilirsiniz (uygulamanın olağan yapılandırması değil). ). Örneğin, genellikle 9000
bağlantı noktasında bulunan MinIO API'sine rastgele atanmış bir 3xxxx
bağlantı noktası aracılığıyla erişmeniz gerekir.
Ya size daha iyi bir yol olduğunu ve bunun yeni olmadığını söylesem? Uygulamalarda hata ayıklarken, yerel çalışma zamanı ortamına tam erişime sahip olmak istersiniz, böylece kümedeki sorunları gidermek ve hata ayıklamak için çeşitli araçları kullanabilirsiniz. Bunu yapmanın bir yolu, "meşgul kutusu" tarzı bir bölmeyi başlatmak ve uygulamada hata ayıklamak için gereken tüm gerekli araçları yüklemektir.
Öncelikle MinIO kurulumunuzla aynı ad alanına bir Pod
başlatın. Bunu yapmak için aşağıdaki yaml ile debugger-pod.yaml
adında bir yaml dosyası oluşturun.
apiVersion: v1 kind: Pod metadata: name: mc labels: app: mc spec: containers: - image: minio/mc:latest command: - "sleep" - "604800" imagePullPolicy: IfNotPresent name: mc restartPolicy: Always
Yukarıdaki Pod yapılandırması, MinIO mc
yardımcı programı için görüntüyü çekiyor. Pod'un sadece başlatılıp çıkmamasını sağlamak için bir sleep
komutu ekledik.
Yaml kaydedildikten sonra yapılandırmayı MinIO kümesinin çalıştığı Kubernetes ad alanına uygulayın
kubectl apply -f debugger-pod.yaml
Pod çalışmaya başladığında ona kabuk yoluyla erişin
$ kubectl exec -i -t -n default mc -c mc -- sh -c "(bash || ash || sh)" [root@mc /]#
Daha sonra mc
ile MinIO kümesine erişebilirsiniz
[root@mc /]# mc alias set myminio --insecure Added `myminio` successfully.
Artık bir hata ayıklayıcı podu hazır ve çalışır durumda olduğuna göre, aynı ağ içerisinde doğrudan küme üzerinde eylem gerçekleştirebilirsiniz. Örneğin, çoğaltma bir sitenin çevrimdışı olması veya donanım arızası nedeniyle bozulduysa aşağıdaki komutu kullanarak çoğaltılacak bekleyen nesneleri yeniden eşitleyebilirsiniz.
[root@mc /]# mc admin replicate resync start minio1 minio2 [root@mc /]# mc admin replicate resync status minio1 minio2 ✔ ✔ ✔ ResyncID: 2248d1d1-633f-4d61-b938-d8ea0b9b2d31 Status: Completed Objects: 2225 Versions: 2225 FailedObjects: 0 Throughput: 5.3 MiB/s IOPs: 124.23 objs/s Transferred: 94 MiB Elapsed: 17.909833202s CurrObjName: testbucket/web-app/tsconfig.json
Hata ayıklayıcı bölmesini çalıştırmanızın başka bir nedeni de, bölmenizde bazı dosya sistemi izinleri veya geçersiz grup yapılandırmaları varsa bunları hata ayıklayıcı bölmesini kullanarak güncelleyebilmenizdir.
[root@mc /]# chgrp -R 1000780050 .minio.sys/
Yukarıdaki hata ayıklama yöntemi çıplak metal ortamlarda da kullanılabilir. Örneğin, mc
kurulu olduğu bir meşgul kutusu veya bastion düğümünü başlatabilir ve yukarıdaki talimatların aynısını takip edebilirsiniz.
Çıplak donanım Linux kurulumları en basit olanıdır. Aslında MinIO'nun SystemD ile kurulup çalıştırılması için sadece birkaç komut yeterli. Ayrıntılar için lütfen bkz.
Bazen çıplak metal kurulumları ters gider. İşte bize sorulan (çok yaygın olmayan) tuzaklardan bazıları:
En yaygın tuzaklardan biri MinIO ikili dosyasının ve yapılandırma dosyasının dosya izinleridir. Böyle bir durumda MinIO'yu SystemD kullanarak başlattığınızda şunu göreceksiniz:
Assertion failed for MinIO.
ve işte tam yığın izlemesi
# systemctl status minio.service ● minio.service - MinIO Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled) Active: inactive (dead) Assert: start assertion failed at Tue 2023-12-26 18:21:38 PST; 8s ago AssertFileIsExecutable=/usr/local/bin/minio was not met Docs: https://docs.min.io Dec 26 18:13:37 minio1 systemd[1]: minio.service: Starting requested but asserts failed. Dec 26 18:17:50 minio1 systemd[1]: Assertion failed for MinIO. Dec 26 18:21:38 minio1 systemd[1]: minio.service: Starting requested but asserts failed. Dec 26 18:21:38 minio1 systemd[1]: Assertion failed for MinIO.
Bunun birkaç nedeni olabilir; listeye göz atalım ve her birini kontrol edelim.
MinIO İkili : Bu örnekte /usr/local/bin/minio
konumunda bulunan ikili dosyanın sırasıyla kullanıcı ve grup için root:root
iznine sahip olması gerekir.
# ll /usr/local/bin/minio total 93804 -rwxr-xr-x 1 root root 96018432 Nov 15 16:35 minio*
MinIO Hizmet Kullanıcısı ve Grubu : MinIO hizmetinin güvenlik amacıyla benzersiz bir Linux kullanıcısı ve grubu altında çalışması gerekir, asla root
kullanıcı olarak çalıştırılmaz. Varsayılan olarak kullanıcı ve grup adları için minio-user
kullanırız. SystemD hizmeti yapılandırma dosyasında buna benzer bir şey görmelisiniz
User=minio-user Group=minio-user
MinIO Veri Dizini : MinIO verilerinin saklanacağı dizinin minio-user:minio-user
veya yukarıdaki gibi MinIO hizmetini çalıştırmaya karar verdiğiniz kullanıcıya ait olması gerekir.
# ls -l /mnt total 4 drwxrwxr-x 2 minio-user minio-user 4096 Dec 27 09:58 data
SystemD ve MinIO yapılandırması : Her iki yapılandırma dosyası da kullanıcı ve grup için root:root
izinlerine sahip olmalıdır.
# ls -l /etc/default/minio -rw-r--r-- 1 root root 1330 Dec 27 09:52 /etc/default/minio # ls -l /etc/systemd/system/minio.service -rw-r--r-- 1 root root 941 Dec 26 17:13 /etc/systemd/system/minio.service
Kök Olarak Çalıştır : Tüm yükleme işlemi root
olarak çalıştırılmalıdır. Kullanıcınızın izinleri varsa sudo
da deneyebilirsiniz, ancak kurulumun dosyaları yalnızca root
kullanıcının erişebileceği bir dizi yere yerleştirmesi gerektiğinden, öneri kök olarak çalıştırılmasıdır. Bash komut isteminizde bunun gibi bir $
değil, #
olmalıdır
#
vs $
Yukarıdakilerin hiçbiri işe yaramazsa en iyi yaklaşım uygulamayı, dizinleri ve yapılandırmaları kaldırmak ve kök kullanıcı olarak yeni bir yükleme başlatmaktır.
Silinen dosyalarla ilgili diğer bir yaygın sorun ise hâlâ işlemin devam etmesidir ve bu da bağlantı noktası çakışmalarına neden olur. Bir hizmet çalışmadığında bile mevcut bağlantı noktasında yeni bir hizmet başlatamayabilirsiniz veya çalışan hizmet hatalı davranabilir (oturum açmanıza izin vermemek gibi).
# lsof -n | grep (deleted) COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME nginx 13423 root 5u REG 253,3 42949672960 17 (deleted) minio 13423 minio 6u REG 253,3 0 18 (deleted) minio 13423 minio 7u REG 253,3 0 19 (deleted)
MinIO kurulumunda aşağıdaki gibi hatalar görebilirsiniz
net::ERR_FAILED
Yukarıdaki ekran görüntüsünde dahili bir sunucu hatası ve yetkisiz bir hata gösterilmektedir. Yüzeye baktığımızda bu hataya neyin sebep olduğu belirsiz görünüyor, biraz linux bilgisiyle hata ayıklayabiliriz, buna neden olabilecek neye bakmalıyız, bir bakalım.
Bu sorunda hata ayıklamanın birkaç yolu vardır; öncelikle aynı düğümde birden fazla MinIO işleminin çalışıp çalışmadığını kontrol edelim.
# ps aux | grep -i minio minio-u+ 5048 0.3 1.7 1594008 144384 ? Ssl 11:03 0:01 /usr/local/bin/minio server --console-address :9001 /mnt/data/disk1/minio minio-u+ 9276 0.3 1.7 1594208 144301 ? Ssl 11:25 0:01 /usr/local/bin/minio server --console-address :9001 /mnt/data/disk1/minio
Yukarıda gördüğümüz gibi çalışan 2 MinIO işlemi var. Daha eski veya en uzun süre çalışan işlemi sonlandırarak başlayın, bu durumda işlem kimliği 5048
gibi görünüyor.
kill -9 5048
Bazen, işlemi sonlandırdıktan sonra bile hizmet hala başlamayabilir veya bir işlem numarası ayırdığı ancak buna izin vermediği için hizmet hala kapatılabilir. Bunun nedeni, silinmiş ancak işletim sistemi tarafından hâlâ izlenmekte olan dosyalar olabilir. Silinen dosyaları LSOF aracılığıyla bulabilirsiniz.
lsof -n | grep '(deleted)'
Son fakat bir o kadar da önemli olarak, geride silinmiş dosyalar veya askıda kalan işlemler kalmadıysa ve her şey tamamen temiz görünüyorsa son çare, düğümü hızlı bir şekilde yeniden başlatmaktır. Bu, yeni bir yükleme başlatmanız için bekleyen dosyaları ve işlemleri kapatıp temizleyen mantıklı bir yöntemdir.
Nadir de olsa, uç kurulum durumları her zaman mevcut olacaktır. MinIO müşterileri endişelenecek bir şeylerinin olmadığını biliyorlar çünkü kodu yazan mühendislerimize hızlı bir şekilde mesaj gönderebiliyorlar.
Sorun giderme ve hata ayıklamayla ilgili sorularınız varsa