配置故障转移群集实例 - iSCSI - Linux 上的 SQL Server

适用于:SQL Server - Linux

本文介绍如何在 Linux 上为故障转移群集实例 (FCI) 配置 iSCSI 存储。

配置 iSCSI

iSCSI 使用网络将名为“目标”的服务器中的磁盘呈现给服务器。 连接到 iSCSI 目标的服务器要求已配置 iSCSI 发起程序。 目标上的磁盘具有显式权限,因此只有能够访问它们的发起程序才能执行此操作。 目标本身应该是高度可用和可靠的。

重要的 iSCSI 目标信息

虽然本部分不介绍如何配置 iSCSI 目标,因为此过程特定于要使用的源类型,但请确保已配置(群集节点将使用的)磁盘的安全性。

如果使用基于 Linux 的 iSCSI 目标,则不应在任何 FCI 节点上配置目标。 处于性能和可用性的考虑,应将 iSCSI 网络与源服务器和客户端服务器上常规网络流量所使用的网络分开。 用于 iSCSI 的网络速度应很快。 请记住,网络确实会消耗一些处理器带宽,所以如果使用的是常规服务器,请相应进行规划。 在目标上需要确保的最重要的事是为创建的磁盘分配适当的权限,以便只有那些参与 FCI 的服务器才能访问它们。 下面显示了一个示例 Microsoft iSCSI 目标,其中 linuxnodes1 是创建的名称,在这种情况下,分配了节点的 IP 地址,以便向其显示 NewFCIDisk1.vhdx。

Initiator

说明

本部分介绍如何在用作 FCI 节点的服务器上配置 iSCSI 发起程序。 此说明同样适用于 RHEL 和 Ubuntu。

有关支持的分发的 iSCSI 发起程序的更多信息,请访问以下链接:

  1. 选择将参与 FCI 配置的其中一个服务器。 选择任何一个均可。 iSCSI 应位于专用网络上,因此请配置 iSCSI 以识别和使用该网络。 运行 sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new,其中 <iSCSIIfaceName> 是网络的唯一或友好名称。 下面的示例使用 iSCSINIC

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

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

  2. 编辑 /var/lib/iscsi/ifaces/iSCSIIfaceName。 确保已完整填写以下值:

    • iface.net_ifacename 是操作系统中显示的网卡名称。
    • iface.hwaddress 是将在下面为此接口创建的唯一名称的 MAC 地址。
    • iface.ipaddress
    • iface.subnet_Mask

    请参阅以下示例:

    Screenshot of the file with the values completely filled out.

  3. 查找 iSCSI 目标。

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

    <iSCSINetName> 是网络的唯一/易记名称,<TargetIPAddress> 是 iSCSI 目标的 IP 地址,<TargetPort> 是 iSCSI 目标的端口。

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

  4. 登录到目标

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

    <iSCSIIfaceName> 是网络的唯一/易记名称,<TargetIPAddress> 是 iSCSI 目标的 IP 地址。

    iSCSITargetLogin

  5. 检查是否存在与 iSCSI 目标的连接。

    sudo iscsiadm -m session
    

    iSCSIVerify

  6. 检查 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. 在 iSCSI 磁盘上创建物理卷。

    sudo pvcreate /dev/<devicename>
    

    <devicename> 是上一步中的设备的名称。

  8. 在 iSCSI 磁盘上创建卷组。 分配给单个卷组的磁盘被视为池或集合。

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> 是卷组的名称,<devicename> 是步骤 6 中设备的名称。

  9. 创建并验证磁盘的逻辑卷。

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

    <size> 是要创建的卷的大小,可以用 G(千兆字节)、T(兆字节)等指定,<logical volume name> 是逻辑卷的名称,<volume group name> 是上一步中卷组的名称。

    下面的示例创建了一个 25GB 的卷。

    Create25GBVol

  10. 执行 sudo lvs 以查看创建的 LVM。

  11. 使用支持的文件系统格式化逻辑卷。 对于 EXT4,使用以下示例:

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

    <VolumeGroupName> 是上一步中卷组的名称。 <LogicalVolumeName> 是上一步中逻辑卷的名称。

  12. 对于系统数据库或存储在默认数据位置的任何内容,请执行以下步骤。 否则则,请跳至步骤 13。

  • 确保正在使用的服务器上的 SQL Server 已停止运行。

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  • 彻底切换为超级用户。 如果成功,不会收到任何确认信息。

    sudo -i
    
  • 切换为 mssql 用户。 如果成功,不会收到任何确认信息。

    su mssql
    
  • 创建一个临时目录来存储 SQL Server 数据和日志文件。 如果成功,不会收到任何确认信息。

    mkdir <TempDir>
    

    <TempDir> 是文件夹名称。 以下示例创建名为 /var/opt/mssql/TempDir 的文件夹。

    mkdir /var/opt/mssql/TempDir
    
  • 将 SQL Server 的数据和日志文件复制到临时目录。 如果成功,不会收到任何确认信息。

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

    <TempDir> 是上一步中的文件夹的名称。

  • 验证文件是否位于目录中。

    ls \<TempDir>
    

    <TempDir> 是步骤 d 中文件夹的名称。

  • 删除现有 SQL Server 数据目录中的文件。 如果成功,不会收到任何确认信息。

    rm - f /var/opt/mssql/data/*
    
  • 验证文件是否已删除。 下图显示了从 c 到 h 的整个序列的示例。

    ls /var/opt/mssql/data
    

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

  • 键入 exit 切换回根用户。

  • 将 iSCSI 逻辑卷装入 SQL Server 数据文件夹中。 如果成功,不会收到任何确认信息。

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

    <VolumeGroupName> 是卷组的名称,<LogicalVolumeName> 是已创建的逻辑卷的名称。 以下示例语法与上一个命令中的卷组和逻辑卷匹配。

    mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
    
  • 将装载的所有者更改为 mssql。 如果成功,不会收到任何确认信息。

    chown mssql /var/opt/mssql/data
    
  • 将装载组的所有权更改为 mssql。 如果成功,不会收到任何确认信息。

    chgrp mssql /var/opt/mssql/data
    
  • 切换为 mssql 用户。 如果成功,不会收到任何确认信息。

    su mssql
    
  • 从临时目录 /var/opt/mssql/data 复制文件。 如果成功,不会收到任何确认信息。

    cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
    
  • 验证文件是否在那里。

    ls /var/opt/mssql/data
    
  • 输入 exit 以退出 mssql 身份。

  • 输入 exit 以退出 root 身份。

  • 启动 SQL Server。 如果正确复制了所有内容并正确应用了安全性,SQL Server 应显示为已启动。

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  • 停止 SQL Server 并验证它是否已关闭。

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  1. 对于系统数据库以外的其他内容,例如用户数据库或备份,请按照以下步骤操作。 如果仅使用默认位置,请跳至步骤 14。
  • 切换为超级用户。 如果成功,不会收到任何确认信息。

    sudo -i
    
  • 创建将由 SQL Server 使用的文件夹。

    mkdir <FolderName>
    

    <FolderName> 是文件夹名称。 如果文件夹不在正确的位置,需要指定文件夹的完整路径。 以下示例创建名为 /var/opt/mssql/userdata 的文件夹。

    mkdir /var/opt/mssql/userdata
    
  • 将 iSCSI 逻辑卷装载到上一步中创建的文件夹中。 如果成功,不会收到任何确认信息。

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

    <VolumeGroupName> 是卷组的名称,<LogicalVolumeName> 是已创建的逻辑卷的名称,<FolderName> 是文件夹的名称。 示例语法如下所示。

    mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata 
    
  • 将创建的文件夹的所有权更改为 mssql。 如果成功,不会收到任何确认信息。

    chown mssql <FolderName>
    

    <FolderName> 是已创建的文件夹的名称。 下面显示了一个示例。

    chown mssql /var/opt/mssql/userdata
    
  • 将创建的文件夹组更改为 mssql。 如果成功,不会收到任何确认信息。

    chown mssql <FolderName>
    

    <FolderName> 是已创建的文件夹的名称。 下面显示了一个示例。

    chown mssql /var/opt/mssql/userdata
    
  • 键入 exit 以退出超级用户身份。

  • 若要进行测试,请在该文件夹中创建数据库。 以下示例使用 sqlcmd 创建数据库,将上下文切换到该数据库,验证操作系统级别是否存在文件,然后删除临时位置。 可以使用 SSMS。

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

  • 卸载共享

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

    <VolumeGroupName> 是卷组的名称,<LogicalVolumeName> 是已创建的逻辑卷的名称,<FolderName> 是文件夹的名称。 示例语法如下所示。

    sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata 
    
  1. 配置服务器,以便只有 Pacemaker 可以激活卷组。

    sudo lvmconf --enable-halvm --services -startstopservices
    
  2. 生成服务器上卷组的列表。 列出的任何非 iSCSI 磁盘内容都由系统使用,例如用于 OS 磁盘的内容。

    sudo vgs
    
  3. 修改文件 /etc/lvm/lvm.conf 的激活配置部分。 配置下列行:

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> 是步骤 20 的输出中 FCI不 使用的卷组列表。 将每个卷组括在引号中并用逗号分隔。 下面显示了一个示例。

    Screenshot showing an example of a volume_list value.

  4. 当 Linux 启动时,它将装载文件系统。 要确保只有 Pacemaker 可以装入 iSCSI 磁盘,请重新生成根文件系统映像。

    运行以下命令,可能需要一些时间才能完成。 运行成功后不会收到任何消息。

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  5. 重新启动服务器。

  6. 在将参与 FCI 的另一台服务器上,执行步骤 1 - 6。 这将向 iSCSI 服务器呈现 iSCSI 目标。

  7. 生成服务器上卷组的列表。 列表中应会显示之前创建的卷组。

    sudo vgs
    
  8. 启动 SQL Server 并验证它是否可以在此服务器上启动。

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  9. 停止 SQL Server 并验证它是否已关闭。

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  10. 在将参与 FCI 的任何其他服务器上重复步骤 1 - 6。

现在可以配置 FCI 了。

分发 主题
附带 HA 加载项的 Red Hat Enterprise Linux 配置
操作
附带 HA 加载项的 SUSE Linux Enterprise Server 配置