Despliegue de un clúster de MinIO mediante Docker Compose

Despliegue de MinIO en modo individual con Docker Compose

Para fines de prueba, se puede levantar una instancia única de MinIO usando Docker. Primero, cree un archivo de entorno .env con la contrsaeña de administración:

echo 'MINIO_SECRET_KEY=minio@123' > .env

A continuación, defina el archivo docker-compose.yml con la siguinete configuración:

version: "3.8"
services:
  storage:
    image: minio/minio
    container_name: minio_standalone
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY}
    volumes:
      - ./data_store:/data
    command: server --console-address ':9001' /data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped

Ejecute docker-compose up -d para iniciar el servicio.

Despliegue de MinIO en modo clúster con Docker Compose

Para un clúster distribuido, se requieren al menos tres nodos. Utilice las siguientes direcciones IP como ejemplo:

10.0.1.10
10.0.1.11
10.0.1.12

1. Configuración de nombres de host

En cada nodo, edite /etc/hosts y agregue las siguientes entradas:

echo 'minio-node1 10.0.1.10' >> /etc/hosts
echo 'minio-node2 10.0.1.11' >> /etc/hosts
echo 'minio-node3 10.0.1.12' >> /etc/hosts

2. Preparación del directorio

Cree el directorio de almacenamiento en cada máquina:

mkdir -p /opt/minio_storage

3. Configuración de Docker Compose para el clúster

Genere el archivo .env con la clave raíz:

cd /opt/minio_storage && echo 'MINIO_ROOT_PASSWORD=minio@secret' > .env

Defina el archivo docker-compose.yml en cada nodo con este contenido:

version: "3.8"
services:
  minio-node:
    image: minio/minio
    container_name: minio_node1
    hostname: minio-node1
    expose:
      - "9200"
      - "9201"
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
    volumes:
      - ./disk1:/data1
      - ./disk2:/data2
    command: server --console-address ':9201' --address ':9200' http://minio-node{1...3}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200/minio/health/live"]
      interval: 45s
      timeout: 15s
      retries: 5
    extra_hosts:
      - minio-node1:10.0.1.10
      - minio-node2:10.0.1.11
      - minio-node3:10.0.1.12
    restart: unless-stopped
    network_mode: host

4. Configuración opcional de balanceador de carga con Nginx

Para disttribuir el tráfico, puede implementar un contenedor Nginx. Modifique el archivo docker-compose.yml en uno de los nodos (por ejemplo, en 10.0.1.10) para incluir el servicio load-balancer:

  load-balancer:
    image: nginx:1.25-alpine
    container_name: nginx_proxy
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "8000:9300"
      - "8001:9301"
    extra_hosts:
      - minio-node1:10.0.1.10
      - minio-node2:10.0.1.11
      - minio-node3:10.0.1.12
    restart: always

El archivo nginx.conf debe configurar los bloques upstream y los servidores proxy_pass apuntando a los nodos del clúster. Asegúrese de habilitar el soporte para WebSocket en la configuración del proxy.

Una vez configurados todos los archivos, inicie el clúster ejecutando en cada nodo:

docker-compose up -d

Etiquetas: minio Docker Compose clúster despliegue almacenamiento de objetos

Publicado el 6-14 01:44