En este tutorial, explicaré cómo configurar un servidor MinIO para el uso de la arquitectura de almacenamiento. Como cualquiera que aún no sepa qué es MinIO:es un sistema de almacenamiento de objetos distribuidos de alto rendimiento. Está definido por software, se ejecuta en hardware estándar de la industria y es 100 % de código abierto. Está diseñado a propósito para servir a los objetos como una arquitectura de una sola capa para lograr toda la funcionalidad necesaria sin compromiso. El resultado se ve como un servidor de objetos nativo de la nube que es al mismo tiempo escalable y liviano.
A medida que el mundo de la ingeniería en la nube ha ido emergiendo cada vez más maduro, se me ocurre por qué necesitamos MinIO en primer lugar.
Tenga en cuenta que si cuando sirve su solución en la nube, puede terminar usando almacenamiento de solución como AWS S3, Azure Blob Storage y Alibaba OSS. Lo mismo ocurre con el concepto si su solución aún permanece en las instalaciones, ya que Minio sirve como una alternativa a la arquitectura de almacenamiento al igual que el servicio de almacenamiento en la nube proporcionado.
1. ¿Cómo funciona?
En un concepto simple, Minio viene en 2 partes:la parte del cliente y la parte del servidor. Este concepto también incluye un tablero a través de una interfaz de usuario web o un navegador de archivos. Tanto el lado del cliente como el del servidor son relativamente fáciles de configurar y, si está familiarizado con la CLI (interfaz de línea de comandos), le resultará fácil de entender.
Sin embargo, cuando lo diseñamos en un nivel de producción, todo debe distribuirse, lo que significa que la solución proporcionada debe garantizar un buen desempeño a gran escala, crecimiento autoexpandible y disponibilidad alta. Teniendo esto en cuenta, minio tiene su propio concepto llamado Código de borrado distribuido .
Este concepto es un enfoque confiable para fragmentar datos en varias unidades y recuperarlos, incluso cuando algunas de las unidades no están disponibles. Al usar este concepto, puede perder la mitad de las unidades y aún así tener la garantía de sus datos
Para este tutorial, le mostraré cómo instalar y configurar el servidor MinIO como un código de borrado distribuido. Después de eso, echaremos un vistazo rápido al lado del cliente sobre cómo utilizar el servicio MinIO como usuario final.
2. Fase de instalación
Para la fase de instalación, configuraré 2 servidores como minio cluster para preparar la configuración del código de borrado distribuido.
Ahora enumeraremos 4 unidades de disco que usaremos para particionarlo como dispositivo de bloque para el uso de minio. Como nuestra arquitectura decidió configurar varios servidores, la unidad mínima que debe haber para un servidor es 2; sin embargo, si está utilizando un solo servidor, el requisito mínimo de las unidades es 1. Se pueden ver los requisitos detallados necesarios para el diseño del código de borrado aquí .
A continuación se muestran los pasos:
[[email protected] ~]# 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
Como puede ver arriba, en nuestro extremo hay 4 unidades montadas en nuestro servidor con 8 gb de tamaño cada una.
A continuación, crearemos una partición de cada unidad, luego crearemos un directorio dedicado que se montará en cada partición que se creará. A continuación se muestran los pasos.
[[email protected] ~]# 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
[[email protected] ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1
[[email protected] ~]# 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
[[email protected] ~]#
[[email protected] ~]# mkdir -p /opt/drive1
[[email protected] ~]# mkdir -p /opt/drive2
[[email protected] ~]# mkdir -p /opt/drive3
[[email protected] ~]# mkdir -p /opt/drive4
[[email protected] ~]#
[[email protected] ~]# mount /dev/sdb1 /opt/drive1
[[email protected] ~]# 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
[[email protected] ~]#
Una vez hecho esto, repita el mismo proceso para crear una partición en las unidades restantes y luego móntela en cada directorio que hayamos creado. Como resultado final, finalmente debería obtener la salida como se muestra a continuación:-
[[email protected] ~]# mount /dev/sdb1 /opt/drive1
[[email protected] ~]# mount /dev/sdc1 /opt/drive2
[[email protected] ~]# mount /dev/sdd1 /opt/drive3
[[email protected] ~]# mount /dev/sde1 /opt/drive4
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# 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
Muy bien, como requisito previo en las unidades para el servidor 1, repita la misma configuración en el servidor 2 como se indicó anteriormente.
3. Fase de Configuración
Ahora que ambas configuraciones de servidor están listas, continuemos con la instalación del servicio minio. Primero, descargue el paquete minio como se muestra a continuación:
[[email protected] ~]# 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
Ahora repita lo mismo que arriba en el servidor 2.
Como todo está hecho, comencemos la configuración de minio. Definiremos la MINIO_ACCESS_KEY y MINIO_SECRET_KEY como el acceso de autenticación. La configuración es la siguiente:-
[[email protected] ~]# export MINIO_ACCESS_KEY=shahril && export MINIO_SECRET_KEY=shahril123
[[email protected] ~]# ./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
Ahora la configuración se realiza en el servidor 1, repita el mismo paso en el servidor 2 para la configuración.
Una vez hecho todo, podemos proceder a probar el resultado
4. Fase de prueba
Ya que todo está hecho, empecemos a ver la usabilidad de minio services. Como se muestra en la configuración anterior, podemos acceder al tablero de su interfaz de usuario a través del navegador. Para nuestro ejemplo, iniciemos sesión en http://10.124.12.141:9000 con clave de acceso shahril y clave secreta shahril123 como configurado.
El resultado se mostrará de la siguiente manera:
Una vez hecho esto, nos redirigirá al panel de control del cubo. Ahora vamos a crear nuestro primer cubo.
Haga clic en la carpeta del icono con el botón más y nombre nuestro primer cubo como mylove . Ejemplo como se muestra a continuación:
Una vez hecho esto, notará que se crea un nuevo depósito y se muestra en el panel izquierdo como se muestra a continuación.
Una vez hecho esto, notará que se crea un nuevo depósito y se muestra en el panel izquierdo como se muestra a continuación.
A continuación, agreguemos cualquier archivo de su lado local para insertarlo en el cubo
Notará que el nuevo archivo se cargó con éxito en el depósito como se muestra a continuación.
Para garantizar que el concepto de distribución esté bien implementado. Hagamos una prueba sencilla accediendo al panel de minio a través de otro servidor. La otra URL del servidor es http://10.124.12.142:9000
Como era de esperar, el depósito y los archivos que hemos insertado también existen en la URL de otros servidores, como se muestra arriba.
Ahora, hagamos otra prueba. Esta vez usaremos otra estación de trabajo que accederá a nuestro servidor minio usando la consola del cliente llamada mc .
Desde el lado del cliente, crearemos un archivo y luego lo cargaremos en el depósito existente.
Luego, como resultado final, esperamos ver desde el tablero que el nuevo archivo cargado desde el lado del cliente existe automáticamente.
Primero, abra la estación de trabajo del cliente y descargue el paquete del cliente minio. A continuación se muestra un ejemplo:
[[email protected] ~]# 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]
[[email protected] ~]# chmod +x mc
Luego, realice la configuración desde el lado del cliente para acceder al depósito dedicado usando crear clave de acceso y secreto. Ejemplo según lo siguiente:
[[email protected] ~]# ./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.
Una vez configurado, debería lograr ver el contenido dentro del cubo existente. Ejemplo según lo siguiente:
[[email protected] ~]# ./mc ls myminio
[2019-09-30 11:16:25 +08] 0B mylove/
[[email protected] ~]# ./mc ls myminio/mylove/
[2019-09-30 11:16:25 +08] 55KiB myself.jpg
Ahora, cree o cargue cualquier archivo existente del lado del cliente en el depósito. Ejemplo según lo siguiente:-
[[email protected] ~]# ./mc cp new_file.txt myminio/mylove
new_file.txt: 38 B / 38 B ???????????????????????????????????????????????????????????????? 100.00% 1.02 KiB/s 0s
[[email protected] ~]#
[[email protected] ~]# ./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
Una vez hecho esto, como se esperaba cuando actualice desde el panel de control a través de cualquiera de las URL del servidor, debería ver que el nuevo archivo se muestra allí como se muestra a continuación.
Debería ver el enlace completo de la imagen cuando haga clic en el icono de compartir en su lado derecho como se muestra a continuación. Este es el enlace único de cada objeto dentro del cubo que puede usar en el lado de la aplicación a través de curl o API.
¡Pulgares hacia arriba! ahora hemos instalado y configurado con éxito un servicio de almacenamiento autohospedado en las instalaciones usando Minio. Para obtener más detalles, puede consultar su documentación aquí