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é.
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 :
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
où<iSCSIIfaceName>
est le nom unique ou convivial du réseau. L'exemple suivant utiliseiSCSINIC
:sudo iscsiadm -m iface -I iSCSINIC -o new
Voici la sortie attendue.
New interface iSCSINIC added
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 :
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
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.
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)
Vérifiez les disques iSCSI attachés.
sudo grep "Attached SCSI" /var/log/messages
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.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.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.
Exécutez
sudo lvs
pour consulter le LVM qui a été créé.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.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.
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
Basculez entièrement pour être le superutilisateur. Vous ne recevez pas d’accusé de réception en cas de réussite.
sudo -i
Changez pour être l’utilisateur
mssql
. Vous ne recevez pas d’accusé de réception en cas de réussite.su mssql
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
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.Vérifiez que les fichiers se trouvent dans le répertoire.
ls <TempDir>
<TempDir>
est le nom du dossier des étapes précédentes.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/*
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
Tapez
exit
pour revenir à l’utilisateurroot
.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
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
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
Changez pour être l’utilisateur
mssql
. Vous ne recevez pas d’accusé de réception en cas de réussite.su mssql
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
Vérifiez que les fichiers sont présents.
ls /var/opt/mssql/data
Entrez
exit
pour ne pas êtremssql
.Entrez
exit
pour ne pas êtreroot
.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
Arrêtez SQL Server et vérifiez qu’il s’est bien arrêté.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
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.
Basculez pour être le superutilisateur. Vous ne recevez pas d’accusé de réception en cas de réussite.
sudo -i
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
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
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
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
Tapez
exit
pour ne plus être le superutilisateur.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
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
Configurez le serveur de sorte que seul Pacemaker puisse activer le groupe de volumes.
sudo lvmconf --enable-halvm --services -startstopservices
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
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.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)
Redémarrez le serveur.
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.
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
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
Arrêtez SQL Server et vérifiez qu’il s’est bien arrêté.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
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.