Configurer l’instance de cluster de basculement - iSCSI - SQL Server sur Linux

S’applique à : SQL Server - Linux

Cet article explique comment configurer le stockage iSCSI pour une instance de cluster de basculement (FCI) sur Linux.

Configurer l'iSCSI

iSCSI utilise la mise en réseau pour présenter les disques d’un serveur connu comme cible pour les serveurs. Les serveurs qui se connectent à la cible iSCSI nécessitent la configuration d’un initiateur iSCSI. Les disques sur la cible reçoivent des autorisations explicites, de sorte que seuls les initiateurs qui doivent pouvoir y accéder puissent le faire. La cible elle-même doit être hautement disponible et fiable.

Informations importantes sur la cible iSCSI

Bien que cette section ne couvre pas la configuration d’une cible iSCSI puisqu’elle est spécifique au type de source que vous utilisez, assurez-vous que la sécurité des disques qui seront utilisés par les nœuds de cluster est configurée.

La cible ne doit jamais être configurée sur l’un des nœuds FCI en cas d’utilisation d’une cible iSCSI Linux. Pour des raisons de performance et de disponibilité, les réseaux iSCSI doivent être séparés des réseaux utilisés par le trafic réseau normal, tant sur le serveur source que sur le serveur client. Les réseaux utilisés pour iSCSI doivent être rapides. Rappelez-vous que le réseau utilise une bande passante de processeur, planifiez-la en conséquence si vous utilisez un serveur standard.

La chose la plus importante pour s’assurer qu’elle est effectuée sur la cible est que les disques qui sont créés se voient attribuer les autorisations appropriées afin que seuls les serveurs participant à l’instance de cluster de basculement aient accès à ces derniers. Un exemple est illustré ci-dessous à partir de la cible iSCSI Microsoft où linuxnodes1 est le nom créé et, dans ce cas, les adresses IP des nœuds sont attribuées de manière à ce que NewFCIDisk1.vhdx leur soit affiché.

Capture d’écran de l’initiateur.

Instructions

Cette section explique comment configurer un initiateur iSCSI sur les serveurs qui servent de nœuds pour l’instance de cluster de basculement. Les instructions devraient fonctionner telles quelles sur Red Hat Enterprise Linux (RHEL) et Ubuntu.

Pour plus d’informations sur l’initiateur iSCSI pour les distributions prises en charge, consultez les liens suivants :

  1. Choisissez un des serveurs qui fera partie de la configuration de l’instance de cluster de basculement. Peu importe lequel. iSCSI doit se trouver sur un réseau dédié. Vous devez donc configurer iSCSI pour reconnaître et utiliser ce réseau. Exécutez sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new<iSCSIIfaceName> est le nom unique ou convivial du réseau. L'exemple suivant utilise iSCSINIC :

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Voici la sortie attendue.

    New interface iSCSINIC added
    
  2. Modifier /var/lib/iscsi/ifaces/iSCSIIfaceName. Assurez-vous que les valeurs suivantes sont entièrement remplies :

    • iface.net_ifacename est le nom de la carte réseau, comme indiqué dans le système d’exploitation.
    • iface.hwaddress est l’adresse MAC du nom unique qui sera créé pour l’interface suivante.
    • iface.ipaddress
    • iface.subnet_Mask

    Voir l’exemple suivant :

    Capture d’écran du fichier avec les valeurs complètement renseignées.

  3. Recherchez la cible iSCSI.

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

    <iSCSINetName> est le nom unique/convivial du réseau, <TargetIPAddress> est l’adresse IP de la cible iSCSI et <TargetPort> est le port de la cible iSCSI.

    Voici la sortie attendue.

    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. Connectez-vous à la cible.

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

    <iSCSIIfaceName> est le nom unique/convivial du réseau et <TargetIPAddress> est l’adresse IP de la cible iSCSI.

    Voici la sortie attendue.

    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. Assurez-vous qu’il existe une connexion à la cible iSCSI.

    sudo iscsiadm -m session
    

    La sortie doit ressembler à celle-ci :

    tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
    
  6. Vérifiez les disques iSCSI attachés.

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

    Capture d’écran de la commande grep et de la réponse à la commande montrant les disques SCSI attachés.

  7. Créez un volume physique sur le disque iSCSI.

    sudo pvcreate /dev/<devicename>
    

    <devicename> est le nom du périphérique de l’étape précédente.

  8. Créez un groupe de volumes sur le disque iSCSI. Les disques attribués à un seul groupe de volumes sont considérés comme un pool ou un regroupement.

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> est le nom du groupe de volumes et <devicename> est le nom du périphérique de l’étape 6.

  9. Créez et vérifiez le volume logique du disque.

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

    <size> est la taille du volume à créer et peut être spécifié avec G (gigaoctets), T (téraoctets), etc., <LogicalVolumeName> est le nom du volume logique et <VolumeGroupName> est le nom du groupe de volumes de l’étape précédente.

    Voici la sortie attendue.

    Logical volume "FCIDataLV1" created.
    

    L’exemple suivant crée un volume de 25 Go.

  10. Exécutez sudo lvs pour consulter le LVM qui a été créé.

  11. Formatez le volume logique avec un système de fichiers pris en charge. Pour EXT4, utilisez l’exemple suivant :

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

    <VolumeGroupName> est le nom du groupe de volumes de l’étape précédente. <LogicalVolumeName> est le nom du volume logique de l’étape précédente.

  12. Pour les bases de données système ou tout ce qui est stocké dans l’emplacement des données par défaut, procédez comme suit. Sinon, ignorez l’étape 13.

    1. Assurez-vous que SQL Server est arrêté sur le serveur sur lequel vous travaillez.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Basculez entièrement pour être le superutilisateur. Vous ne recevez pas d’accusé de réception en cas de réussite.

      sudo -i
      
    3. Changez pour être l’utilisateur mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      su mssql
      
    4. Créez un répertoire temporaire pour stocker les données et les fichiers journaux SQL Server. Vous ne recevez pas d’accusé de réception en cas de réussite.

      mkdir <TempDir>
      

      <TempDir> est le nom du dossier. L’exemple suivant crée un dossier nommé /var/opt/mssql/TempDir.

      mkdir /var/opt/mssql/TempDir
      
    5. Copiez les données et les fichiers journaux de SQL Server dans le répertoire temporaire. Vous ne recevez pas d’accusé de réception en cas de réussite.

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

      <TempDir> est le nom du dossier de l’étape précédente.

    6. Vérifiez que les fichiers se trouvent dans le répertoire.

      ls <TempDir>
      

      <TempDir> est le nom du dossier des étapes précédentes.

    7. Supprimez les fichiers du répertoire de données SQL Server existant. Vous ne recevez pas d’accusé de réception en cas de réussite.

      rm - f /var/opt/mssql/data/*
      
    8. Vérifiez que les fichiers ont été supprimés. L’image suivante montre un exemple de la séquence complète de c à h.

      ls /var/opt/mssql/data
      

      Capture d’écran de la commande ls et de la réponse à la commande.

    9. Tapez exit pour revenir à l’utilisateur root.

    10. Montez le volume logique iSCSI dans le dossier de données SQL Server. Vous ne recevez pas d’accusé de réception en cas de réussite.

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

      <VolumeGroupName> est le nom du groupe de volumes et <LogicalVolumeName> est le nom du volume logique qui a été créé. L’exemple de syntaxe suivant correspond au groupe de volumes et au volume logique de la commande précédente.

      mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
      
    11. Changez le propriétaire du montage en mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      chown mssql /var/opt/mssql/data
      
    12. Changez la propriété du groupe du montage en mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      chgrp mssql /var/opt/mssql/data
      
    13. Changez pour être l’utilisateur mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      su mssql
      
    14. Copiez les fichiers à partir de l’annuaire temporaire /var/opt/mssql/data. Vous ne recevez pas d’accusé de réception en cas de réussite.

      cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
      
    15. Vérifiez que les fichiers sont présents.

      ls /var/opt/mssql/data
      
    16. Entrez exit pour ne pas être mssql.

    17. Entrez exit pour ne pas être root.

    18. Démarrez SQL Server. Si tout a été copié correctement et que la sécurité est appliquée correctement, SQL Server doit s’afficher comme étant démarré.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. Arrêtez SQL Server et vérifiez qu’il s’est bien arrêté.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. Pour des éléments autres que les bases de données système, tels que les bases de données utilisateur ou les sauvegardes, procédez comme suit. Si vous utilisez uniquement l’emplacement par défaut, passez à l’étape 14.

    1. Basculez pour être le superutilisateur. Vous ne recevez pas d’accusé de réception en cas de réussite.

      sudo -i
      
    2. Créez un dossier qui sera utilisé par SQL Server.

      mkdir <FolderName>
      

      <FolderName> est le nom du dossier. Le chemin d’accès complet du dossier doit être spécifié s’il n’est pas à l’emplacement approprié. L’exemple suivant crée un dossier nommé /var/opt/mssql/userdata.

      mkdir /var/opt/mssql/userdata
      
    3. Montez le volume logique iSCSI dans le dossier créé à l’étape précédente. Vous ne recevez pas d’accusé de réception en cas de réussite.

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

      <VolumeGroupName> est le nom du groupe de volumes, <LogicalVolumeName> est le nom du volume logique créé et <FolderName> est le nom du dossier. Voici un exemple de syntaxe.

      mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
    4. Changez la propriété du dossier créé en mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      chown mssql <FolderName>
      

      <FolderName> est le nom du dossier créé. Un exemple est illustré ici.

      chown mssql /var/opt/mssql/userdata
      
    5. Changez le groupe du dossier créé en mssql. Vous ne recevez pas d’accusé de réception en cas de réussite.

      chown mssql <FolderName>
      

      <FolderName> est le nom du dossier créé. Un exemple est illustré ici.

      chown mssql /var/opt/mssql/userdata
      
    6. Tapez exit pour ne plus être le superutilisateur.

    7. Pour tester, créez une base de données dans ce dossier. Le script suivant crée une base de données en changeant le contexte et vérifiant que les fichiers existent au niveau du système d’exploitation, puis supprime l’emplacement temporaire. Vous pouvez utiliser SSMS ou sqlcmd pour exécuter ce 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
      

      Exécutez la commande suivante dans l’interpréteur de commandes pour afficher les nouveaux fichiers de base de données.

      sudo ls /var/opt/mssal/userdata
      

      Voici la sortie attendue.

      lost+found TestDB_Data.mdf
      TestDB_Log.ldf
      

      Supprimez la base de données à nettoyer.

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

      Voici la sortie attendue.

      lost+found
      
    8. Démonter le partage

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

      <VolumeGroupName> est le nom du groupe de volumes, <LogicalVolumeName> est le nom du volume logique créé et <FolderName> est le nom du dossier. Voici un exemple de syntaxe.

      sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
  14. Configurez le serveur de sorte que seul Pacemaker puisse activer le groupe de volumes.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. Générez une liste des groupes de volumes sur le serveur. Tout ce qui est répertorié et qui n’est pas le disque iSCSI est utilisé par le système, par exemple pour le disque du système d’exploitation.

    sudo vgs
    
  16. Modifiez la section Configuration de l’activation du fichier /etc/lvm/lvm.conf. Configurez la ligne suivante :

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> est la liste des groupes de volumes provenant de la sortie de l’étape 20 qui ne sont pas utilisés par l’instance de cluster de basculement. Placez-les entre guillemets et séparez-les par une virgule. Un exemple est illustré ici.

    Capture d’écran montrant un exemple de valeur volume_list.

  17. Lors du démarrage de Linux, le système de fichiers est monté. Pour vous assurer que seul Pacemaker peut monter le disque iSCSI, régénérez l’image du système de fichiers racine.

    Exécutez la commande suivante, qui peut prendre quelques moments pour se terminer. Vous ne recevez pas de message en cas de réussite.

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  18. Redémarrez le serveur.

  19. Sur un autre serveur qui fera partie de l’instance FCI, suivez les étapes de 1 à 6. La cible iSCSI est alors présentée à SQL Server.

  20. Générez une liste des groupes de volumes sur le serveur. Il doit afficher le groupe de volumes créé précédemment.

    sudo vgs
    
  21. Démarrez SQL Server et vérifiez qu’il peut être démarré sur ce serveur.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Arrêtez SQL Server et vérifiez qu’il s’est bien arrêté.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. Répétez les étapes de 1 à 6 sur tous les autres serveurs qui feront partie à l’instance de cluster de basculement.

Vous êtes maintenant prêt à configurer l’instance FCI.