Service Fabric - Невозможно выполнить обновление конфигурации для добавления или удаления узлов - PullRequest
1 голос
/ 06 марта 2019

У меня есть локальная сервисная фабрика, состоящая из 18 узлов (9 - начальные узлы), защищенных с помощью безопасности окон gMSA.Версия кода кластера 6.4.622.9590

К сожалению, мне нужно перестроить 6 из этих узлов (3 семенных узла).Все они живут в одном центре обработки данных (кластер охватывает 3 DC).Таким образом, я хочу удалить эти 6 узлов, перестроить их, а затем повторно добавить их.

В соответствии с MSDOCs , добавление / удаление узлов выполняется через обновления конфигурации.Примечание: я уже использовал этот процесс недавно для добавления 12 узлов, поэтому хорошо понимаю концепцию обновлений конфигурации SF.

К сожалению, я не могу выполнять ЛЮБЫЕ обновления конфигурации в этом кластере, пока не удалю узлы -это связано с ValidationExceptions, сообщаемым командой Start-ServiceFabricClusterConfigurationUpgrade powershell:

  • Если я не добавлю 6 узлов в раздел «NodesToBeRemoved», я получу ошибку проверки, что не все удаленные узлы находятся вэто поле
  • Если я добавлю 6 узлов, я получу следующую ошибку проверки:
Start-ServiceFabricClusterConfigurationUpgrade : 
System.Runtime.InteropServices.COMException (-2147017627)
ValidationException: Model validation error. Removing a non-seed node and changing reliability level in the same
upgrade is not supported. Initiate an upgrade to remove node first and then change the reliability level.
At line:1 char:1
+ Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath "AL ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.Servi...usterConnection:ClusterConnection) [Start-ServiceFa
   ...gurationUpgrade], FabricException
    + FullyQualifiedErrorId : StartClusterConfigurationUpgradeErrorId,Microsoft.ServiceFabric.Powershell.StartClusterC
   onfigurationUpgrade

Итак, мы застряли!Я также уже удалил состояния узлов, оставив все 6 узлов в «Недопустимом состоянии».Get-ServiceFabricClusterConfiguration не возвращает эти 6 узлов, но они по-прежнему отображаются в SF Explorer и перечислены в XML-файле манифеста кластера.

Что касается уровня надежности, я уверен, что никто не сможетдольше меняйте это в SF;то есть более старые версии SF позволяли вам настраивать бронзу / серебро / золото в конфигурационном файле, но в последних версиях (+6,0 ??) - это вычисляемое поле, управляемое изнутри SF.В любом случае - поскольку начальные узлы будут уменьшены с 9 до 6, я подозреваю, что внутренний расчетный уровень надежности упадет (предположительно с золота на серебро).

Я также натолкнулся на хак , который кто-то использовал для удаления узлов в кластере ... но в моем сценарии узлы все еще перечислены в файле манифеста ... Тем не менее,слова hack и production никогда не должны встречаться!

Итак, как мне вывести наш производственный кластер из этой ситуации?Перестройка кластера невозможна (в этом вся причина кластеров ... высокая доступность!).

1 Ответ

0 голосов
/ 04 апреля 2019

Я обнаружил, что вышеуказанные ошибки в первую очередь являются признаком отсутствия четко задокументированных процедур, а также сообщений о плохих / вводящих в заблуждение сообщениях об ошибках при обновлении конфигурации сервисной фабрики.

Я провел немало своего собственного тестирования, чтобыубедитесь, что я могу уверенно добавить / удалить несколько узлов из кластера.Я также удалил достаточно узлов, чтобы отбросить узлы Seed с 9 до 6.

Итак, чтобы решить вышеуказанную проблему, вот что мне нужно было сделать, чтобы удалить узлы:

  1. Используйте SF-обозреватель для удаления состояния узла - это изменило состояние узла с «Ошибка» на «Неправильно»
  2. Получить последнюю конфигурацию JSON через Get-ServiceFabricClusterConfiguration
  3. Удалить узел из раздела «Узлы»
  4. Полностью удалите раздел json NodesToBeRemoved (то есть вы получите непоследовательную ошибку, если у вас будет пустой список узлов, которые нужно удалить, поэтому просто удалите содержащий блок json
  5. Выполните обновление конфигурации

Примечание. Изначально я попытался выполнить 2-5 выше - но это не сработало, и узел остался в состоянии ошибки.

Тем не менее, исходя из моего опытаТакже обратите внимание на следующее при удалении узлов (эта информация не ясна в MSDOC :

  • Вы можете удалить несколько узлов Seed одновременно(Я хотел сделать это, чтобыпопробуйте повторить описанный выше сценарий)
  • Вы также можете добавить несколько узлов одновременно - просто имейте в виду, что вы можете не видеть никаких действий / указаний с помощью инструментов состояния обновления конфигурации SF, что что-то происходит ... будьте готовы ждать вминимум +15 минут (зависит от того, сколько узлов вы добавляете ... в конце концов, SF копирует установочные файлы в узлы)
  • Иногда, при удалении одного или нескольких узлов, узел не будет успешноудален - но оставлен в состоянии ошибки.Если это так, используйте SF Explorer (или powershell) для удаления состояния узла.Статус изменится на Неверный.На этом этапе выполните другое обновление конфигурации, убедившись, что:
    • Удаленные узлы не находятся в разделе Nodes
    • Удаленные узлы не находятся в списке NodesToBeRemoved
    • Как указано выше, , если значение NodesToBeRemoved является (или должно быть) пустым, удалите весь этот блок JSON в противном случае вы получите вводящее в заблуждение / расплывчатое предупреждение о параметре NodesToBeRemoved, содержащем противоречивую информацию.

Последняя часть - действительно запутанная часть, которая запутала меня в прошлый раз.Также следует помнить, что, как только вы успешно удалите узлы, Get-ServiceFabricClusterConfiguration все равно вернет удаленные узлы в параметре NodesToBeRemoved.Это может запутать / сбить вас с толку при любых последующих попытках выполнить обновление конфигурации.Таким образом, Я рекомендую вам сделать еще одно окончательное обновление конфигурации с полностью удаленным этим разделом .

В качестве последнего примечания: если вы повторно добавите ранее удаленный узел, он может прийтивернуться в деактивированный статус.Просто активируйте этот узел, и все должно быть в порядке.

...