Настройка экземпляра отказоустойчивого кластера (iSCSI) — SQL Server на Linux
Область применения: SQL Server — Linux
В этой статье описывается, как настроить хранилище iSCSI для экземпляра отказоустойчивого кластера в Linux.
Настройка iSCSI
iSCSI использует сеть для предоставления дисков с сервера, известного как таргет, к серверам. Для серверов, подключающихся к цели iSCSI, требуется настроить инициатор iSCSI. Дискам в целевой системе присваиваются явные разрешения, чтобы только те инициаторы, которые должны иметь возможность получить к ним доступ, могли это сделать. Объект должен обладать высокой доступностью и надежностью.
Важные сведения о цели iSCSI
Хотя в этом разделе не описывается, как настроить целевой объект iSCSI, поскольку это зависит от типа используемого вами источника, убедитесь, что безопасность дисков, которые будут использоваться узлами кластера, настроена.
Цель никогда не следует настраивать на любом из узлов экземпляра отказоустойчивого кластера, если используется цель iSCSI на базе Linux. Для обеспечения производительности и доступности сети iSCSI должны быть отделены от сетей, используемых обычным сетевым трафиком как на исходном, так и на клиентских серверах. Сети, используемые для iSCSI, должны быть быстрыми. Помните, что сеть потребляет некоторую пропускную способность процессора, поэтому при использовании обычного сервера следует проводить соответствующее планирование.
Самое важное для выполнения на целевой системе — это убедиться, что созданным дискам назначены соответствующие разрешения, чтобы к ним могли обращаться только серверы, участвующие в экземпляре отказоустойчивого кластера. Пример показан здесь из целевого объекта Microsoft iSCSI, где linuxnodes1
— это создаваемое имя, и в этом случае IP-адреса узлов назначаются так, чтобы NewFCIDisk1.vhdx
был видим для них.
Инструкции
В этом разделе описывается настройка инициатора iSCSI на серверах, которые служат узлами для FCI. Инструкции должны работать в Red Hat Enterprise Linux (RHEL) и Ubuntu.
Дополнительные сведения об инициаторе iSCSI для поддерживаемых дистрибутивов см. в следующих ссылках:
Выберите один из серверов, который будет участвовать в настройке FCI. Это не имеет значения, какой из них. iSCSI должен находиться в выделенной сети, поэтому настройте iSCSI для распознавания и использования этой сети. Запустите
sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new
, где<iSCSIIfaceName>
— это уникальное или понятное имя для сети. В следующем примере используетсяiSCSINIC
.sudo iscsiadm -m iface -I iSCSINIC -o new
Ниже приведены ожидаемые выходные данные.
New interface iSCSINIC added
Измените
/var/lib/iscsi/ifaces/iSCSIIfaceName
. Убедитесь, что в нем полностью заполнены следующие значения.-
iface.net_ifacename
— это имя сетевой карты, как показано в ОС. -
iface.hwaddress
— ЭТО MAC-адрес уникального имени, которое будет создано для следующего интерфейса. iface.ipaddress
iface.subnet_Mask
См. следующий пример.
-
Найдите iSCSI-адресат.
sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
<iSCSINetName>
— это уникальное/понятное имя для сети,<TargetIPAddress>
— это IP-адрес цели iSCSI, а<TargetPort>
— порт цели iSCSI.Ниже приведены ожидаемые выходные данные.
10.181.182.1:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target 10.201.202.1:3260,1 iqn.1991-05.com.contoso:dc1-linuxnodes1-target [2002:b4b5:b601::b4b5:b601]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target [2002:8c9:ca01::c8c9:ca01]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
Войдите в целевой объект.
sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
<iSCSIIfaceName>
— это уникальное/понятное имя для сети, а<TargetIPAddress>
— это IP-адрес цели iSCSI.Ниже приведены ожидаемые выходные данные.
Logging in to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] (multiple) Login to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] successful.
Проверьте, есть ли подключение к целевому объекту iSCSI.
sudo iscsiadm -m session
Результат должен быть аналогичным приведенному ниже:
tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
Проверьте подключенные диски iSCSI.
sudo grep "Attached SCSI" /var/log/messages
Создайте физический том на диске iSCSI.
sudo pvcreate /dev/<devicename>
<devicename>
— это имя устройства из предыдущего шага.Создайте группу томов на диске iSCSI. Диски, назначенные одной группе томов, отображаются в виде пула или коллекции.
sudo vgcreate <VolumeGroupName> /dev/devicename
<VolumeGroupName>
— это имя группы томов, а<devicename>
— это имя устройства из шага 6.Создайте и проверьте логический том для диска.
sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
<size>
— это размер создаваемого тома, который можно указать с помощью G (gigabytes), T (terabytes) и т. д.,<LogicalVolumeName>
является именем логического тома и<VolumeGroupName>
именем группы томов на предыдущем шаге.Ниже приведены ожидаемые выходные данные.
Logical volume "FCIDataLV1" created.
В следующем примере создается том размером 25 ГБ.
Выполните
sudo lvs
, чтобы просмотреть созданный LVM.Отформатируйте логический том с использованием поддерживаемой файловой системы. Для EXT4 используйте следующий пример.
sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
<VolumeGroupName>
— это имя группы томов из предыдущего шага.<LogicalVolumeName>
— это имя логического тома из предыдущего шага.Для системных баз данных или других объектов, хранящихся в расположении данных по умолчанию, выполните указанные ниже действия. В противном случае перейдите к шагу 13.
Убедитесь, что SQL Server остановлен на сервере, на который вы работаете.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Полностью перейдите в режим суперпользователя. При успешном выполнении вы не получаете никаких подтверждений.
sudo -i
Станьте
mssql
пользователем. При успешном выполнении вы не получаете никаких подтверждений.su mssql
Создайте временный каталог для хранения данных и файлов журналов SQL Server. При успешном выполнении вы не получаете никаких подтверждений.
mkdir <TempDir>
<TempDir>
— это имя папки. В следующем примере создается папка с именем /var/opt/mssql/TempDir.mkdir /var/opt/mssql/TempDir
Скопируйте данные и файлы журналов SQL Server во временный каталог. При успешном выполнении вы не получаете никаких подтверждений.
cp /var/opt/mssql/data/* <TempDir>
<TempDir>
— это имя папки из предыдущего шага.Проверьте наличие файлов в папке.
ls <TempDir>
<TempDir>
— имя папки из предыдущих шагов.Удалите файлы из существующего каталога данных SQL Server. При успешном выполнении вы не получаете никаких подтверждений.
rm - f /var/opt/mssql/data/*
Проверьте, были ли файлы удалены. На следующем рисунке показан пример всей последовательности из c до h.
ls /var/opt/mssql/data
Введите
exit
, чтобы вернуться на пользователяroot
.Подключите логический том iSCSI в папке данных SQL Server. При успешном выполнении вы не получаете никаких подтверждений.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
<VolumeGroupName>
— это имя группы томов, а<LogicalVolumeName>
— это имя созданного логического тома. Приведенный ниже пример синтаксиса соответствует группе томов и логическому тому из предыдущей команды.mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
Измените владельца подключения на
mssql
. При успешном выполнении вы не получаете никаких подтверждений.chown mssql /var/opt/mssql/data
Измените владельца группы точки монтирования на
mssql
. При успешном выполнении вы не получаете никаких подтверждений.chgrp mssql /var/opt/mssql/data
Переключитесь на
mssql
пользователя. При успешном выполнении вы не получаете никаких подтверждений.su mssql
Скопируйте файлы из временного каталога
/var/opt/mssql/data
. При успешном выполнении вы не получаете никаких подтверждений.cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
Проверьте наличие файлов.
ls /var/opt/mssql/data
Ввод
exit
не должен бытьmssql
.Ввод
exit
не должен бытьroot
.Запустите SQL Server. Если все данные были скопированы и параметры безопасности применены правильно, сервер SQL Server должен отобразиться как запущенный.
sudo systemctl start mssql-server sudo systemctl status mssql-server
Остановите SQL Server и убедитесь, что она завершит работу.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Для объектов, отличных от системных баз данных, например пользовательских баз данных или резервных копий, выполните указанные ниже действия. Если используется только расположение по умолчанию, перейдите к шагу 14.
Перейдите в режим суперпользователя. При успешном выполнении вы не получаете никаких подтверждений.
sudo -i
Создайте папку для использования SQL Server.
mkdir <FolderName>
<FolderName>
— это имя папки. Если папка находится в другом месте, необходимо указать полный путь к ней. В приведенном ниже примере создается папка /var/opt/mssql/userdata.mkdir /var/opt/mssql/userdata
Подключите логический том iSCSI в папке, созданной в предыдущем шаге. При успешном выполнении вы не получаете никаких подтверждений.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
— это имя группы томов,<LogicalVolumeName>
— это имя созданного логического тома, а<FolderName>
— имя папки. Ниже показан пример синтаксиса.mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Измените владение созданной папкой для
mssql
. При успешном выполнении вы не получаете никаких подтверждений.chown mssql <FolderName>
<FolderName>
— это имя созданной папки. Пример см. здесь.chown mssql /var/opt/mssql/userdata
Измените группу созданной
mssql
папки на . При успешном выполнении вы не получаете никаких подтверждений.chown mssql <FolderName>
<FolderName>
— это имя созданной папки. Пример см. здесь.chown mssql /var/opt/mssql/userdata
Введите
exit
, чтобы выйти из режима суперпользователя.Создайте в этой папке базу данных для тестирования. Следующий скрипт создает базу данных, переключает контекст на нее, проверяет наличие файлов на уровне ОС, а затем удаляет временное расположение. Для выполнения этого скрипта можно использовать SSMS или sqlcmd .
DROP DATABASE TestDB; GO CREATE DATABASE TestDB ON (NAME = TestDB_Data, FILENAME = '/var/opt/mssql/userdata/TestDB_Data.mdf') LOG ON (NAME = TestDB_Log, FILENAME = '/var/opt/mssql/userdata/TestDB_Log.ldf'); GO USE TestDB; GO
Выполните следующую команду в оболочке, чтобы просмотреть новые файлы базы данных.
sudo ls /var/opt/mssal/userdata
Ниже приведены ожидаемые выходные данные.
lost+found TestDB_Data.mdf TestDB_Log.ldf
Удалите базу данных для очистки.
DROP DATABASE TestDB; GO
sudo ls /var/opt/mssal/userdata
Ниже приведены ожидаемые выходные данные.
lost+found
Отсоединить общий ресурс
sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
— это имя группы томов,<LogicalVolumeName>
— это имя созданного логического тома, а<FolderName>
— имя папки. Ниже показан пример синтаксиса.sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Настройте сервер таким образом, чтобы группу томов мог активировать только Pacemaker.
sudo lvmconf --enable-halvm --services -startstopservices
Создайте список групп томов на сервере. Все, что перечислено и не относится к диску iSCSI, используется системой, например, для диска ОС.
sudo vgs
Измените раздел конфигурации активации файла /etc/lvm/lvm.conf. Настройте следующую строку.
volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
<ListOfVGsNotUsedByPacemaker>
— это список групп томов из результатов шага 20, которые не используются FCI. Заключите каждый из них в кавычки и разделите запятыми. Пример см. здесь.При запуске Linux он подключает файловую систему. Чтобы убедиться, что только Pacemaker может подключить диск iSCSI, перестройте корневой образ файловой системы.
Выполните следующую команду, которая может занять несколько минут. При успешном выполнении вы не получите сообщения.
sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
Перезапустите сервер.
На другом сервере, который будет участвовать в факультативном кластере, выполните шаги 1–6. Это предоставляет целевой объект iSCSI серверу SQL Server.
Создайте список групп томов на сервере. В нем должна отображаться созданная ранее группа томов.
sudo vgs
Запустите SQL Server и убедитесь, что он может быть запущен на этом сервере.
sudo systemctl start mssql-server sudo systemctl status mssql-server
Остановите SQL Server и убедитесь, что она завершит работу.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Повторите шаги 1–6 на всех других серверах, которые будут участвовать в FCI.
Теперь вы готовы настроить FCI.