Einrichten eines MinIO-Servers
In diesem Tutorial werde ich erklären, wie man einen MinIO-Server für die Nutzung der Speicherarchitektur einrichtet. Wie jeder, der nicht bereits weiß, was MinIO ist: Es ist ein hochleistungsfähiges, verteiltes Objekt-Speichersystem. Es ist softwaredefiniert, läuft auf Industriestandard-Hardware und ist 100% Open Source. Es ist absichtlich so gebaut, dass es Objekten als Einschicht-Architektur dient, um alle erforderlichen Funktionen ohne Kompromisse zu erreichen. Das Ergebnis wird als ein Cloud-nativer Objektserver angesehen, der gleichzeitig skalierbar und leichtgewichtig ist.
Da die Welt des Cloud-Engineering immer ausgereifter geworden ist, stellt sich die Frage, warum wir MinIO überhaupt brauchen?
Berücksichtigen Sie, dass, wenn Sie Ihre Lösung in der Cloud bereitstellen, Sie am Ende möglicherweise Lösungsspeicher wie AWS S3, Azure Blob Storage und Alibaba OSS verwenden werden. Dasselbe gilt für das Konzept, wenn Ihre Lösung weiterhin vor Ort bleibt, da Minio als Alternative zur Speicherarchitektur wie der bereitgestellte Cloud-Speicherdienst dient.
1. Wie funktioniert das?
In einem einfachen Konzept besteht Minio aus 2 Teilen – dem Client-Teil und dem Server-Teil. Dieses Konzept beinhaltet auch ein Dashboard über Web-ui oder Datei-Browser. Sowohl der Client- als auch der Server-Teil sind relativ einfach einzurichten, und wenn Sie mit CLI (Command Line Interface) vertraut sind, ist es für Sie leicht zu verstehen.
Wenn wir es jedoch auf Produktionsebene entwerfen, muss alles verteilt werden, was bedeutet, dass die angebotene Lösung eine gute Leistung in großem Maßstab, selbstständiges Wachstum und hohe Verfügbarkeit gewährleisten muss. Wenn man dies berücksichtigt, hat minio sein eigenes Konzept namens Distributed Erasure Code.
Dieses Konzept ist ein zuverlässiger Ansatz, um Daten auf mehrere Laufwerke zu verteilen und sie zurückzuholen, selbst wenn einige der Laufwerke nicht verfügbar sind. Durch die Verwendung dieses Konzepts können Sie die Hälfte der Laufwerke verlieren und Ihre Daten sind trotzdem garantiert.
In diesem Tutorial zeige ich Ihnen, wie man MinIO-Server als verteilten Löschcode installiert und konfiguriert. Danach werfen wir einen kurzen Blick auf die Client-Seite, um zu erfahren, wie der MinIO-Dienst als Endbenutzer genutzt werden kann.
2. Installationsphase
Für die Installationsphase werde ich 2 Server als Minio-Cluster konfigurieren, um die Konfiguration des verteilten Löschcodes vorzubereiten.
Nun werden wir 4 Plattenlaufwerke auflisten, die wir zur Partitionierung als Blockgerät für die Minio-Nutzung verwenden werden. Da unsere Architektur beschlossen hat, mehrere Server einzurichten, beträgt die Mindestanforderung an ein Laufwerk für einen Server 2, wenn Sie jedoch einen einzelnen Server verwenden, ist die Mindestanforderung an die Laufwerke 1. Detaillierte Anforderungen, die für das Design des Löschcodes erforderlich sind, finden Sie hier .
Nachfolgend sind die Schritte aufgeführt:
[root@svrA ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4fd8
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdd: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sde: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 104.1 GB, 104144568320 bytes, 203407360 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Wie Sie oben sehen können, sind auf unserer Seite 4 Laufwerke mit einer Größe von jeweils 8 GB in unseren Server eingebaut.
Als nächstes erstellen wir von jedem Laufwerk eine Partition, dann erstellen wir ein dediziertes Verzeichnis, das in jede zu erstellende Partition eingehängt wird. Nachfolgend sind die Schritte aufgeführt.
[root@svrA ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x4217c4d9.
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x4217c4d9
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215
Partition 1 of type Linux and of size 8 GiB is set
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x4217c4d9
Device Boot Start End Blocks Id System
/dev/sdb1 2048 16777215 8387584 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Command (m for help): q
[root@svrA ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1
[root@svrA ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=524224 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2096896, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@svrA ~]#
[root@svrA ~]# mkdir -p /opt/drive1
[root@svrA ~]# mkdir -p /opt/drive2
[root@svrA ~]# mkdir -p /opt/drive3
[root@svrA ~]# mkdir -p /opt/drive4
[root@svrA ~]#
[root@svrA ~]# mount /dev/sdb1 /opt/drive1
[root@svrA ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 97G 3.8G 94G 4% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 145M 870M 15% /boot
tmpfs 379M 0 379M 0% /run/user/0
/dev/sdb1 8.0G 33M 8.0G 1% /opt/drive1
[root@svrA ~]#
Wiederholen Sie den gleichen Vorgang, um eine Partition auf den verbleibenden Laufwerken zu erstellen, und mounten Sie diese dann in jedes Verzeichnis, das wir erstellt haben. Als Endergebnis sollten Sie schließlich die Ausgabe wie unten sehen :-
[root@svrA ~]# mount /dev/sdb1 /opt/drive1 [root@svrA ~]# mount /dev/sdc1 /opt/drive2 [root@svrA ~]# mount /dev/sdd1 /opt/drive3 [root@svrA ~]# mount /dev/sde1 /opt/drive4 [root@svrA ~]# [root@svrA ~]# [root@svrA ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 97G 3.8G 94G 4% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 1014M 145M 870M 15% /boot tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb1 8.0G 33M 8.0G 1% /opt/drive1 /dev/sdc1 8.0G 33M 8.0G 1% /opt/drive2 /dev/sdd1 8.0G 33M 8.0G 1% /opt/drive3 /dev/sde1 8.0G 33M 8.0G 1% /opt/drive4
In Ordnung, da eine Voraussetzung auf den Laufwerken für Server 1 erfüllt ist, wiederholen Sie die gleiche Konfiguration auf Server 2 wie oben.
3. Phase der Konfiguration
Nun, da beide Serverkonfigurationen abgeschlossen sind, lassen Sie uns mit der Installation des Minio-Dienstes fortfahren. Laden Sie zunächst das Minio-Paket wie unten gezeigt herunter:
[root@svrA ~]# wget https://dl.min.io/server/minio/release/linux-amd64/minio && chmod +x minio --2019-09-29 22:23:57-- https://dl.min.io/server/minio/release/linux-amd64/minio Resolving dl.min.io (dl.min.io)... 178.128.69.202 Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 43831296 (42M) [application/octet-stream] Saving to: ‘minio’
3% [=> ] 1,335,296 106KB/s eta 6m 33s
Wiederholen Sie nun das Gleiche wie oben auf Server 2.
Wenn alles erledigt ist, lassen Sie uns mit der Minio-Konfiguration beginnen. Wir werden den MINIO_ACCESS_KEY und MINIO_SECRET_KEY als Authentifizierungszugang definieren. Die Konfiguration ist wie unten angegeben :-
[root@svrA ~]# export MINIO_ACCESS_KEY=shahril && export MINIO_SECRET_KEY=shahril123 [root@svrA ~]# ./minio server http://10.124.12.{141..142}:9000/opt/drive{1..4} Waiting for a minimum of 4 disks to come online (elapsed 0s)
Waiting for a minimum of 4 disks to come online (elapsed 2s)
Waiting for a minimum of 4 disks to come online (elapsed 3s)
Waiting for a minimum of 4 disks to come online (elapsed 3s)
Waiting for all other servers to be online to format the disks.
Status: 8 Online, 0 Offline.
Endpoint: http://10.124.12.141:9000 http://10.124.12.142:9000
AccessKey: shahril
SecretKey: shahril123
Browser Access:
http://10.124.12.141:9000 http://10.124.12.142:9000
Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
$ mc config host add myminio http://10.124.12.141:9000 shahril shahril123
Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Jetzt ist die Konfiguration auf Server 1 abgeschlossen, wiederholen Sie den gleichen Schritt auf Server 2 für die Konfiguration.
Sobald alles erledigt ist, können wir mit den Tests beginnen
4. Die Testphase
Wenn alles erledigt ist, lassen Sie uns beginnen, die Nutzbarkeit von Minidiensten zu sehen. Wie in der obigen Konfiguration gezeigt, können wir über einen Browser auf das Dashboard seiner Benutzeroberfläche zugreifen. Für unser Beispiel melden wir uns bei http://10.124.12.141:9000 mit dem Zugriffsschlüssel shahril und dem geheimen Schlüssel shahril123 an, wie konfiguriert.
Das Ergebnis wird wie unten beschrieben angezeigt:
Wenn wir fertig sind, werden wir zum Eimer-Armaturenbrett weitergeleitet. Lassen Sie uns nun unseren ersten Eimer erstellen.
Klicken Sie auf den Icon-Ordner mit dem Plus-Button und nennen Sie unseren ersten Bucket mylove. Beispiel wie unten gezeigt:
Sobald dies erledigt ist, werden Sie feststellen, dass ein neuer Bereich erstellt und auf der linken Seite angezeigt wird (siehe Screenshot unten).
Wenn Sie fertig sind, werden Sie feststellen, dass ein neuer Bereich erstellt und auf der linken Seite angezeigt wird (siehe Screenshot unten).
Als nächstes fügen wir alle Dateien von Ihrer lokalen Seite hinzu, die in den Bereich eingefügt werden sollen
Sie werden feststellen, dass die neue Datei erfolgreich in den Bucket hochgeladen wurde, wie unten gezeigt.
Um sicherzustellen, dass das Konzept der Verteilung gut umgesetzt werden. Lassen Sie uns einen einfachen Test machen, indem wir über einen anderen Server auf das minio-Dashboard zugreifen. Die andere Server-URL lautet http://10.124.12.142:9000.
Wie erwartet sind der Bereich und die Dateien, die wir eingefügt haben, auch in der URL anderer Server vorhanden, wie oben gezeigt.
Lassen Sie uns nun einen weiteren Test durchführen. Dieses Mal werden wir eine andere Workstation verwenden, die über die Client-Konsole mc auf unseren Minio-Server zugreift.
Von der Client-Seite aus werden wir eine Datei erstellen und diese dann in den bestehenden Bereich hochladen.
Als Endergebnis erwarten wir dann vom Dashboard zu sehen, dass die von der Client-Seite hochgeladene neue Datei automatisch existiert.
Öffnen Sie zunächst die Client-Arbeitsstation und laden Sie das Minio-Client-Paket herunter. Ein Beispiel ist unten dargestellt:
[root@CentOS7 ~]# wget https://dl.min.io/client/mc/release/linux-amd64/mc --2019-09-30 11:47:38-- https://dl.min.io/client/mc/release/linux-amd64/mc Resolving dl.min.io (dl.min.io)... 178.128.69.202 Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 16592896 (16M) [application/octet-stream] Saving to: ‘mc’
100%[==============================================================================>] 16,592,896 741KB/s in 1m 59s
2019-09-30 11:49:37 (137 KB/s) – ‘mc’ saved [16592896/16592896]
[root@CentOS7 ~]# chmod +x mc
Nehmen Sie dann die Konfiguration von der Client-Seite aus vor, um mit create access key and secret auf den dedizierten Bereich zuzugreifen. Beispiel wie unten beschrieben:
[root@CentOS7 ~]# ./mc config host add myminio http://10.124.12.142:9000 shahril shahril123 mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials. mc: Successfully created `/root/.mc/share`. mc: Initialized share uploads `/root/.mc/share/uploads.json` file. mc: Initialized share downloads `/root/.mc/share/downloads.json` file. Added `myminio` successfully.
Sobald die Konfiguration abgeschlossen ist, sollten Sie es schaffen, den Inhalt innerhalb des vorhandenen Bereichs zu sehen. Beispiel wie unten dargestellt:
[root@CentOS7 ~]# ./mc ls myminio [2019-09-30 11:16:25 +08] 0B mylove/
[root@CentOS7 ~]# ./mc ls myminio/mylove/
[2019-09-30 11:16:25 +08] 55KiB myself.jpg
Erstellen oder laden Sie nun eine beliebige vorhandene Datei von der Client-Seite in den Eimer. Beispiel wie unten :-
[root@CentOS7 ~]# ./mc cp new_file.txt myminio/mylove new_file.txt: 38 B / 38 B ???????????????????????????????????????????????????????????????? 100.00% 1.02 KiB/s 0s [root@CentOS7 ~]#
[root@CentOS7 ~]# ./mc ls myminio/mylove/
[2019-09-30 11:16:25 +08] 55KiB myself.jpg
[2019-09-30 11:58:16 +08] 38B new_file.txt
Sobald dies geschehen ist, sollten Sie, wie erwartet, wenn Sie von der Dashboard-Seite aus über eine der Server-URLs aktualisieren, sehen, dass die neuen Dateien dort wie unten beschrieben angezeigt werden.
Sie sollten den vollständigen Link des Bildes sehen, wenn Sie wie unten angegeben auf das Freigabesymbol auf der rechten Seite klicken. Dies ist der eindeutige Link jedes Objekts innerhalb des Bereichs, den Sie auf der Anwendungsseite über Curl oder API verwenden können.
Daumen hoch! Jetzt haben wir erfolgreich einen selbst gehosteten Speicherdienst vor Ort mit Minio eingerichtet und konfiguriert. Für ausführlichere Details können Sie die Dokumentation hier einsehen