Настройка экземпляра отказоустойчивого кластера (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
они отображались.
Instructions
В этом разделе описывается настройка инициатора iSCSI на серверах, которые служат узлами для FCI. Инструкции должны работать в Red Hat Enterprise Linux (RHEL) и Ubuntu.
Дополнительные сведения об инициаторе iSCSI для поддерживаемых дистрибутивов см. в следующих ссылках:
Выберите один из серверов, которые будут включены в конфигурацию экземпляра отказоустойчивого кластера. Это не имеет значения, какой из них. 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.