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. A continuación 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.

Initiator

Instrucciones

En esta sección se explicará cómo configurar un iniciador iSCSI en los servidores que actuarán como nodos para la FCI. Las instrucciones deberían funcionar tal cual en 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
    

    Screenshot of the iface command and the response to the command.

  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 interfaz indicada a continuación.
    • iface.ipaddress
    • iface.subnet_Mask

    Observe el ejemplo siguiente:

    Screenshot of the file with the values completely filled out.

  3. Busque el destino iSCSI.

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

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

    Screenshot of the discovery command and the response to the command.

  4. Inicie sesión en el destino.

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

    <iSCSIIfaceName> es el nombre único o fácil de usar de la red y <TargetIPAddress> es la dirección IP del destino iSCSI.

    iSCSITargetLogin

  5. Compruebe que existe una conexión con el destino iSCSI.

    sudo iscsiadm -m session
    

    iSCSIVerify

  6. Compruebe los discos conectados iSCSI.

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

    Screenshot of the grep command and the response to the command showing the attached SCSI disks.

  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> es 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> es el nombre del grupo de volúmenes del paso anterior.

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

    Create25GBVol

  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.

  • 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
    
  • Cambie por completo para ser el superusuario. No recibirá ninguna confirmación si se realiza correctamente.

    sudo -i
    
  • Cambie para ser el usuario de mssql. No recibirá ninguna confirmación si se realiza correctamente.

    su mssql
    
  • Cree un directorio temporal para almacenar los archivos de registro y los datos de SQL Server. No recibirá 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
    
  • Copie los archivos de registro y los datos de SQL Server en el directorio temporal. No recibirá ninguna confirmación si se realiza correctamente.

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

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

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

    ls \<TempDir>
    

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

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

    rm - f /var/opt/mssql/data/*
    
  • 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
    

    Screenshot of the ls command and the response to the command.

  • Escriba exit para volver al usuario raíz.

  • Monte el volumen lógico de iSCSI en la carpeta de datos de SQL Server. No recibirá 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> es el nombre 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
    
  • Cambie el propietario del montaje a mssql. No recibirá ninguna confirmación si se realiza correctamente.

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

    chgrp mssql /var/opt/mssql/data
    
  • Cambie al usuario de mssql. No recibirá ninguna confirmación si se realiza correctamente.

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

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

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

  • Escriba exit para no ser el usuario raíz.

  • 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
    
  • Detenga SQL Server y compruebe que se ha apagado.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  1. 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.
  • Cambie para ser el superusuario. No recibirá ninguna confirmación si se realiza correctamente.

    sudo -i
    
  • Cree una carpeta que usará 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
    
  • Monte el volumen lógico de iSCSI en la carpeta creada en el paso anterior. No recibirá ninguna confirmación si se realiza correctamente.

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

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

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

    chown mssql <FolderName>
    

    <FolderName> es el nombre de la carpeta que se ha creado. A continuación se muestra un ejemplo.

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

    chown mssql <FolderName>
    

    <FolderName> es el nombre de la carpeta que se ha creado. A continuación se muestra un ejemplo.

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

  • Para probar, cree una base de datos en esa carpeta. En el ejemplo siguiente se usa sqlcmd para crear una base de datos, cambiar el contexto a ella y comprobar que los archivos existen en el nivel del sistema operativo; después, se elimina la ubicación temporal. Puede usar SSMS.

    Screenshot of the sqlcmd command and the response to the command.

  • Desmontaje del recurso compartido

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

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

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

    sudo lvmconf --enable-halvm --services -startstopservices
    
  2. 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
    
  3. 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 usará. Coloque cada uno entre comillas y sepárelos con una coma. A continuación se muestra un ejemplo.

    Screenshot showing an example of a volume_list value.

  4. Cuando se inicie Linux, montará 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 recibirá ningún mensaje si se realiza correctamente.

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

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

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

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

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

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

Ya puede configurar la FCI.

Distribución Tema
Red Hat Enterprise Linux con complemento de alta disponibilidad Configuración
Operaciones
SUSE Linux Enterprise Server con complemento de alta disponibilidad Configuración