Создание и настройка группы доступности для SQL Server на Linux
Область применения: SQL Server — Linux
В этом руководстве описывается создание и настройка группы доступности для SQL Server на Linux. В отличие от SQL Server 2016 (13.x) и более ранних версий на Windows, вы можете включить группу доступности с предварительным созданием базового кластера Pacemaker или без него. Интеграция с кластером, если это необходимо, выполняется позже.
В руководстве рассматриваются следующие задачи:
- включение групп доступности;
- Создайте конечные точки и сертификаты для групп доступности.
- Используйте SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности.
- Создайте имя входа и разрешения SQL Server для Pacemaker.
- Создайте ресурсы групп доступности в кластере Pacemaker (только внешний тип).
Предварительные условия
Разверните кластер Pacemaker с высоким уровнем доступности, как описано в статье Развертывание кластера Pacemaker для SQL Server на Linux.
Включение компонента "Группы доступности"
В отличие от Windows, вы не можете использовать PowerShell или диспетчер конфигурации SQL Server для включения функции групп доступности (AG). В Linux необходимо использовать mssql-conf
, чтобы включить эту функцию. Включить компонент "Группы доступности" можно двумя способами: с помощью программы mssql-conf
или путем изменения файла mssql.conf
вручную.
Внимание
Функция AG должна быть включена для реплик только для конфигурации, даже на SQL Server Express.
Использование служебной программы mssql-conf
В командной строке выполните следующую команду:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
Изменение файла mssql.conf
Вы также можете изменить файл mssql.conf
в папке /var/opt/mssql
, добавив следующие строки:
[hadr]
hadr.hadrenabled = 1
Перезапуск SQL Server
После включения групп доступности, как в Windows, необходимо перезапустить SQL Server, выполнив следующую команду:
sudo systemctl restart mssql-server
Создание конечных точек и сертификатов для групп доступности
Для взаимодействия группа доступности использует конечные точки TCP. В Linux конечные точки группы высокой доступности поддерживаются только в случае использования сертификатов для аутентификации. Необходимо восстановить сертификат из одного экземпляра на всех остальных экземплярах, которые будут участвовать в качестве реплик в той же группе доступности (AG). Этот процесс необходим даже для реплики, предназначенной только для конфигурации.
Создавать конечные точки и восстанавливать сертификаты можно только с помощью Transact-SQL. Кроме того, можно использовать сертификаты, созданные не в SQL Server. Вам также потребуется процесс управления и замены всех сертификатов, срок действия которого истекает.
Внимание
Если вы планируете использовать мастер SQL Server Management Studio для создания группы доступности, вам всё равно необходимо создать сертификаты и восстановить их с помощью Transact-SQL в Linux.
Полный синтаксис параметров, доступных для различных команд (включая безопасность), см. в следующих статьях:
Примечание.
Хотя вы создаете группу доступности, тип конечной точки используется FOR DATABASE_MIRRORING
, так как некоторые базовые аспекты когда-то были общими с этой устаревшей функцией.
В этом примере создаются сертификаты для конфигурации с тремя узлами. Имена экземпляров: LinAGN1
, LinAGN2
, и LinAGN3
.
Выполните следующий скрипт
LinAGN1
, чтобы создать главный ключ, сертификат и конечную точку и создать резервную копию сертификата. В этом примере для конечной точки используется стандартный TCP-порт 5022.CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN1_Cert WITH SUBJECT = 'LinAGN1 AG Certificate'; GO BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL ); GO
Выполните то же самое на
LinAGN2
:CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN2_Cert WITH SUBJECT = 'LinAGN2 AG Certificate'; GO BACKUP CERTIFICATE LinAGN2_Cert TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN2_Cert, ROLE = ALL ); GO
Наконец, выполните ту же последовательность на
LinAGN3
.CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN3_Cert WITH SUBJECT = 'LinAGN3 AG Certificate'; GO BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL ); GO
Используя
scp
или другую служебную программу, скопируйте резервные копии сертификатов на каждый узел, который будет входить в группу доступности.В этом примере:
- Скопируйте
LinAGN1_Cert.cer
вLinAGN2
иLinAGN3
. - Скопируйте
LinAGN2_Cert.cer
вLinAGN1
иLinAGN3
. - Копируйте
LinAGN3_Cert.cer
вLinAGN1
иLinAGN2
.
- Скопируйте
Измените владельца и группу скопированных файлов сертификатов на
mssql
.sudo chown mssql:mssql <CertFileName>
Создайте учетные записи на уровне экземпляра и пользователей, связанных с
LinAGN2
иLinAGN3
наLinAGN1
.CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login; GO CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login; GO
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Восстановить
LinAGN2_Cert
иLinAGN3_Cert
наLinAGN1
. Наличие сертификатов других реплик необходимо для обмена данными и безопасности группы доступности.CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO
Предоставьте логинам, связанным с
LinAG2
иLinAGN3
, разрешение подключаться к конечной точке наLinAGN1
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Создайте имена входа на уровне экземпляра и пользователей, связанных с
LinAGN1
иLinAGN3
наLinAGN2
.CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login; GO CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login; GO
Восстановите
LinAGN1_Cert
иLinAGN3_Cert
наLinAGN2
.CREATE CERTIFICATE LinAGN1_Cert AUTHORIZATION LinAGN1_User FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO
Предоставьте логинам, связанным с
LinAG1
иLinAGN3
, разрешение на подключение к конечной точке наLinAGN2
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Создайте учетные записи на уровне экземпляра и пользователей, связанных с
LinAGN1
иLinAGN2
наLinAGN3
.CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login; GO CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login; GO
Восстановите
LinAGN1_Cert
иLinAGN2_Cert
наLinAGN3
.CREATE CERTIFICATE LinAGN1_Cert AUTHORIZATION LinAGN1_User FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO
Предоставьте логинам, связанным с
LinAG1
иLinAGN2
, разрешение на подключение к конечной точкеLinAGN3
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login; GO
Создание группы доступности
В этом разделе описывается, как использовать SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности для SQL Server.
Использование SQL Server Management Studio
В этом разделе показано, как создать группу доступности с типом кластера "Внешний" с помощью мастера создания новых групп доступности в SSMS.
В SSMS разверните Высокий уровень доступности Always On, щелкните правой кнопкой мыши на Группы доступности и выберите Новый мастер создания групп доступности.
В диалоговом окне "Введение" нажмите кнопку Далее.
В диалоговом окне "Указать параметры группы доступности" введите имя группы доступности и выберите тип
EXTERNAL
кластера илиNONE
в раскрывающемся списке. Следует использовать внешний интерфейс, когда Pacemaker будет развертываться. Ни один из них не предназначен для специализированных сценариев, таких как горизонтальное масштабирование чтения. Выбор параметра для обнаружения работоспособности на уровне базы данных необязателен. Дополнительные сведения об этом параметре см. в статье Параметр определения уровня работоспособности базы данных группы доступности. Выберите Далее.В диалоговом окне "Выбор баз данных" выберите базы данных, которые будут участвовать в AG (группе доступности). Прежде чем добавлять базу данных в группу доступности, необходимо создать ее полную резервную копию. Выберите Далее.
В диалоговом окне "Указание реплик" щелкните Добавить реплику.
В диалоговом окне "Подключение к серверу" введите имя экземпляра LINUX SQL Server, который будет вторичной репликой, и учетными данными для подключения. Нажмите Подключиться.
Повторно выполните два предыдущих действия применительно к экземпляру, который будет содержать реплику только для конфигурации или другую вторичную реплику.
Все три экземпляра теперь должны отображаться в диалоговом окне "Указание копий". Если используется тип кластера "Внешний", режим доступности для вторичной реплики, которая будет истинной вторичной репликой, должен быть тем же, что и для первичной, а режим отработки отказа должен быть "Внешний". Для реплики, поддерживающей только конфигурацию, выберите режим доступности "Только конфигурация".
В следующем примере показана AG с двумя репликами, тип кластера "Внешний" и реплика только для конфигурации.
В приведенном ниже примере показана группа доступности (AG) с двумя репликами, типом кластера "Нет" и репликой, предназначенной только для конфигурации.
Если вы хотите изменить параметры резервного копирования, перейдите на вкладку "Параметры резервного копирования". Дополнительные сведения о параметрах резервного копирования с помощью групп доступности см. в статье "Настройка резервных копий на вторичных репликах группы доступности Always On".
При использовании доступных для чтения вторичных файлов или создании группы доступности с типом кластера None для масштабирования чтения можно создать прослушиватель, выбрав вкладку Прослушивателя. Прослушиватель также можно добавить позже. Чтобы создать прослушиватель, установите переключатель в положение Создать прослушиватель группы доступности и введите имя, порт TCP/IP, а также укажите, следует ли использовать статический IP-адрес или адрес, назначаемый службой DHCP автоматически. Учтите, что для группы доступности с типом кластера *None* IP-адрес должен быть статическим и установлен на IP-адрес основного узла.
Если слушатель создается для сценариев, доступных для чтения, SSMS 17.3 и более поздние версии позволяют создать маршрутизацию только для чтения в мастере. Ее можно также добавить позднее с помощью SSMS или Transact-SQL. Чтобы добавить маршрутизацию только для чтения сразу, выполните указанные ниже действия.
Выберите вкладку "Маршрутизация только для чтения".
Введите URL реплик в режиме только для чтения. Эти URL-адреса аналогичны адресам конечных точек за тем исключением, что используется порт экземпляра, а не конечной точки.
Выберите каждый URL-адрес, а затем в области ниже выберите реплики, доступные для чтения. Чтобы выбрать сразу несколько элементов, нажмите и удерживайте клавишу SHIFT или используйте перетаскивание.
Выберите Далее.
Выберите способ инициализации вторичных реплик. Способ по умолчанию — автоматическое заполнение, для чего требуется одинаковый путь на всех серверах, входящих в группу доступности. Кроме того, мастер может выполнять резервное копирование, копирование и восстановление (второй вариант); присоединяйтесь к нему, если вы вручную создали резервную копию, скопировали и восстановили базу данных на репликах (третий вариант); или добавьте базу данных позже (последний параметр). Как и в случае с сертификатами, если вы вручную делаете резервные копии и копируете их, разрешения на файлы резервной копии необходимо задать на других репликах. Выберите Далее.
В диалоговом окне проверки, если результат не отображается как успешный, проведите расследование. Некоторые предупреждения допустимы и не являются смертельными, например, если вы не создаете прослушиватель. Выберите Далее.
В диалоговом окне "Сводка" нажмите кнопку Готово. Теперь начинается процесс создания AG.
Когда создание группы доступности завершится, в разделе "Результаты" нажмите кнопку Закрыть. Теперь вы можете видеть АГ (группу доступности) на репликах в динамических представлениях управления, а также в папке Always On High Availability в SSMS (SQL Server Management Studio).
Использование Transact-SQL
В этом разделе приводятся примеры создания группы доступности с помощью Transact-SQL. Прослушиватель и маршрутизацию только для чтения можно настроить после создания группы доступности. Сама группа доступности может быть изменена с помощью ALTER AVAILABILITY GROUP
, но изменение типа кластера невозможно в SQL Server 2017 (14.x). Если вы не имели в виду создать группу доступности с типом внешнего кластера, необходимо удалить ее и создать заново с типом кластера None. Дополнительные сведения и описание других параметров см. в следующих статьях:
- CREATE AVAILABILITY GROUP (Transact-SQL)
- ALTER AVAILABILITY GROUP (группа доступности ALTER) (Transact-SQL)
- Настройка маршрутизации только для чтения в группе доступности Always On
- Настройка прослушивателя для группы доступности Always On
Пример A. Две реплики с репликой только для конфигурации (внешний тип кластера)
В этом примере показано, как создать группу доступности с двумя репликами, одна из которых предназначена исключительно для конфигурации.
Выполните на узле, который будет основной репликой, содержащей полную копию баз данных для чтения и записи. В этом примере используется автоматическое заполнение.
CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL) FOR DATABASE <DBName> REPLICA ON N'LinAGN1' WITH ( ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT), N'LinAGN2' WITH ( ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC), N'LinAGN3' WITH ( ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022', AVAILABILITY_MODE = CONFIGURATION_ONLY); GO
В окне запроса, подключенном к другой реплике, выполните следующие действия, чтобы присоединить реплику к группе доступности и инициировать процесс заполнения данных из первичной реплики во вторичную.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
В окне запроса, подключенном к реплике, использующей только конфигурацию, присоедините её к группе доступности.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO
Пример B. Три реплики с маршрутизацией только для чтения (внешний тип кластера)
В этом примере демонстрируется конфигурация с тремя полными репликами и настройка маршрутизации только для чтения в момент создания АГ.
Выполните на узле, который будет основной репликой, содержащей полную копию баз данных для чтения и записи. В этом примере используется автоматическое заполнение.
CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL) FOR DATABASE < DBName > REPLICA ON N'LinAGN1' WITH ( ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN2.FullyQualified.Name', 'LinAGN3.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433') ), N'LinAGN2' WITH ( ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, SEEDING_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN1.FullyQualified.Name', 'LinAGN3.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433') ), N'LinAGN3' WITH ( ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, SEEDING_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN1.FullyQualified.Name', 'LinAGN2.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433') ) LISTENER '<ListenerName>' ( WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433 ); GO
Несколько замечаний касательно этой конфигурации:
-
AGName
— имя группы доступности. -
DBName
— имя базы данных, используемой с группой доступности. Это также может быть список имен, разделенных запятыми. -
ListenerName
— это имя, отличное от любого из базовых серверов или узлов. Он будет зарегистрирован в DNS вместе сIPAddress
. -
IPAddress
— это IP-адрес, связанный сListenerName
. Это также уникально и не такое же, как любой из серверов или узлов. Приложения и конечные пользователи используют либоListenerName
, либоIPAddress
для подключения к AG. -
SubnetMask
— маска подсетиIPAddress
. В SQL Server 2019 (15.x) и предыдущих версиях это255.255.255.255
. В SQL Server 2022 (16.x) и более поздних версиях это0.0.0.0
.
-
В окне запроса, подключенном к другой реплике, выполните приведенные ниже команды, чтобы присоединить реплику к группе доступности и инициировать процесс заполнения из первичной во вторичную реплику.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
Повторите шаг 2 для третьей реплики.
Пример C: две реплики с маршрутизацией только для чтения (тип кластера None)
В этом примере демонстрируется создание конфигурации с двумя репликами с типом кластера "Нет". Он используется для сценария масштабирования операций чтения, в котором отработка отказа не ожидается. Это создает прослушиватель, который на самом деле является основной репликой, и организует маршрутизацию запросов только для чтения с использованием функции циклического обхода.
- Выполните на узле, который будет основной репликой, содержащей полную копию баз данных для чтения и записи. В этом примере используется автоматическое заполнение.
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
N'LinAGN1' WITH (
ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
PRIMARY_ROLE(
ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
),
SECONDARY_ROLE(
ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
)
),
N'LinAGN2' WITH (
ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC,
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
('LinAGN1.FullyQualified.Name',
'LinAGN2.FullyQualified.Name')
)),
SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
),
LISTENER '<ListenerName>' (WITH IP = (
'<PrimaryReplicaIPAddress>',
'<SubnetMask>'),
Port = <PortOfListener>
);
GO
Где:
-
AGName
— имя группы доступности. -
DBName
— имя базы данных, которая будет использоваться с группой доступности. Это также может быть список имен, разделенных запятыми. -
PortOfEndpoint
— номер порта, используемый созданной конечной точкой. -
PortOfInstance
— номер порта, используемый экземпляром SQL Server. -
ListenerName
— это имя, отличающееся от любого из базовых реплик, но на самом деле не используемое. -
PrimaryReplicaIPAddress
— ЭТО IP-адрес первичной реплики. -
SubnetMask
— маска подсетиIPAddress
. В SQL Server 2019 (15.x) и предыдущих версиях это255.255.255.255
. В SQL Server 2022 (16.x) и более поздних версиях это0.0.0.0
.
Присоедините вторичную реплику к группе доступности и инициируйте автоматическое заполнение.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
Создание имени входа и разрешений SQL Server для Pacemaker
Кластер высокой доступности Pacemaker на основе SQL Server на Linux должен иметь доступ к экземпляру SQL Server и разрешения на саму группу доступности. Эти действия создают имя входа и связанные разрешения, а также файл, который сообщает Pacemaker, как войти в SQL Server.
В окне запроса, подключенном к первой реплике, выполните следующий сценарий:
CREATE LOGIN PMLogin WITH PASSWORD ='<password>'; GO GRANT VIEW SERVER STATE TO PMLogin; GO GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin; GO
В узле 1 введите следующую команду:
sudo emacs /var/opt/mssql/secrets/passwd
Откроется редактор Emacs.
Введите в редакторе следующие две строки:
PMLogin <password>
Ctrl
Удерживайте клавишу, а затемX
нажмитеC
, чтобы выйти и сохранить файл.Выполнить
sudo chmod 400 /var/opt/mssql/secrets/passwd
чтобы заблокировать файл.
Повторите шаги 1–5 на других серверах, которые будут служить репликами.
Создайте ресурсы группы доступности в кластере Pacemaker (только для внешнего использования)
После создания группы доступности в SQL Server соответствующие ресурсы необходимо создать в Pacemaker, если указан тип кластера External. С группой доступности связаны два ресурса: сама группа доступности и IP-адрес. Настройка ресурса IP-адреса не обязательна, если вы не используете функцию прослушивателя, но рекомендуется.
Созданный вами ресурс AG — это тип ресурса, который называется клоном. Ресурс AG по сути имеет копии на каждом узле, и есть один управляющий ресурс под названием мастер. Главный сервер связан с сервером, хостящим первичную реплику. Другие ресурсы размещают вторичные реплики (обычные или только для конфигурации) и могут быть повышены до главных в случае переключения на резервный сервер.
Примечание.
Коммуникация, свободная от предвзятости
Эта статья содержит ссылки на термин slave (подчиненный), который Майкрософт считает оскорбительным при использовании в этом контексте. Термин присутствует в этой статье, так как в настоящее время он присутствует в программном обеспечении. При удалении термина из программного обеспечения мы удалим его из статьи.
Чтобы создать ресурс AG, используйте следующий синтаксис:
sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
Где
NameForAGResource
— это уникальное имя, заданное этому кластерному ресурсу для АГ, аAGName
— имя созданной АГ.В RHEL 7.7 и Ubuntu 18.04, и более поздних версиях, может возникнуть предупреждение с использованием
--master
, или ошибка, такая какsqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'
. Чтобы избежать этой ситуации, используйте следующее:sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
Создайте ресурс IP-адреса для шлюза приложений, который будет ассоциирован с функцией прослушивания.
sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
Где
NameForIPResource
это уникальное имя ресурса IP иIPAddress
статический IP-адрес, назначенный ресурсу.Чтобы IP-адрес и ресурс AG выполнялись на одном узле, необходимо настроить ограничение совместного размещения.
sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
Где
NameForIPResource
— это имя ресурса IP, аNameForAGResource
— это имя ресурса AG.Создайте ограничение очередности, чтобы ресурс AG запускался до ресурса IP-адреса. Хотя ограничение совместного размещения предполагает ограничение порядка, оно его усиливает.
sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
Где
NameForIPResource
имя ресурса IP-адреса, иNameForAGResource
имя AG ресурса.
Следующий шаг
В этом руководстве вы узнали, как создать и настроить группу доступности для SQL Server на Linux. Вы научились выполнять следующие задачи:
- включение групп доступности;
- создание конечных точек AG и сертификатов.
- Используйте SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности.
- Создайте имя входа и разрешения SQL Server для Pacemaker.
- Создание ресурсов AG в кластере Pacemaker.
Для выполнения большинства задач администрирования AG, включая обновления и отработку отказа, см. статью: