Устранение неполадок инструмента Azure для моментальных снимков с консистентностью для приложений (AzAcSnap)

В этой статье описывается, как устранять неполадки при использовании инструмента Azure Application Consistent Snapshot (AzAcSnap), обеспечивающего согласованность снимков приложений.

При выполнении команд AzAcSnap может возникнуть несколько распространенных проблем. Следуйте инструкциям по устранению неполадок.

Внимание

Чтобы обеспечить точное устранение неполадок и поддержку, необходимо воспроизвести проблемы с помощью последнего выпуска AzAcSnap. Обновите до последней версии, прежде чем сообщать о каких-либо проблемах. Если у вас по-прежнему возникли проблемы, перейдите на портал Azure и выберите "Поддержка и устранение неполадок" и выполните поиск рекомендаций по проблемам с AzAcSnap, это позволяет открыть запрос на обслуживание для поддержки Майкрософт.

Проверка файлов журналов, файлов результатов и системного журнала

Некоторые из лучших источников информации для изучения проблем AzAcSnap — это файлы журнала, файлы результатов и системный журнал.

Файлы журналов

Файлы журнала AzAcSnap хранятся в каталоге, настроенном logPath параметром в файле конфигурации AzAcSnap. Имя файла конфигурации по умолчанию — azacsnap.json, а значение logPath по умолчанию — ./logs, что означает, что файлы журналов записываются в каталог ./logs относительно того, где azacsnap выполняется команда. Если вы указываете для logPath абсолютное расположение, например /home/azacsnap/logs, azacsnap всегда выводит журналы в /home/azacsnap/logs, независимо от того, где выполняется команда azacsnap.

Имя файла журнала основано на имени приложения, azacsnap, команде, запускаемой с -c, например, backup, test, или имени файла конфигурации по умолчанию, например, details. С помощью команды -c backup имя файла журнала по умолчанию будет azacsnap-backup-azacsnap.log, он будет записан в каталог, настроенный logPath.

Это соглашение об именовании позволяет использовать несколько файлов конфигурации, по одному на базу данных, чтобы помочь найти связанные файлы журнала. Если имя файла конфигурации SID.json, то имя файла журнала azacsnap -c backup --configfile SID.json при использовании параметра .

Файлы результатов и системный журнал

В команду -c backup AzAcSnap записывает в файл *.result. Целью файла *.result является предоставление высокого уровня подтверждения успешности или сбоя. Если файл *.result пуст, то следует считать это сбоем. Все выходные данные, записанные в файл *.result , также выводится в системный журнал (например, /var/log/messagesс помощью logger команды). Имя файла *.result имеет то же базовое имя, что и файл журнала, чтобы разрешить сопоставление файла результатов с файлом конфигурации и файлом журнала резервного копирования. Файл *.result помещается в то же место, что и другие файлы журнала, и это простой однострочный выходной файл.

  • Пример успешного завершения:

    • Вывод в файл *.result:

      Database # 1 (PR1) : completed ok
      
    • Выходные данные в /var/log/messages:

      Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
      
  • Пример выходных данных, в которых произошел сбой, и AzAcSnap захватил ошибку:

    • Вывод в файл *.result:

      Database # 1 (PR1) : failed
      
    • Выходные данные в /var/log/messages:

      Dec 19 09:00:30 azacsnap-rhel azacsnap: Database # 1 (PR1) : failed
      

Команда AzAcSnap не будет выполняться

В некоторых случаях AzAcSnap не запускается из-за среды пользователя.

Не удалось создать CoreCLR

AzAcSnap написан в .NET, а CoreCLR — это механизм выполнения для приложений .NET. Он выполняет такие функции, как загрузка байт-кода IL, компиляция в машинный код и сборка мусора. В случае ошибок CoreCLR возникает проблема с окружающей средой, блокирующая запуск ядра CoreCLR.

Распространенная причина — ограниченные разрешения или настройка окружения для пользователя операционной системы AzAcSnap, обычно azacsnap.

Ошибка Failed to create CoreCLR, HRESULT: 0x80004005 может быть вызвана отсутствием права на запись для пользователя azacsnap к системе TMPDIR.

Примечание.

Все строки команд, начиная с # этого, выполняются как rootкоманды, все строки команд, начиная > с пользователя, выполняются от имени azacsnap пользователя.

/tmp Проверьте владение и разрешения (обратите внимание, что только root пользователь может читать и записывать в/tmp):

# ls -ld /tmp
drwx------ 9 root root 8192 Mar 31 10:50 /tmp

Типичный /tmp имеет следующие разрешения, которые позволяют пользователю azacsnap выполнять команду azacsnap:

# ls -ld /tmp
drwxrwxrwt 9 root root 8192 Mar 31 10:51 /tmp

Если невозможно изменить разрешения каталога /tmp, создайте пользовательский каталог TMPDIR.

Сделайте TMPDIR для пользователя azacsnap.

> mkdir /home/azacsnap/_tmp
> export TMPDIR=/home/azacsnap/_tmp
> azacsnap -c about
 
 
                            WKO0XXXXXXXXXXXNW
                           Wk,.,oxxxxxxxxxxx0W
                           0;.'.;dxxxxxxxxxxxKW
                          Xl'''.'cdxxxxxxxxxdkX
                         Wx,''''.,lxxxxdxdddddON
                         0:''''''.;oxdddddddddxKW
                        Xl''''''''':dddddddddddkX
                       Wx,''''''''':ddddddddddddON
                       O:''''''''',xKxddddddoddod0W
                      Xl''''''''''oNW0dooooooooooxX
                     Wx,,,,,,'','c0WWNkoooooooooookN
                    WO:',,,,,,,,;cxxxxooooooooooooo0W
                    Xl,,,,,,,;;;;;;;;;;:llooooooooldX
                   Nx,,,,,,,,,,:c;;;;;;;;coooollllllkN
                  WO:,,,,,,,,,;kXkl:;;;;,;lolllllllloOW
                  Xl,,,,,,,,,,dN WNOl:;;;;:lllllllllldK
                  0c,;;;;,,,;lK     NOo:;;:clllllllllo0W
                  WK000000000N        NK000KKKKKKKKKKXW
 
 
                Azure Application Consistent Snapshot Tool
                       AzAcSnap 7a (Build: 1AA8343)

Внимание

Изменение TMPDIR у пользователя должно стать постоянным, если изменить его профиль (например, $HOME/.bashrc или $HOME/.bash_profile). Это изменение означает, что при перезагрузке системы потребуется вручную очистить TMPDIR. Эта TMPDIR очистка обычно выполняется автоматически для /tmp.

Устранение неполадок неудачной команды "тестовое хранилище"

azacsnap -c test --test storage Команда может завершиться не успешно.

Проверка сетевых брандмауэров

Взаимодействие с Azure NetApp Files может завершиться сбоем или истечением времени ожидания. Чтобы устранить неполадки, убедитесь, что правила брандмауэра не блокируют исходящий трафик из системы, на котором запущен AzAcSnap, на следующие адреса и ПОРТы TCP/IP:

  • https://management.azure.com:443
  • https://login.microsoftonline.com:443

Использование Cloud Shell для проверки файлов конфигурации

Конфигурацию AzAcSnap можно проверить с помощью Cloud Shell на портале Azure. Использование тестов Cloud Shell для правильной настройки, обход сетевых элементов управления в виртуальной сети или виртуальной машине.

Внимание

Устранение проблем, связанных с разрешениями, выходит за рамки этого руководства.

  1. На портале Azure откройте bash сеанс Cloud Shell.

  2. Создайте тестовый каталог, например mkdir azacsnap.

  3. Перейдите в каталог azacsnap и скачайте последнюю версию AzAcSnap.

    cd azacsnap
    wget https://aka.ms/azacsnap-linux
    
  4. Сделайте скачанный двоичный файл исполняемым.

    chmod +x azacsnap-linux
    
  5. Создайте файл конфигурации AzAcSnap (например azacsnap.json, для тестирования). Это можно сделать с помощью программы vi, или воспользоваться значком загрузки Cloud Shell для отправки файла конфигурации AzAcSnap, а также, при необходимости, файла учетной записи (например, azureauth.json), если этот метод все еще используется для аутентификации.

  6. Список деталей моментального снимка.

    ./azacsnap -c details
    
  7. Запустите тест хранилища.

    ./azacsnap -c test --test storage
    

    Примечание.

    Выполнение тестовой команды может занять около 90 секунд.

SubscriptionNotFound

При использовании AzAcSnap в среде, отличной от общедоступного облака, например в облаке для государственных организаций США, подключение к Azure Resource Manager может быть нацелено на неправильную конечную точку управления Azure. В этом случае AzAcSnap может вернуть код SubscriptionNotFound ошибки с сообщением The subscription '99z999zz-99z9-99zz-99zz-9z9zz999zz99' could not be found. об ошибке В этом случае необходимо настроить AzAcSnap для использования правильной среды.

Неудачный тест с помощью Azure NetApp Files

Следующий пример ошибки заключается в запуске теста хранилища с azacsnap помощью Azure NetApp Files:

azacsnap -c test --test storage

"Не имеет авторизации"

Пример выходных данных из файла журнала:

The client '00001111-aaaa-2222-bbbb-3333cccc4444' with object id 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' does not have authorization to perform action 'Microsoft.NetApp/netAppAccounts/read' over scope ...

Эта ошибка может возникнуть из-за использования на виртуальной машине как системно назначенной управляемой идентификации, так и назначаемого пользователем удостоверения для аутентификации.

Чтобы устранить эту проблему, используйте одно из следующих решений:

  • Отключите или удалите управляемое удостоверение, назначаемое системой.
  • Настройте AzAcSnap для использования метода Service Principal для аутентификации.

Не удалось создать объект StorageANF.

BEGIN : Test process started for 'storage'
BEGIN : Storage test snapshots on 'data' volumes
BEGIN : 1 task(s) to Test Snapshots for Storage Volume Type 'data'
ERROR: Could not create StorageANF object [authFile = 'azureauth.json']

Для устранения этой ошибки сделайте следующее:

  1. Проверьте наличие файла субъекта-службы azureauth.json, как указано в файле конфигурации azacsnap.json.

  2. Проверьте файл журнала, например, журналы/azacsnap-test-azacsnap.log, чтобы узнать, имеет ли файл директора службы правильное содержимое. В следующем выводе файла журнала показано, что секретный ключ клиента недействителен.

    [19/Nov/2020:18:39:49 +13:00] DEBUG: [PID:0020080:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000215: Invalid client secret is provided.
    
  3. Проверьте файл журнала, чтобы узнать, истек ли срок действия учетной записи службы. В следующем примере файла журнала показано, что срок действия ключей секрета клиента истек.

    [19/Nov/2020:18:41:10 +13:00] DEBUG: [PID:0020257:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000222: The provided client secret keys are expired. Visit the Azure portal to create new keys for your app, or consider using certificate credentials for added security: https://learn.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials
    

Совет

Дополнительные сведения о создании новой учетной записи службы см. в разделе Включение взаимодействия с хранилищем в руководстве по установке утилиты для создания согласованных снимков приложений Azure.

Неудачный тест на большом экземпляре Azure

Следующий пример ошибки возникает при запуске azacsnap на крупном экземпляре Azure.

azacsnap -c test --test storage
The authenticity of host '172.18.18.11 (172.18.18.11)' can't be established.
ECDSA key fingerprint is SHA256:AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00.
Are you sure you want to continue connecting (yes/no)?

Чтобы устранить эту ошибку, не отвечайте yes. Убедитесь, что IP-адрес хранилища правильный. Вы можете подтвердить IP-адрес хранилища с помощью группы операций Майкрософт.

Эта ошибка обычно возникает, когда у пользователя хранилища крупных экземпляров Azure нет доступа к базовому хранилищу. Чтобы определить, имеет ли пользователь хранилища доступ к хранилищу, выполните ssh команду, чтобы проверить связь с платформой хранилища.

ssh <StorageBackupname>@<Storage IP address> "volume show -fields volume"

В следующем примере показаны ожидаемые выходные данные:

ssh clt1h80backup@10.8.0.16 "volume show -fields volume"
vserver volume
--------------------------------- ------------------------------
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00001_t020_vol
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00002_t020_vol

Устранение неполадок команды 'test hana'

azacsnap -c test --test hana Команда может завершиться не успешно.

Команда не найдена

При настройке связи с SAP HANA программа hdbuserstore используется для создания параметров безопасного подключения. AzAcSnap требует программу hdbsql для всех связей с SAP HANA. Обычно эти программы находятся в разделе /usr/sap/SID</>SYS/exe/hdb/ или /usr/sap/hdbclient и должны находиться в пользовательской $PATHсреде.

  • В следующем примере hdbsql команда не входит в систему пользователя $PATH.

    hdbsql -n 172.18.18.50 - i 00 -U AZACSNAP "select version from sys.m_database"
    
    If 'hdbsql' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf hdbsql
    
  • В следующем примере к пользовательскому hdbsql временно добавляется команда $PATH, что позволяет azacsnap правильно выполняться.

    export PATH=$PATH:/hana/shared/H80/exe/linuxx86_64/hdb/
    

Убедитесь, что установщик добавил расположение этих файлов в базу пользователя AzAcSnap.

Примечание.

Чтобы постоянно добавить в $PATH, обновите файл $HOME/.profile пользователя.

Недопустимое значение ключа

В выводе этой команды показано, что ключ подключения неправильно настроен командой hdbuserstore Set.

hdbsql -n 172.18.18.50 -i 00 -U AZACSNAP "select version from sys.m_database"
* -10104: Invalid value for KEY (AZACSNAP)

Дополнительные сведения о настройке hdbuserstore см. в статье «Начало работы с AzAcSnap».

Неудачный тест с помощью SAP HANA

При проверке взаимодействия с SAP HANA с помощью теста azacsnap -c test --test hanaможет возникнуть следующая ошибка:

> azacsnap -c test --test hana
BEGIN : Test process started for 'hana'
BEGIN : SAP HANA tests
CRITICAL: Command 'test' failed with error:
Cannot get SAP HANA version, exiting with error: 127

Для устранения этой ошибки сделайте следующее:

  1. Проверьте файл конфигурации, например azacsnap.json для каждого экземпляра HANA, чтобы убедиться, что значения базы данных SAP HANA верны.

  2. Выполните следующую команду, чтобы убедиться, что hdbsql команда находится в пути и может подключиться к серверу SAP HANA.

    hdbsql -n 172.18.18.50 - i 00 -d SYSTEMDB -U AZACSNAP "\s"
    

    В следующем примере показаны выходные данные при правильном выполнении команды:

    host          : 172.18.18.50
    sid           : H80
    dbname        : SYSTEMDB
    user          : AZACSNAP
    kernel version: 2.00.040.00.1553674765
    SQLDBC version:        libSQLDBCHDB 2.04.126.1551801496
    autocommit    : ON
    locale        : en_US.UTF-8
    input encoding: UTF8
    sql port      : saphana1:30013
    

Ошибка недостаточной привилегии в SAP HANA

Если при выполнении azacsnap возникает ошибка * 258: insufficient privilege, убедитесь, что у пользователя есть соответствующие привилегии в базе данных AZACSNAP, настроенные в соответствии с руководством по установке. Проверьте привилегии пользователя с помощью следующей команды:

hdbsql -U AZACSNAP "select GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE from sys.granted_privileges " | grep -i -e GRANTEE -e azacsnap

Команда должна возвращать следующие выходные данные:

GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE
"AZACSNAP","USER","BACKUP ADMIN","TRUE","FALSE"
"AZACSNAP","USER","CATALOG READ","TRUE","FALSE"
"AZACSNAP","USER","CREATE ANY","TRUE","TRUE"

Ошибка может предоставить дополнительные сведения для определения необходимых привилегий SAP HANA, таких как Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000. В этом случае следуйте инструкциям на портале справки SAP — GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS, которые рекомендуют использовать следующий SQL-запрос для определения сведений о необходимых привилегиях:

CALL SYS.GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS ('99X9999X99X9999X99X99XX999XXX999', ?)
GUID,CREATE_TIME,CONNECTION_ID,SESSION_USER_NAME,CHECKED_USER_NAME,PRIVILEGE,IS_MISSING_ANALYTIC_PRIVILEGE,IS_MISSING_GRANT_OPTION,DATABASE_NAME,SCHEMA_NAME,OBJECT_NAME,OBJECT_TYPE
"99X9999X99X9999X99X99XX999XXX999","2021-01-01 01:00:00.180000000",120212,"AZACSNAP","AZACSNAP","DATABASE ADMIN or DATABASE BACKUP ADMIN","FALSE","FALSE","","","",""

В предыдущем примере добавление привилегии DATABASE BACKUP ADMIN пользователю AZACSNAP из SYSTEMDB должно устранить ошибку с недостаточной привилегией.

Следующие шаги