SQL Server On Linux/Container FAQ

这篇博客由微软高级经理Amit Khandelwal解答了关于SQLServer在Linux和容器环境中的常见问题。内容涵盖SQLServer引擎的一致性、在Linux容器中的生产支持、配置管理、性能优化、资源限制、AD身份验证、Kubernetes部署以及AlwaysOn Availability组的使用情况。Amit提供了详细的操作指南和工具推荐,强调了在不同环境下的SQLServer功能和配置方法。

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。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值