SQL Server On Linux/Container FAQ

Posted 薛定谔的DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server On Linux/Container FAQ相关的知识,希望对你有一定的参考价值。

Amit Khandelwal 是一位微软的高级经理,对 SQL Server 很了解。如果你对运行在非 Windows 环境的 SQL Server 不了解,以下是 Amit 对 SQL Server 运行在 Linux/容器环境的一些常见问题回答。尽管如此,官方也对一些相关问题做了回答。

Linux 上的 SQL Server 常见问题 (FAQ)

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-faq?view=sql-server-ver15

• 部署在任何操作系统或环境中的 SQL Server 的 SQL Server 引擎是否相同?

Amit:SQL Server 引擎在部署在不同操作系统上的 SQL Server 之间是相同的,无论是 Linux 上的 SQL Server、Windows 上的 SQL Server、部署在独立主机或 kubernetes 平台上的容器。唯一的区别是目前在 Linux/容器上的 SQL Server 上目前不支持的功能很少。

SQL Server 不受支持的功能的当前列表,参考:

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-editions-and-components-2019?view=sql-server-ver15#Unsupported

•SQL Server 在基于 Windows 的容器上是否支持生产?

Amit:目前为止,生产环境工作负载不支持在 Windows 容器上运行的 SQL Server。它处于预览模式有一段时间了,但由于当前生态系统的限制,现在它不受支持,并且也不在测试版中。

• 如何在 Linux 访问 SQL Server 配置管理器,简单地说,如何在 Linux 上配置 SQL Server?

Amit:你可以在 Linux 上使用 mssql-conf 工具配置 SQL Server 。更改 SQL Server 端口、启用 AD 身份验证、启用/禁用跟踪标志等,所有任务都可以通过 mssql-conf 工具完成。你可以运行命令“mssql-conf –help”以了解使用 mssql-conf 工具可用的各种设置。

• 部署 Linux 容器上的 SQL Server 是否支持生产工作负载?支持边界是什么?

Amit:是的,生产工作负载支持 Linux 容器上的 SQL Server。你可以在任何受支持的 Linux 发行版的容器上部署 SQL Server 。你可以从 Microsoft 容器注册表中获取 SQL Server 镜像,要发现基于 Ubuntu 的 SQL 容器镜像,你可以参考 docker hub(https://hub.docker.com/_/microsoft-mssql-server),要发现基于 Redhat 的容器,你可以参考Redhat 容器目录(https://catalog.redhat.com/software/containers/mssql/rhel/server/5ba50865f5a0de06555a2ee7)。也可以使用自定义 docker 文件创建 SQL Server 映像。

• 如何为基于 SUSE 的主机创建 SQL Server Linux 容器映像?是否有一个可以参考的dockerfile示例?

Amit:你可以通过dockerfile为基于SUSE的主机创建SQL Server Linux容器镜像,类似的示例可以参考。(https://github.com/microsoft/mssql-docker/tree/master/linux/preview/SLES

• 是否也可以使用 podman 部署 SQL Server Linux 容器?就像对 docker 那样。

Amit:是的,Podman/docker 都受支持,可用于部署和运行 SQL Server 容器。

• 如果我是 Linux 生态系统的新手,精通 SQL Server,是否有任何教程了解 Linux 上的 SQL Server?

Amit:如果你计划开始在 Linux 上使用 SQL Server,并且之前有在 Windows 上使用 SQL Server 的经验,你会发现 Linux 上的 SQL Server 并没有什么不同,只是设置体验和生态系统体验发生了变化。首先,你可以参考本教程来帮助你了解 Linux 的基础知识,然后你可以根据自己的兴趣进一步构建基础知识。同样,如果你精通 Linux,但不熟悉 SQL Server,则可以从本教程开始。

• 我可以跨运行在各种操作系统或容器上的 SQL Server 实例附加/移动/恢复数据库吗?

Amit:当然,SQL Server 引擎在 SQL Server 的所有部署中都是相同的。因此,你可以从基于 SQL Server Linux 的容器中备份数据库,将其移动到 Windows 环境,然后在裸机/VM 上的 Windows 上的 SQL Server 上还原它。事实上,官方有关于将数据库迁移到 Linux 上的 SQL 的可用文档参考(https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-overview?view=sql-server-ver15)。

• 是否有关于如何在 Linux 上部署 SQL Server 以获得最佳性能的指导性建议?

Amit:是的,官方提供了详细的文档(https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-ver15),其中讨论了可以在存储、文件系统、内核、CPU 等方面的性能配置,以获得最佳 SQL Server 性能实践。本文中提到的大部分建议也可以应用于运行 SQL Server 容器的主机。例如如果持久存储来自主机,则存储设置可以应用于主机,调整配置文件设置可以应用于主机等等。

• 我可以继续限制分配给 SQL Server 容器的资源吗?

Amit:是的,在部署 SQL Server 容器时,你可以为每个部署 SQL Server 的容器设置 CPU 和内存等资源限制。诸如“-cpus”和“-memory”之类的 docker 标志可用于设置资源限制。让我们举一个例子来进一步理解这一点,假设你在主机上总共有 16 个逻辑处理器,当你部署容器时,你使用以下命令:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=strongpassword" -p 1433:1433 -name sql1 -hostname sql1 -cpus 8 -d mcr.microsoft.com/mssql/server:2019-CU10-ubuntu-18.04

此命令可限制 SQL Server 容器仅使用 16 个逻辑处理器中的 8 个。在错误日志中,你可以看到 SQL Server 所有 16 个逻辑处理器,但它仅使用 16 个 CPU 中的 8 个来运行工作量。

• 我可以在 Kubernetes 集群上部署 SQL Server 吗?这是否受支持?

Amit:是的,你可以将 SQL Server 部署在 Kubernetes 集群或像 openshift 这样的 opinated Kubernetes 集群上,它支持生产工作负载。你可以将 SQL Server 部署为 statefulset 或部署类型。示例部署 yaml 文件可在此处获取以供参考,可用于所有 kubernetes 集群进行部署。

• 如何在容器上配置 SQL Server,是否可以使用 mssql-conf 工具?

Amit:对于 SQL Server 容器,你可以在部署 SQL Server 容器时通过在容器内挂载 mssql-conf 文件来提供配置设置。其中一些配置设置也可用作部署 SQL Server 容器时的环境变量。

• 你是否有任何示例 Helm Charts 来部署 SQL Server 容器?

Amit:是的,你可以通过 helm charts 部署 SQL Server,这里有一些示例 helm charts 来帮助你入门,请参考 statefulset helm chart 进行statefulset部署(https://github.com/microsoft/mssql-docker/tree/master/linux/sample-helm-chart-statefulset-deployment)。

• 在Kubernetes 平台上部署SQL Server 容器时,我们是否也可以设置资源限制?

Amit:当然,在部署 SQL Server 容器时,你可以使用 yaml 文件中的资源限制选项。事实上,您应该始终尝试并确保 SQL Server 容器/pod的QoS(服务质量)设置为有保证的。这意味着 SQL Server 的资源请求和资源限制是相同的,以确保 SQL Server 容器在 kubernetes 集群计划在工作节点上运行时获得资源。

• 我可以为Linux/容器上的SQL Server 配置AD (Active Directory) 身份验证吗?

Amit:Linux 上的SQL Server和基于 SQL Server Linux 的容器都支持 Active Directory 身份验证。实际上,你现在可以使用一个名为 adutil 的预览工具来轻松地为 Linux 上的 SQL Server 和基于SQL Server Linux 的容器配置活动目录身份验证。此工具简化了活动目录身份验证的配置,确保您可以从加入域的Linux机器上管理windows活动目录。

在 Linux 容器上为 SQL Server 启用 AD 身份验证时,你可以拥有一个环境,其中运行 SQL Server 容器的主机未加入域,但容器内的 SQL Server 已加入域。但是,对于 Linux BareMetal/VM 上的 SQL Server,你需要确保主机和 SQL Server 服务是同一域的一部分。如果域具有双向信任并且属于同一林的一部分,则还支持跨域登录。

• 我想在同一 kubernetes 集群上运行的多个 SQL Server 容器之间设置 Always on Availability 组,我该怎么做?

Amit:截至今天,容器上的 SQL Server 可用性组设置仅在Read Scale模式下受支持,在任何其他模式下均不受支持。因此,你有一个 DR 选项,为容器上的 SQL Server 使用AlwaysOn可用性组,但不使用 HA(高可用性)。你可以在 kubernetes 中运行的 SQL Server 容器上设置 Read scale always on availability group。

 

以上是关于SQL Server On Linux/Container FAQ的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)

Migrating Oracle on UNIX to SQL Server on Windows

Enable a SQL Server Trace Flag Globally on Linux

SQL Server on Linux 2017(初识 LINUX下的SQL-SERVER功能应用)

SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)

SQL Server ——用 join on 连接多个表