Skip to main content

Configuración de varios discos de datos

Puede configurar discos de datos adicionales y usarlos para hospedar datos de MySQL y repositorios.

¿Quién puede utilizar esta característica?

GitHub Enterprise Server

Nota:

La capacidad de configurar y usar varios discos de datos está en versión preliminar pública y está sujeta a cambios. Nos encantaría escuchar sus comentarios sobre la versión preliminar. Puede compartirlo con el equipo de éxito del cliente o dejar un comentario en la publicación de discusión de la comunidad. Nuestra opción preferida es compartir sus comentarios con el equipo de éxito del cliente.

¿Por qué introducir más discos en la instancia de GHES?

  • Distribución de recursos mejorada:
    • Los distintos servicios tienen requisitos de disco únicos.
    • MySQL es principalmente sensible a la latencia y a IOPS.
    • Algunos recursos (como los repositorios) no se benefician tanto del almacenamiento en bloque costoso.
  • Límites de máquina virtual maximizados:
    • A menudo, un solo disco no puede maximizar las limitaciones de una instancia.
    • Desde una perspectiva de costos, normalmente no es factible o vale la pena ejecutar todo en el almacenamiento más caro o más rápido.
  • Separación más clara entre la asignación de recursos y los servicios:
    • Los recursos se pueden asignar de forma específica, lo que impide que los servicios críticos queden sin recursos.
  • Escalabilidad
    • Los clientes que utilizan topologías independientes o de alta disponibilidad pueden ampliar su capacidad según sea necesario.

Constraints

  • Los discos de varios datos solo se admiten en topologías independientes y de alta disponibilidad (HA).
  • Una vez configurados varios discos de datos en una implementación, este cambio no se puede deshacer para esa implementación.
  • La configuración de discos de varios datos y la migración de datos normalmente requiere un tiempo de inactividad.
    • Puede minimizarlo configurando una réplica con discos de datos múltiples, replicando datos desde el primario y realizando una conmutación por error a la réplica.
    • Si va a agregar discos de datos múltiples directamente al principal, espere un tiempo de inactividad mucho más largo.
  • Durante la versión preliminar pública, los discos de varios datos solo se deben usar en entornos que no son de producción.
  • No se recomienda migrar MySQL y repositorios al mismo disco.
  • Actualmente, solo mySQL y repositorios se pueden migrar a discos adicionales.

Recomendaciones de recursos

Si agrega discos que son tan rápidos o más rápidos que los actuales, debería ver un rendimiento mejorado. Normalmente, los dispositivos de almacenamiento se miden por IOPS (operaciones de entrada/salida por segundo), rendimiento y latencia. Para MySQL, se recomienda usar un disco con una menor latencia y una IOPS mayor que el disco de datos existente. En el caso de los repositorios, elija un disco con mayor IOPS y rendimiento que el disco de datos actual.

En las configuraciones de alta disponibilidad, es mejor usar discos de varios datos tanto en la réplica principal como en todas las réplicas. No se recomienda mezclar configuraciones, donde la principal tiene discos de varios datos, pero la réplica no lo hace.

Configuración de varios discos de datos y rutas de acceso de datos

Prerrequisitos

  • Se recomienda realizar una copia de seguridad reciente de los datos antes de empezar.
  • Cree un entorno de prueba para probar la característica.
    • Durante la versión preliminar pública, se recomienda usar solo la característica en un entorno de prueba.
    • Una vez que la característica esté disponible con carácter general, se recomienda probar la característica en un entorno que no sea de producción antes de usarla en producción.

Instrucciones

  1. Puede realizar una instalación nueva de GHES o usar una instancia de GHES existente. Debe tener configurado el disco de datos en /data/user.

  2. Una vez /data/user configurado, agregue dispositivos de almacenamiento en bloque adicionales a la instancia.

    Actualmente, ghe-storage-find elige el primer almacenamiento en bloque para configurar /data/user en función del orden alfabético de la ruta de acceso del almacenamiento en bloque. Esto sucede en el primer arranque del dispositivo GHES.

    Para tener más control sobre qué disco se usa para /data/user, es mejor completar el proceso de inicialización con un solo disco conectado inicialmente.

  3. Inicialice la configuración de varios discos mediante los nuevos dispositivos de almacenamiento en bloques. Para inicializar la compatibilidad con varios discos, ejecute ghe-storage-multi-disk init. En cada reinicio, ghe-multi-disk.service volverá a montar automáticamente los discos de datos existentes en las rutas de acceso correctas.

    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
    
    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
    

Tenga en cuenta que /dev/nvme2n1 y /dev/nvme3n1 son solo rutas de acceso de ejemplo. Es posible que no coincidan con las rutas de acceso en su sistema. Del mismo modo, db y git son ejemplos. Puede elegir nombres diferentes.

  1. Cambie al modo de mantenimiento.

    Shell
    gh es maintenance set --enabled true
    
  2. Migre las rutas de acceso de datos deseadas.

    Para migrar MySQL:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-mysql db
    

    Para migrar repositorios:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-repositories git
    
  3. Salir del modo de mantenimiento.

    Shell
    gh es maintenance set --enabled false
    
  4. Pruebe la instancia durante un período de tiempo para asegurarse de que todo funciona según lo previsto.

  5.        **Solo después de pruebas suficientes**, quite `/data/user/mysql-backup` y `/data/user/repositories-backup`.
    

    Mantener estas carpetas durante las pruebas le permite revertir en caso de emergencia. Después de realizar pruebas suficientes, debe quitar esas carpetas de copia de seguridad para liberar espacio.

Guía para configuraciones de alta disponibilidad

Las instrucciones siguientes ayudan a reducir el tiempo de inactividad en topologías de alta disponibilidad (HA). Si usa una topología independiente, no tenemos instrucciones adicionales similares en este momento.

En el caso de las topologías de alta disponibilidad, el mejor enfoque es establecer una nueva réplica con varios discos de datos configurados, replicar datos desde el principal y, a continuación, promover la réplica al primario. No se recomienda migrar datos a discos adicionales en la principal actual, ya que este proceso puede provocar un tiempo de inactividad significativo.

  1. Configure una nueva réplica de alta disponibilidad con discos mejorados.

    Para planear la migración de datos, use du -sh /data/user/mysql y du -sh /data/user/repositories en la principal para calcular los requisitos de espacio en disco para la nueva réplica.

  2. Configure varios discos en la nueva réplica de alta disponibilidad.

  3. Permitir que el principal de alta disponibilidad se replique en la réplica.

  4. Siga la secuencia de conmutación por error como se documenta en Iniciar una tolerancia de fallos a tu aparato de réplica.

Aunque el proceso de replicación puede tardar mucho tiempo, la ventaja es que se ejecuta en segundo plano, por lo que la interrupción real del modo de mantenimiento se reduce considerablemente.

Ejemplo: configuración de dos discos adicionales

En este ejemplo se muestran los comandos y salidas necesarios para la inicialización de disco y la migración de datos. En concreto, /data/user/mysql se migra a /data/multi-disk/db/mysqly /data/user/repositories se migra a /data/multi-disk/git/repositories.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
Starting initialization sequence for /dev/nvme2n1 at /data/multi-disk/db...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
Starting initialization sequence for /dev/nvme3n1 at /data/multi-disk/git...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start mysql migration to /data/multi-disk/db...
Running checks..
Error: maintenance mode must be enabled before being able to proceed.
ERROR: Last Command: return 1 LINE: 36 ghe-storage-migrate-mysql
Script exited with exit code: 1

admin@ghe-test-primary:~$ ghe-maintenance -s

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start repository migration to /data/multi-disk/db...
Success: /data/user/mysql moved to /data/multi-disk/db/mysql
Script exited with exit code: 0

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-repositories git
Start repository migration to /data/multi-disk/git...
Success: /data/user/repositories moved to /data/multi-disk/git
Script exited with exit code: 0

admin@ghe-test-primary:~$ ghe-maintenance -u

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...
/data/user/mysql -> /data/multi-disk/db/mysql is correctly symlinked.
Repositories migration was detected...
/data/user/repositories -> /data/multi-disk/git/repositories is correctly symlinked.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...
# Multi disk configuration /data/user/multi-disk-config:
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

admin@ghe-test-primary:~$ ls /var/log/multi-disk/
ghe-storage-init-db.log  ghe-storage-init-git.log  ghe-storage-migrate-mysql.log  ghe-storage-migrate-repositories.log

Comprobaciones de higiene

Tanto /usr/local/share/enterprise/ghe-storage-multi-disk status como /usr/local/share/enterprise/ghe-storage-multi-disk info son útiles para comprobar la configuración.

Para ver la configuración actual de varios discos, use:

$ cat /data/user/multi-disk-config
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

Para revisar los registros de varios discos, incluidos los eventos de inicialización y migración de disco, ejecute:

$ ls -l /var/log/multi-disk/
total 56
-rw-r--r-- 1 root root  2398 Mar  3 13:22 ghe-storage-init-db.log
-rw-r--r-- 1 root root  2497 Mar  3 13:23 ghe-storage-init-git.log
-rw-r--r-- 1 root root  2201 Mar  3 13:28 ghe-storage-migrate-mysql.log
-rw-r--r-- 1 root root 37296 Mar  3 13:30 ghe-storage-migrate-repositories.log

Comandos para administrar varios discos

Estos comandos permiten agregar varios discos y migrar servicios específicos o rutas de acceso de carpeta a esos discos. Las rutas de acceso de carpeta originales se conservan y permanecen estáticas. Otros servicios no saben que ha cambiado nada. Las rutas de acceso a carpetas estáticas están vinculadas de forma simbólica a las rutas de acceso recién migradas.

Los comandos incluyen:

  • ghe-storage-multi-disk
    • status
    • init
    • info
    • mount
    •       `start-services` (solo se recomienda para la depuración de errores)
      
    •       `stop-services` (solo se recomienda para la depuración)
      
  • ghe-storage-migrate-repositories
    • Migra /data/user/repositories a cualquier ruta de acceso de disco creada mediante ghe-storage-multi-disk init.
  • ghe-storage-migrate-mysql
    • Migra /data/user/mysql a cualquier ruta de acceso de disco creada mediante ghe-storage-multi-disk init.