快速入门:使用 Ansible playbook 部署 Linux 上的 SQL Server

适用于: SQL Server - Linux

本快速入门将引导你完成使用 Ansible playbook 在 Azure 虚拟机上自动执行 Linux 上的 SQL Server 部署的步骤。

Ansible 是一个开源产品,用于自动执行云预配、配置管理和应用程序部署。

Ansible playbook 可让你指导 Ansible 配置你的环境。 Playbook 是使用 YAML 编码的,以便人类可读。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户

  • 使用 Azure CLI 创建新的资源组,其中包含三个 Azure 虚拟机 (VM):

    • 创建 Azure VM,运行 Red Hat Enterprise Linux (RHEL) 8.5 或更高版本。 此 VM 将成为控制器节点

    • 创建 Azure VM,运行 RHEL 以用作第一个托管节点。

    • 创建 Azure VM,运行 Ubuntu Server 以用作第二个托管节点。

概述

配置 Ansible Core 的第一个 VM 是控制器节点。 在此节点上,将安装 SQL Server 系统角色。

其余 VM 将是目标计算机(也称为“托管节点”),用于使用该系统角色部署和配置 SQL Server。

安装 Ansible Core

从 Azure VM 上的 RHEL 8.x 开始,可以从预配置的 AppStream 存储库安装 ansible-core 包。 可以使用以下命令在控制器节点上安装 Ansible Core:

sudo yum install ansible-core

可以通过以下命令来检查安装是否成功:

ansible --version

将会看到类似于以下示例的输出:

ansible [core 2.12.2]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/<user>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/<user>/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.12 (default, Sep 16 2021, 10:46:05) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = true

在控制器节点上编辑 hosts 文件

Ansible 将在 /etc/ansible 目录中创建 hosts 文件。 使用你喜欢的编辑器编辑此文件,以添加托管节点详细信息(作为组条目或未分组的条目)。 有关如何创建自己的清单的信息,请参阅如何生成清单

在使用 hosts 文件的本示例中,第一个托管节点的 IP 地址为 10.0.0.12,第二个托管节点的 IP 地址为 10.0.0.14。

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

10.0.0.12
10.0.0.14

在节点之间配置无密码 SSH 访问

需要在控制器节点与要安装 SQL Server 的所有托管节点之间配置安全外壳 (SSH) 连接。

在控制器节点上配置 SSH

如果已配置 SSH,则可以跳过此步骤。

使用 ssh-keygen 命令生成 SSH 密钥。 运行此命令时,系统会提示你接受默认值。 完成后,你将拥有私钥和公钥对。

将公钥复制到托管节点

  1. 在每个托管节点上,必须使用 ssh-copy-id 命令从刚刚创建的控制器节点复制公钥。 如果要在托管节点上指定目标目录,可以使用 -i 参数。

  2. 在以下命令中,user 帐户可以是在创建 VM 时为每个托管节点配置的同一帐户。 也可以使用 root 帐户,但不建议在生产环境中使用此帐户。

    sudo ssh-copy-id user@10.0.0.12
    sudo ssh-copy-id user@10.0.0.14
    
  3. 若要确认 SSH 公钥已复制到每个节点,请从控制器节点使用 ssh 命令。 如果正确复制了密钥,则系统不会提示输入密码,且连接成功。

    ssh user@10.0.0.12
    ssh user@10.0.0.14
    

安装 SQL Server 系统角色

Ansible 系统角色被称为“ansible-collection-microsoft-sql”。 在控制器节点上,运行以下命令以安装 SQL Server 系统角色:

sudo yum install ansible-collection-microsoft-sql

此命令将 SQL Server 角色安装到 /usr/share/ansible/collections,其中文件如下所示:

-rw-r--r--. 1 user user 7592 Jul  2 20:22 FILES.json
-rw-r--r--. 1 user user 1053 Jul  2 20:22 LICENSE-server
-rw-r--r--. 1 user user  854 Jul  2 20:22 MANIFEST.json
-rw-r--r--. 1 user user 1278 Jul  2 20:22 README.md
drwxr-xr-x. 1 user user   20 Jul  2 20:22 roles
drwxr-xr-x. 1 user user   20 Jul  2 20:22 tests

创建和配置 Ansible playbook

安装系统角色后,将创建 SQL Server playbook YAML 文件。 若要了解各种角色变量,请参阅 SQL Server 系统角色随附的文档或 README.md。

以下示例演示了一个 playbook 文件,其中定义了用于配置 SQL Server 并启用其他功能的角色变量:

- hosts: all
  vars:
    mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula: true
    mssql_accept_microsoft_cli_utilities_for_sql_server_eula: true
    mssql_accept_microsoft_sql_server_standard_eula: true
    mssql_password: "YourP@ssw0rd"
    mssql_edition: Evaluation
    mssql_enable_sql_agent: true
    mssql_install_fts: true
    mssql_install_powershell: true
    mssql_tune_for_fua_storage: true
  roles:
    - microsoft.sql.server​

在托管节点上部署 SQL Server

若要使用 Ansible playbook 在托管节点上部署 SQL Server,请从控制器节点运行以下命令。

sudo ansible-playbook -u user playbook.yaml

此过程开始部署,最后应会看到与以下内容类似的演练摘要:

PLAY RECAP *******

10.0.0.12                  : ok=31   changed=42   unreachable=0    failed=0    skipped=0   rescued=1    ignored=0

10.0.0.14                  : ok=31   changed=42   unreachable=0    failed=0    skipped=0   rescued=1    ignored=0

清理资源

如果不打算继续使用 Azure VM,请记得将其删除。 如果在新的资源组中创建了三个 VM,则可以使用 Azure CLI 删除该资源组中的所有资源。