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

适用于:SQL Server - Linux

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

在非 Windows 环境中,SMB 也称为通用 Internet 文件系统 (CIFS) 共享,并通过 Samba 实现。 在 Windows 环境中,通过以下方式访问 SMB 共享:\\SERVERNAME\SHARENAME。 对于基于 Linux 的 SQL Server 安装,必须将 SMB 共享装载为文件夹。

重要的源和服务器信息

下面是成功使用 SMB 的一些提示和说明:

  • SMB 共享可位于 Windows、Linux 甚至设备(只要它使用的是 SMB 3.0 或更高版本)上。 有关 Samba 和 SMB 3.0 的详细信息,请参阅 SMB 3.0,了解你的 Samba 实现是否符合 SMB 3.0。
  • SMB 共享应高度可用。
  • 必须在 SMB 共享上正确设置安全性。 下面是 /etc/samba/smb.conf 中的一个示例,其中 SQLData 是共享的名称。
[SQLData]
path=/var/smb/SQLData
read only = no
browseable = yes
guest ok = no
writeable = yes
valid users = SQLSambaUser

说明

  1. 选择将参与 FCI 配置的其中一个服务器。 选择任何一个均可。

  2. 获取有关 mssql 用户的信息。

     sudo id mssql
    

    请注意 uidgid 和组。

  3. 执行 sudo smbclient -L //NameOrIP/ShareName -U User

    • <NameOrIP> 是托管 SMB 共享的服务器的 DNS 名称或 IP 地址。
    • <ShareName> 是 SMB 共享的名称。
  4. 对于系统数据库或存储在默认数据位置的任何内容,请执行以下步骤。 否则,请跳至步骤 5。

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

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. 彻底切换为超级用户。

      sudo -i
      
    3. 切换到 mssql 用户。

      su mssql
      
    4. 创建一个临时目录来存储 SQL Server 数据和日志文件。

      mkdir <TempDir>
      
      • <TempDir> 是文件夹的名称。 以下示例创建一个名为 /var/opt/mssql/tmp 的文件夹。
      mkdir /var/opt/mssql/tmp
      
    5. 将 SQL Server 的数据和日志文件复制到临时目录。

      cp /var/opt/mssql/data/* <TempDir>
      
      • <TempDir> 是上一步中的文件夹的名称。
    6. 验证文件是否位于目录中。

      ls <TempDir>
      

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

    7. 删除现有 SQL Server 数据目录中的文件。

      rm - f /var/opt/mssql/data/*
      
    8. 验证文件是否已删除。

      ls /var/opt/mssql/data
      
    9. 键入 exit 切换回根用户。

    10. 将 SMB 共享装载到 SQL Server 数据文件夹中。 此示例展示了连接到基于 Windows Server 的 SMB 3.0 共享所用的语法。

      Mount -t cifs //<ServerName>/<ShareName> /var/opt/mssql/data -o vers=3.0,username=<UserName>,password=<Password>,domain=<domain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> 是具有 SMB 共享的服务器的名称
      • <ShareName> 是共享的名称
      • <UserName> 是访问共享的用户的名称
      • <Password> 是用户的密码
      • <domain> 是 Active Directory 的名称
      • <mssqlUID>mssql 用户的 UID
      • <mssqlGID>mssql 用户的 GID
    11. 在不切换的情况下,发布装载,以检查装载是否成功。

      mount
      
    12. 切换到 mssql 用户。

      su mssql
      
    13. 从临时目录 /var/opt/mssql/data 复制文件。

      cp /var/opt/mssql/tmp/* /var/opt/mssql/data
      
    14. 验证文件是否在那里。

      ls /var/opt/mssql/data
      
    15. 输入 exit 而不是 mssql

    16. 输入 exit 而不是 root

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

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    18. 若要进一步测试,请创建一个数据库来确保权限是正常的。 下面的示例使用 Transact-SQL;你可以使用 SSMS。

      屏幕截图显示测试数据库的创建。

    19. 停止 SQL Server 并验证它是否已关闭。 如果要添加或测试其他磁盘,在添加和测试这些磁盘之前,请不要关闭 SQL Server。

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    20. 仅在完成后才卸载共享。 如果未完成,请在完成任何其他磁盘的测试/添加操作后再卸载。

      sudo umount //<IPAddressorServerName>/<ShareName /<FolderMountedIn>
      
      • <IPAddressOrServerName> 是 SMB 主机的 IP 地址或名称
      • <ShareName> 是共享的名称
      • <FolderMountedIn> 是装载 SMB 的文件夹的名称
  5. 对于系统数据库以外的其他内容,例如用户数据库或备份,请按照以下步骤操作。 如果仅使用默认位置,请跳至步骤 14。

    1. 切换为超级用户。

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

      mkdir <FolderName>
      

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

      mkdir /var/opt/mssql/userdata
      
    3. 将 SMB 共享装载到 SQL Server 数据文件夹中。 此示例展示了连接到基于 Samba 的 SMB 3.0 共享所用的语法。

      Mount -t cifs //<ServerName>/<ShareName> <FolderName> -o vers=3.0,username=<UserName>,password=<Password>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> 是具有 SMB 共享的服务器的名称
      • <ShareName> 是共享的名称
      • <FolderName> 是在上一步中创建的文件夹的名称
      • <UserName> 是访问共享的用户的名称
      • <Password> 是用户的密码
      • <mssqlUID>mssql 用户的 UID
      • <mssqlGID>mssql 用户的 GID。
    4. 在不切换的情况下,发布装载,以检查装载是否成功。

    5. 键入 exit,退出超级用户身份。

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

    7. 卸载共享

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName> 是 SMB 主机的 IP 地址或名称
      • <ShareName> 是共享的名称
      • <FolderMountedIn> 是装载 SMB 的文件夹的名称。
  6. 在其他节点上重复这些步骤。

现在可以配置 FCI 了。