Compartir vía


Configuración de una instancia de clúster de conmutación por error: iSCSI: SQL Server en Linux

Se aplica a: SQL Server - Linux

En este artículo se explica cómo configurar el almacenamiento de iSCSI de una instancia de clúster de conmutación por error (FCI) en Linux.

Configuración de iSCSI

iSCSI usa redes para presentar los discos de un servidor conocido como destino para los servidores. Los servidores que se conectan al destino iSCSI requieren que se configure un iniciador iSCSI. Los discos del destino reciben permisos explícitos para que solo puedan acceder a ellos los iniciadores autorizados. El propio destino debe ser de alta disponibilidad y confiable.

Información importante del destino iSCSI

Aunque esta sección no trata de cómo configurar un destino iSCSI, ya que es específico del tipo de origen que se va a usar, debe asegurarse de que se haya configurado la seguridad de los discos usados por los nodos del clúster.

El destino no debe configurarse nunca en los nodos de FCI si se usa un destino iSCSI basado en Linux. Por cuestiones de rendimiento y disponibilidad, las redes iSCSI deben ser independientes de las que usa el tráfico de red normal tanto en el servidor de origen como en el de cliente. Las redes que se usan para iSCSI deben ser rápidas. Recuerde que la red consume algo de ancho de banda del procesador, por lo que debe planificarse en consecuencia si usa un servidor normal.

Lo más importante que debe comprobar que se lleva a cabo en el destino es que los discos creados tengan asignados los permisos adecuados para que solo los servidores que participan en la FCI tengan acceso a ellos. Aquí se muestra un ejemplo del destino iSCSI de Microsoft, donde linuxnodes1 es el nombre creado. En este caso, se asignan las direcciones IP de los nodos para que puedan ver NewFCIDisk1.vhdx.

Captura de pantalla del iniciador.

Instrucciones

En esta sección se explica cómo configurar un iniciador iSCSI en los servidores que actúa como nodos para la FCI. Las instrucciones deberían funcionar tal cual en Red Hat Enterprise Linux (RHEL) y Ubuntu.

Para obtener más información sobre el iniciador iSCSI para las distribuciones admitidas, consulte los vínculos siguientes:

  1. Elija uno de los servidores que participarán en la configuración de la FCI. No importa el que elija. iSCSI debe estar en una red dedicada, por lo que debe configurar iSCSI de modo que reconozca y use esa red. Ejecute sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new, <iSCSIIfaceName> donde es el nombre único o descriptivo de la red. En el ejemplo siguiente se usa iSCSINIC:

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Este es el resultado esperado.

    New interface iSCSINIC added
    
  2. Edite /var/lib/iscsi/ifaces/iSCSIIfaceName. Asegúrese de que tenga los siguientes valores rellenados por completo:

    • iface.net_ifacename es el nombre de la tarjeta de red tal como aparece en el sistema operativo.
    • iface.hwaddress es la dirección MAC del nombre único que se creará para la siguiente interfaz.
    • iface.ipaddress
    • iface.subnet_Mask

    Observe el ejemplo siguiente:

    Captura de pantalla del archivo con los valores rellenados al completo.

  3. Busque el destino iSCSI.

    sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
    

    <iSCSINetName> es el nombre único o descriptivo de la red, <TargetIPAddress> es la dirección IP del destino iSCSI y <TargetPort> es el puerto del destino iSCSI.

    Este es el resultado esperado.

    10.181.182.1:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    10.201.202.1:3260,1 iqn.1991-05.com.contoso:dc1-linuxnodes1-target
    [2002:b4b5:b601::b4b5:b601]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    [2002:8c9:ca01::c8c9:ca01]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    
  4. Inicie sesión en el destino.

    sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
    

    <iSCSIIfaceName> es el nombre único o descriptivo de la red, y <TargetIPAddress> es la dirección IP del destino iSCSI.

    Este es el resultado esperado.

    Logging in to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] (multiple)
    Login to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] successful.
    
  5. Compruebe que existe una conexión con el destino iSCSI.

    sudo iscsiadm -m session
    

    El resultado es similar al ejemplo siguiente:

    tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
    
  6. Compruebe los discos conectados iSCSI.

    sudo grep "Attached SCSI" /var/log/messages
    

    Captura de pantalla del comando grep y la respuesta al comando en la que se muestran los discos SCSI conectados.

  7. Cree un volumen físico en el disco iSCSI.

    sudo pvcreate /dev/<devicename>
    

    <devicename> es el nombre del dispositivo del paso anterior.

  8. Cree un grupo de volúmenes en el disco iSCSI. Los discos asignados a un único grupo de volúmenes se ven como un grupo o una colección.

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> es el nombre del grupo de volúmenes y <devicename> el nombre del dispositivo del paso 6.

  9. Cree y compruebe el volumen lógico del disco.

    sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
    

    <size> es el tamaño del volumen que se va a crear y que se puede especificar con G (gigabytes), T (terabytes), etc.; <LogicalVolumeName> es el nombre del volumen lógico y <VolumeGroupName> el del grupo de volúmenes del paso anterior.

    Este es el resultado esperado.

    Logical volume "FCIDataLV1" created.
    

    En el ejemplo siguiente se crea un volumen de 25 GB.

  10. Ejecute sudo lvs para ver el LVM que se ha creado.

  11. Dé formato al volumen lógico con un sistema de archivos compatible. Para EXT4, use el ejemplo siguiente:

    sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
    

    <VolumeGroupName> es el nombre del grupo de volúmenes del paso anterior. <LogicalVolumeName> es el nombre del volumen lógico del paso anterior.

  12. En el caso de las bases de datos del sistema o cualquier elemento almacenado en la ubicación de datos predeterminada, siga estos pasos. De lo contrario, vaya al paso 13.

    1. Asegúrese de que SQL Server está detenido en el servidor en el que está trabajando.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Cambie por completo para ser el superusuario. No recibe ninguna confirmación si se realiza correctamente.

      sudo -i
      
    3. Cambie al usuario mssql. No recibe ninguna confirmación si se realiza correctamente.

      su mssql
      
    4. Cree un directorio temporal para almacenar los archivos de registro y los datos de SQL Server. No recibe ninguna confirmación si se realiza correctamente.

      mkdir <TempDir>
      

      <TempDir> es el nombre de la carpeta. En el ejemplo siguiente se crea una carpeta denominada /var/opt/mssql/TempDir.

      mkdir /var/opt/mssql/TempDir
      
    5. Copie los archivos de registro y los datos de SQL Server en el directorio temporal. No recibe ninguna confirmación si se realiza correctamente.

      cp /var/opt/mssql/data/* <TempDir>
      

      <TempDir> es el nombre de la carpeta del paso anterior.

    6. Compruebe que los archivos están en el directorio.

      ls <TempDir>
      

      <TempDir> es el nombre de la carpeta del paso anterior.

    7. Elimine los archivos del directorio de datos de SQL Server existente. No recibe ninguna confirmación si se realiza correctamente.

      rm - f /var/opt/mssql/data/*
      
    8. Compruebe que se han eliminado los archivos. En la imagen siguiente se muestra un ejemplo de la secuencia completa de c a h.

      ls /var/opt/mssql/data
      

      Captura de pantalla del comando ls y la respuesta al comando.

    9. Escriba exit para volver al usuario raíz root.

    10. Monte el volumen lógico de iSCSI en la carpeta de datos de SQL Server. No recibe ninguna confirmación si se realiza correctamente.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
      

      <VolumeGroupName> es el nombre del grupo de volúmenes y <LogicalVolumeName> el del volumen lógico que se ha creado. La siguiente sintaxis de ejemplo coincide con el grupo de volúmenes y el volumen lógico del comando anterior.

      mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
      
    11. Cambie el propietario del montaje a mssql. No recibe ninguna confirmación si se realiza correctamente.

      chown mssql /var/opt/mssql/data
      
    12. Cambie la propiedad del grupo del montaje a mssql. No recibe ninguna confirmación si se realiza correctamente.

      chgrp mssql /var/opt/mssql/data
      
    13. Cambie al usuario mssql. No recibe ninguna confirmación si se realiza correctamente.

      su mssql
      
    14. Copie los archivos del directorio temporal /var/opt/mssql/data. No recibe ninguna confirmación si se realiza correctamente.

      cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
      
    15. Compruebe que los archivos están allí.

      ls /var/opt/mssql/data
      
    16. Escriba exit para no ser mssql.

    17. Escriba exit para no ser root.

    18. Inicie SQL Server. Si todo se ha copiado correctamente y la seguridad se ha aplicado correctamente, SQL Server debería mostrarse como iniciado.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. Detenga SQL Server y compruebe que se ha apagado.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. Para comprobar otros aspectos que no sean las bases de datos del sistema (por ejemplo, las bases de datos de usuario o las copias de seguridad), siga estos pasos. Si solo usa la ubicación predeterminada, vaya al paso 14.

    1. Cambie para ser el superusuario. No recibe ninguna confirmación si se realiza correctamente.

      sudo -i
      
    2. Cree una carpeta que use SQL Server.

      mkdir <FolderName>
      

      <FolderName> es el nombre de la carpeta. Es necesario especificar la ruta de acceso completa de la carpeta si no está en la ubicación correcta. En el ejemplo siguiente se crea una carpeta denominada /var/opt/mssql/userdata.

      mkdir /var/opt/mssql/userdata
      
    3. Monte el volumen lógico de iSCSI en la carpeta creada en el paso anterior. No recibe ninguna confirmación si se realiza correctamente.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> es el nombre del grupo de volúmenes, <LogicalVolumeName> el nombre del volumen lógico que se ha creado y <FolderName> el nombre de la carpeta. Aquí se muestra un ejemplo de la sintaxis.

      mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
    4. Cambie a mssql la propiedad de la carpeta creada. No recibe ninguna confirmación si se realiza correctamente.

      chown mssql <FolderName>
      

      <FolderName> es el nombre de la carpeta que se ha creado. Aquí se muestra un ejemplo.

      chown mssql /var/opt/mssql/userdata
      
    5. Cambie a mssql el grupo de la carpeta creada. No recibe ninguna confirmación si se realiza correctamente.

      chown mssql <FolderName>
      

      <FolderName> es el nombre de la carpeta que se ha creado. Aquí se muestra un ejemplo.

      chown mssql /var/opt/mssql/userdata
      
    6. Escriba exit para dejar de ser el superusuario.

    7. Para probar, cree una base de datos en esa carpeta. El script siguiente crea una base de datos, cambia el contexto a ella y comprueba que los archivos existen en el nivel del sistema operativo; después, elimina la ubicación temporal. Puede usar SSMS o sqlcmd para ejecutar este script.

      DROP DATABASE TestDB;
      GO
      
      CREATE DATABASE TestDB
          ON (NAME = TestDB_Data, FILENAME = '/var/opt/mssql/userdata/TestDB_Data.mdf')
          LOG ON (NAME = TestDB_Log, FILENAME = '/var/opt/mssql/userdata/TestDB_Log.ldf');
      GO
      
      USE TestDB;
      GO
      

      Ejecute el siguiente comando en el shell para ver los nuevos archivos de base de datos.

      sudo ls /var/opt/mssal/userdata
      

      Este es el resultado esperado.

      lost+found TestDB_Data.mdf
      TestDB_Log.ldf
      

      Elimine la base de datos para limpiarla.

      DROP DATABASE TestDB;
      GO
      
      sudo ls /var/opt/mssal/userdata
      

      Este es el resultado esperado.

      lost+found
      
    8. Desmontaje del recurso compartido

      sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> es el nombre del grupo de volúmenes, <LogicalVolumeName> el nombre del volumen lógico que se ha creado y <FolderName> el nombre de la carpeta. Aquí se muestra un ejemplo de la sintaxis.

      sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
  14. Configure el servidor para que solo Pacemaker pueda activar el grupo de volúmenes.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. Genere una lista de los grupos de volúmenes del servidor. El sistema usará cualquier elemento que no sea el disco iSCSI, como el disco del sistema operativo.

    sudo vgs
    
  16. Modifique la sección de configuración de activación del archivo /etc/lvm/lvm.conf. Configure la línea siguiente:

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> es la lista de grupos de volúmenes de la salida del paso 20 que la FCI no usa. Coloque cada uno entre comillas y sepárelos con una coma. Aquí se muestra un ejemplo.

    Captura de pantalla en la que se muestra un ejemplo de valor volume_list.

  17. Cuando se inicie Linux, monta el sistema de archivos. Para asegurarse de que solo Pacemaker pueda montar el disco iSCSI, vuelva a compilar la imagen del sistema de archivos raíz.

    Ejecute el comando siguiente, que podría tardar unos minutos en completarse. No recibe ningún mensaje si se realiza correctamente.

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  18. Reinicie el servidor.

  19. En otro servidor que vaya a participar en la FCI, realice los pasos 1-6. Se presenta el destino iSCSI al SQL Server.

  20. Genere una lista de los grupos de volúmenes del servidor. Debería mostrar el grupo de volúmenes creado anteriormente.

    sudo vgs
    
  21. Inicie SQL Server y compruebe que se puede iniciar en este servidor.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Detenga SQL Server y compruebe que se ha apagado.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. Repita los pasos 1-6 en cualquier otro servidor que vaya a participar en la FCI.

Ya puede configurar la FCI.