美文网首页
为ubuntu上的SQLServer创建和配置可用性组

为ubuntu上的SQLServer创建和配置可用性组

作者: 这货不是王马勺 | 来源:发表于2024-01-21 15:49 被阅读0次

    先决条件

    先部署 Pacemaker 高可用性群集。

    启用可用性组功能

    与在 Windows 中不同,无法使用 PowerShell 或 SQL Server 配置管理器启用可用性组 (AG) 功能。 在 Linux 下,必须使用 mssql-conf 启用该功能。 有两种方法可以启用可用性组功能:使用 mssql-conf 实用程序,或手动编辑 mssql.conf 文件。

    注:“仅配置”的副本(configuration-only replicas)也必须启用 AG 功能,即使在 SQL Server Express 上也是如此。

    • 使用 mssql-conf 实用程序
    sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
    
    • 编辑 mssql.conf 文件
      还要修改位于 /var/opt/mssql 文件夹下的 mssql.conf 文件,以添加以下行:
    [hadr]
    
    hadr.hadrenabled = 1
    

    重启sqlserver
    启用可用性组后,与在 Windows 中一样,必须使用以下命令重启 SQL Server:

    sudo systemctl restart mssql-server
    

    创建可用性组终结点和证书

    可用性组使用 TCP 终结点进行通信。 在 Linux 下,仅当证书用于身份验证时,才支持 AG 的终结点。 必须在所有将在同一 AG 中作为副本参与的其他实例上还原来自一个实例的证书。 即使对于仅配置副本,也需要证书过程。

    只能通过 Transact-SQL 完成创建终结点和还原证书。 也可以使用非 SQL Server 生成的证书。 还需要一个进程来管理和替换任何过期的证书。

    注:如果计划使用 SQL Server Management Studio 向导创建 AG,则仍需要使用 Linux 上的 Transact-SQL 创建和还原证书。

    有关各种命令可用选项(包括安全性)的完整语法,请参阅:

    注:虽然要创建的是可用性组,但端点类型将使用 FOR DATABASE_MIRRORING,这是因为某些基础特性曾与现已弃用的功能共享。

    此示例将创建用于一个三节点配置的证书。 实例名称为 test1、test2 和 test3。

    在test1上执行以下脚本以创建主密钥、证书和端点,并备份证书。 对于本例,终结点使用典型的 TCP 端口 5022:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'asdfQWER!@34';
    GO
    
    CREATE CERTIFICATE test1_Cert
        WITH SUBJECT = 'test1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE test1_Cert TO FILE = '/var/opt/mssql/data/test1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE test1_Cert, ROLE = ALL);
    GO
    

    对 test2 执行相同的操作:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'asdfQWER!@34';
    GO
    
    CREATE CERTIFICATE test2_Cert
    WITH SUBJECT = 'test2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE test2_Cert
    TO FILE = '/var/opt/mssql/data/test2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        AUTHENTICATION = CERTIFICATE test2_Cert,
        ROLE = ALL);
    GO
    

    最后,对 test3 执行相同的操作:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'asdfQWER!@34';
    GO
    
    CREATE CERTIFICATE test3_Cert
        WITH SUBJECT = 'test3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE test3_Cert TO FILE = '/var/opt/mssql/data/test3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE test3_Cert, ROLE = ALL);
    GO
    

    使用 scp 或其他实用程序,将证书的备份复制到将成为 AG 一部分的每个节点。
    对于本示例:
    将 /var/opt/mssql/data/test1_Cert.cer 复制到 test2 和 test3。
    将 /var/opt/mssql/data/test2_Cert.cer 复制到 test1 和 test3。
    将 /var/opt/mssql/data/test3_Cert.cer 复制到 test1 和 test2。

    将所有权和与复制的证书文件相关联的组更改为 mssql。

    sudo chown mssql:mssql <CertFileName>
    

    节点1操作
    在 test1 上创建与 test2 和 test3 关联的实例级登录名和用户。

    CREATE LOGIN test2_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test2_User FOR LOGIN test2_Login;
    GO
    
    CREATE LOGIN test3_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test3_User FOR LOGIN test3_Login;
    GO
    

    在 test1 上还原 test2_Cert 和 test3_Cert。 具有其他副本的证书是 AG 通信和安全的一个重要方面。

    CREATE CERTIFICATE test2_Cert AUTHORIZATION test2_User
    FROM FILE = '/var/opt/mssql/data/test2_Cert.cer';
    GO
    
    CREATE CERTIFICATE test3_Cert AUTHORIZATION test3_User
    FROM FILE = '/var/opt/mssql/data/test3_Cert.cer';
    GO
    

    向与 test2 和 test3 关联的登录名授予连接到 test1 上的端点的权限。

    GRANT CONNECT ON ENDPOINT::AGEP TO test2_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO test3_Login;
    GO
    

    然后再另外两节点重复上述动作,如下。

    节点2操作
    在 test2 上创建与 test1 和 test3 关联的实例级登录名和用户。

    CREATE LOGIN test1_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test1_User FOR LOGIN test1_Login;
    GO
    
    CREATE LOGIN test3_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test3_User FOR LOGIN test3_Login;
    GO
    

    在 test2 上还原 test1_Cert 和 test3_Cert。

    CREATE CERTIFICATE test1_Cert
    AUTHORIZATION test1_User
    FROM FILE = '/var/opt/mssql/data/test1_Cert.cer';
    GO
    
    CREATE CERTIFICATE test3_Cert
    AUTHORIZATION test3_User
    FROM FILE = '/var/opt/mssql/data/test3_Cert.cer';
    GO
    

    向与 test1 和 test3 关联的登录名授予连接到 test2 上的端点的权限。

    GRANT CONNECT ON ENDPOINT::AGEP TO  test1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO  test3_Login;
    GO
    

    节点3操作
    在 test3 上创建与 test1 和 test2 关联的实例级登录名和用户。

    CREATE LOGIN test1_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test1_User FOR LOGIN test1_Login;
    GO
    
    CREATE LOGIN test2_Login WITH PASSWORD = 'asdfQWER!@34';
    CREATE USER test2_User FOR LOGIN test2_Login;
    GO
    

    在 test3 上还原 test1_Cert 和 test2_Cert。

    CREATE CERTIFICATE test1_Cert
    AUTHORIZATION test1_User
    FROM FILE = '/var/opt/mssql/data/test1_Cert.cer';
    GO
    
    CREATE CERTIFICATE test2_Cert
    AUTHORIZATION test2_User
    FROM FILE = '/var/opt/mssql/data/test2_Cert.cer';
    GO
    

    向与 test1 和 test2 关联的登录名授予连接到 test3 上的端点的权限。

    GRANT CONNECT ON ENDPOINT::AGEP TO test1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO test2_Login;
    GO
    

    创建可用性组

    本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 以创建 SQL Server 的可用性组。

    使用 SQL Server Management Studio
    本部分介绍如何使用 SSMS 和新可用性组向导创建群集类型为“外部”的 AG。

    1. 在 SSMS 中展开“AlwaysOn 可用性组”,右键单击“可用性组”并选择“新建可用性组向导”。
    2. 在“简介”对话框中,选择“下一步”。
    3. 在“指定可用性组选项”对话框中,输入可用性组的名称,然后在下拉列表中选择 EXTERNALNONE 群集类型。 在部署 Pacemaker 时应使用“外部”。 “无”适用于专用场景,如读取扩展。数据库级别运行状况检测选项是可选的。 有关此选项的详细信息,请参阅可用性组数据库级别运行状况检测故障转移选项。 选择下一步。
    1. 在“选择数据库”对话框中,选择将参与 AG 的数据库。 每个数据库在添加到 AG 之前必须具有完整备份。 选择“下一步”。
    1. 在“指定副本”对话框中,选择“添加副本”。
    2. 在“连接到服务器”对话框中,输入将作为次要副本的 SQL Server 的 Linux 实例的名称以及要连接的凭据。 选择“连接” 。
    3. 对包含仅配置副本或其他次要副本的实例重复前两个步骤。
    4. 现在应该在指定副本对话框中列出所有三个实例。 如果使用“外部”群集类型,对于真正的次要副本,请确保可用性模式与主副本的可用性模式匹配,并将故障转移模式设置为“外部”。 对于仅配置副本,请选择“仅配置”可用性模式。

    下面的示例显示具有两个副本的 AG,一个“外部”群集类型和一个“仅配置”副本。

    下面的示例显示具有两个副本的 AG,一个“无”群集类型和一个“仅配置”副本。

    注:此处如果实例名一致则无法添加,手动修改实例名,例:

    SELECT @@SERVERNAME
    EXEC sp_dropserver 'admin123'
    EXEC Sp_addserver  'test1','local' 
    

    重启后生效。

    此处我们使用如下策略:

    1. 如果要更改备份首选项,请选择“备份首选项”选项卡。有关 AG 备份首选项的详细信息,请参阅配置 AlwaysOn 可用性组的次要副本备份

    2. 如果使用可读辅助数据库或创建群集类型为“无”的 AG 以进行读取扩展,则可以通过选择“侦听器”选项卡来创建侦听器。稍后还可以添加侦听器。 要创建侦听器,请选择选项“创建可用性组侦听器”并输入名称、TCP/IP 端口以及使用静态或自动分配的 DHCP IP 地址。 请记住,对于群集类型为“无”的 AG,IP 应为静态,并设置为主 IP 地址。

    3. 如果为可读方案创建了侦听器,则 SSMS 17.3 或更高版本允许在向导中创建只读路由。 也可以稍后通过 SSMS 或 Transact-SQL 添加它。 立即添加只读路由:
      a. 选择“只读路由”选项卡。
      b. 输入只读副本的 URL。 这些 URL 类似于终结点,只是它们使用的是实例的端口,而不是终结点。
      c. 选择每个 URL,并从底部选择可读副本。 若要进行多选,请按住 Shift 或选择并拖动。

    4. 选择"下一步"。

    5. 选择次要副本的初始化方式。 默认情况下是使用自动种子设定,这需要在所有参与 AG 的服务器上使用相同的路径。 也可以让向导进行备份、复制和还原(第二个选项);如果已在副本上手动备份、复制和还原数据库,请将其连接(第三个选项);或稍后添加数据库(最后一个选项)。 与证书一样,如果手动备份和复制证书,则需要拥有在其他副本上设置备份文件的权限。 选择"下一步"。

    1. 在“验证”对话框中,如果所以内容都没有成功返回,请进行调查。 某些警告是可接受的而不是致命的,例如,不创建侦听器。 选择"下一步"。
    2. 在“摘要”对话框中,选择“完成”。 现在开始创建 AG。
    3. AG 创建完成后,选择“结果”上的“关闭”。 现在可以在动态管理视图中以及 SSMS 中的“Always On 高可用性”文件夹下查看副本上的 AG。

    相关文章

      网友评论

          本文标题:为ubuntu上的SQLServer创建和配置可用性组

          本文链接:https://www.haomeiwen.com/subject/twnrodtx.html